commit
d950d8e527
@ -0,0 +1,67 @@ |
||||
.DS_Store |
||||
# Byte-compiled / optimized / DLL files |
||||
__pycache__/ |
||||
*.py[cod] |
||||
*$py.class |
||||
|
||||
# C extensions |
||||
*.so |
||||
|
||||
# Distribution / packaging |
||||
.Python |
||||
env/ |
||||
build/ |
||||
develop-eggs/ |
||||
dist/ |
||||
downloads/ |
||||
eggs/ |
||||
.eggs/ |
||||
lib/ |
||||
lib64/ |
||||
parts/ |
||||
sdist/ |
||||
var/ |
||||
*.egg-info/ |
||||
.installed.cfg |
||||
*.egg |
||||
.idea/* |
||||
xml_files/ |
||||
|
||||
# PyInstaller |
||||
# Usually these files are written by a python script from a template |
||||
# before PyInstaller builds the exe, so as to inject date/other infos into it. |
||||
*.manifest |
||||
*.spec |
||||
|
||||
# Installer logs |
||||
pip-log.txt |
||||
pip-delete-this-directory.txt |
||||
|
||||
# Unit test / coverage reports |
||||
htmlcov/ |
||||
.tox/ |
||||
.coverage |
||||
.coverage.* |
||||
.cache |
||||
nosetests.xml |
||||
coverage.xml |
||||
*,cover |
||||
|
||||
# Translations |
||||
*.mo |
||||
*.pot |
||||
|
||||
# Django stuff: |
||||
*.log |
||||
|
||||
# Sphinx documentation |
||||
docs/_build/ |
||||
|
||||
# PyBuilder |
||||
target/ |
||||
|
||||
other/split_clash_config/split_config |
||||
ai_news/save_data |
||||
|
||||
manual/clash/clash_each_node |
||||
manual/singbox/singbox_each_node |
||||
@ -0,0 +1,11 @@ |
||||
jack0210_@hotmail.com|||aaaAAA111!!! |
||||
yujieccyj01@hotmail.com|||aaaAAA111!!! |
||||
yujieccyj02@hotmail.com|||aaaAAA111!!! |
||||
yujieccyj03@hotmail.com|||aaaAAA111!!! |
||||
yujieccyj04@hotmail.com|||aaaAAA111!!! |
||||
yujieccyj05@hotmail.com|||aaaaAA111!!! |
||||
yujieccyj06@hotmail.com|||aaaAAA111!!! |
||||
yujieccyj07@hotmail.com|||aaaAAA111!!! |
||||
yujieccyj08@hotmail.com|||aaaAAA111!!! |
||||
yujieccyj09@hotmail.com|||aaaAAA111!!! |
||||
yujieccyj10@hotmail.com|||aaaAAA111!!! |
||||
@ -0,0 +1,173 @@ |
||||
package main |
||||
|
||||
import ( |
||||
"bytes" |
||||
"encoding/json" |
||||
"fmt" |
||||
"net/http" |
||||
"strings" |
||||
"sync" |
||||
) |
||||
|
||||
type LoginResponse struct { |
||||
Data struct { |
||||
AccessToken string `json:"access_token"` |
||||
TokenType string `json:"token_type"` |
||||
Token string `json:"token"` |
||||
} `json:"data"` |
||||
} |
||||
|
||||
type ClaimResponse struct { |
||||
Message string `json:"message"` |
||||
} |
||||
|
||||
func dailyClaim3DOS(email, password string) string { |
||||
client := &http.Client{} |
||||
loginURL := "https://api.dashboard.3dos.io/api/auth/login" |
||||
loginPayload := map[string]string{ |
||||
"email": email, |
||||
"password": password, |
||||
} |
||||
loginPayloadJSON, _ := json.Marshal(loginPayload) |
||||
|
||||
loginReq, _ := http.NewRequest("POST", loginURL, bytes.NewBuffer(loginPayloadJSON)) |
||||
loginReq.Header.Set("Accept", "application/json, text/plain, */*") |
||||
loginReq.Header.Set("Accept-Encoding", "gzip, deflate, br, zstd") |
||||
loginReq.Header.Set("Accept-Language", "zh-CN,zh;q=0.9") |
||||
loginReq.Header.Set("Content-Type", "application/json") |
||||
loginReq.Header.Set("Origin", "https://dashboard.3dos.io") |
||||
loginReq.Header.Set("Priority", "u=1, i") |
||||
loginReq.Header.Set("Referer", "https://dashboard.3dos.io/") |
||||
loginReq.Header.Set("Sec-CH-UA", `"Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"`) |
||||
loginReq.Header.Set("Sec-CH-UA-Mobile", "?0") |
||||
loginReq.Header.Set("Sec-CH-UA-Platform", `"Windows"`) |
||||
loginReq.Header.Set("Sec-Fetch-Dest", "empty") |
||||
loginReq.Header.Set("Sec-Fetch-Mode", "cors") |
||||
loginReq.Header.Set("Sec-Fetch-Site", "same-site") |
||||
loginReq.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36") |
||||
|
||||
loginResp, err := client.Do(loginReq) |
||||
if err != nil { |
||||
return fmt.Sprintf("%s: 登录请求失败", email) |
||||
} |
||||
defer loginResp.Body.Close() |
||||
|
||||
if loginResp.StatusCode != 200 { |
||||
return fmt.Sprintf("%s: 登录失败", email) |
||||
} |
||||
|
||||
var loginData LoginResponse |
||||
json.NewDecoder(loginResp.Body).Decode(&loginData) |
||||
|
||||
token := loginData.Data.AccessToken |
||||
if token == "" { |
||||
token = loginData.Data.Token |
||||
} |
||||
tokenType := loginData.Data.TokenType |
||||
|
||||
if token == "" || tokenType == "" { |
||||
return fmt.Sprintf("%s: 登录响应中未找到 Token 或 Token 类型", email) |
||||
} |
||||
|
||||
authorizationHeader := fmt.Sprintf("%s %s", tokenType, token) |
||||
|
||||
optionsURL := "https://api.dashboard.3dos.io/api/claim-reward" |
||||
optionsReq, _ := http.NewRequest("OPTIONS", optionsURL, nil) |
||||
optionsReq.Header.Set("Accept", "*/*") |
||||
optionsReq.Header.Set("Accept-Encoding", "gzip, deflate, br, zstd") |
||||
optionsReq.Header.Set("Accept-Language", "zh-CN,zh;q=0.9") |
||||
optionsReq.Header.Set("Access-Control-Request-Headers", "authorization,cache-control,content-type,expires,pragma") |
||||
optionsReq.Header.Set("Access-Control-Request-Method", "POST") |
||||
optionsReq.Header.Set("Origin", "https://dashboard.3dos.io") |
||||
optionsReq.Header.Set("Priority", "u=1, i") |
||||
optionsReq.Header.Set("Referer", "https://dashboard.3dos.io/") |
||||
optionsReq.Header.Set("Sec-Fetch-Dest", "empty") |
||||
optionsReq.Header.Set("Sec-Fetch-Mode", "cors") |
||||
optionsReq.Header.Set("Sec-Fetch-Site", "same-site") |
||||
optionsReq.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36") |
||||
|
||||
optionsResp, err := client.Do(optionsReq) |
||||
if err != nil { |
||||
return fmt.Sprintf("%s: OPTIONS 请求失败", email) |
||||
} |
||||
defer optionsResp.Body.Close() |
||||
|
||||
claimURL := "https://api.dashboard.3dos.io/api/claim-reward" |
||||
claimPayload := map[string]string{ |
||||
"id": "daily-reward-api", |
||||
} |
||||
claimPayloadJSON, _ := json.Marshal(claimPayload) |
||||
|
||||
claimReq, _ := http.NewRequest("POST", claimURL, bytes.NewBuffer(claimPayloadJSON)) |
||||
claimReq.Header.Set("Accept", "application/json, text/plain, */*") |
||||
claimReq.Header.Set("Authorization", authorizationHeader) |
||||
claimReq.Header.Set("Cache-Control", "no-cache") |
||||
claimReq.Header.Set("Content-Type", "application/json") |
||||
claimReq.Header.Set("Expires", "0") |
||||
claimReq.Header.Set("Origin", "https://dashboard.3dos.io") |
||||
claimReq.Header.Set("Pragma", "no-cache") |
||||
claimReq.Header.Set("Priority", "u=1, i") |
||||
claimReq.Header.Set("Referer", "https://dashboard.3dos.io/") |
||||
claimReq.Header.Set("Sec-CH-UA", `"Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"`) |
||||
claimReq.Header.Set("Sec-CH-UA-Mobile", "?0") |
||||
claimReq.Header.Set("Sec-CH-UA-Platform", `"Windows"`) |
||||
claimReq.Header.Set("Sec-Fetch-Dest", "empty") |
||||
claimReq.Header.Set("Sec-Fetch-Mode", "cors") |
||||
claimReq.Header.Set("Sec-Fetch-Site", "same-site") |
||||
claimReq.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36") |
||||
|
||||
claimResp, err := client.Do(claimReq) |
||||
if err != nil { |
||||
return fmt.Sprintf("%s: claim-reward 请求失败", email) |
||||
} |
||||
defer claimResp.Body.Close() |
||||
|
||||
var claimData ClaimResponse |
||||
json.NewDecoder(claimResp.Body).Decode(&claimData) |
||||
|
||||
if claimResp.StatusCode != 200 && claimResp.StatusCode != 429 { |
||||
return fmt.Sprintf("%s: claim 报错: %s, 状态码%d", email, claimData.Message, claimResp.StatusCode) |
||||
} |
||||
|
||||
return fmt.Sprintf("%s: %s", email, claimData.Message) |
||||
} |
||||
|
||||
func main() { |
||||
fmt.Println("开始执行...") |
||||
|
||||
accountList := []string{ |
||||
"jack0210_@hotmail.com|||aaaAAA111!!!", |
||||
"yujieccyj01@hotmail.com|||aaaAAA111!!!", |
||||
"yujieccyj02@hotmail.com|||aaaAAA111!!!", |
||||
"yujieccyj03@hotmail.com|||aaaAAA111!!!", |
||||
"yujieccyj04@hotmail.com|||aaaAAA111!!!", |
||||
"yujieccyj05@hotmail.com|||aaaaAA111!!!", |
||||
"yujieccyj06@hotmail.com|||aaaAAA111!!!", |
||||
"yujieccyj07@hotmail.com|||aaaAAA111!!!", |
||||
"yujieccyj08@hotmail.com|||aaaAAA111!!!", |
||||
"yujieccyj09@hotmail.com|||aaaAAA111!!!", |
||||
"yujieccyj10@hotmail.com|||aaaAAA111!!!", |
||||
} |
||||
|
||||
var wg sync.WaitGroup |
||||
results := make(chan string, len(accountList)) |
||||
|
||||
for _, account := range accountList { |
||||
if account == "" { |
||||
continue |
||||
} |
||||
wg.Add(1) |
||||
go func(acc string) { |
||||
defer wg.Done() |
||||
email, password := strings.Split(acc, "|||")[0], strings.Split(acc, "|||")[1] |
||||
results <- dailyClaim3DOS(email, password) |
||||
}(account) |
||||
} |
||||
|
||||
wg.Wait() |
||||
close(results) |
||||
|
||||
for result := range results { |
||||
fmt.Println(result) |
||||
} |
||||
} |
||||
@ -0,0 +1,151 @@ |
||||
# -*- coding: utf-8 -*- |
||||
import os |
||||
from httpx import Client |
||||
from concurrent.futures import ThreadPoolExecutor, as_completed |
||||
|
||||
|
||||
def daily_claim_3dos(email, password): |
||||
client = Client(proxy="http://127.0.0.1:7890") |
||||
# client = Client() |
||||
|
||||
login_url = "https://api.dashboard.3dos.io/api/auth/login" |
||||
login_headers = { |
||||
"Accept": "application/json, text/plain, */*", |
||||
"Accept-Encoding": "gzip, deflate, br, zstd", |
||||
"Accept-Language": "zh-CN,zh;q=0.9", |
||||
"Content-Type": "application/json", |
||||
"Origin": "https://dashboard.3dos.io", |
||||
"Priority": "u=1, i", |
||||
"Referer": "https://dashboard.3dos.io/", |
||||
"Sec-CH-UA": '"Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"', |
||||
"Sec-CH-UA-Mobile": "?0", |
||||
"Sec-CH-UA-Platform": '"Windows"', |
||||
"Sec-Fetch-Dest": "empty", |
||||
"Sec-Fetch-Mode": "cors", |
||||
"Sec-Fetch-Site": "same-site", |
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36" |
||||
} |
||||
login_payload = { |
||||
"email": email, |
||||
"password": password |
||||
} |
||||
|
||||
try: |
||||
login_response = client.post(login_url, json=login_payload, headers=login_headers) |
||||
except Exception as e: |
||||
print(f"登录请求失败:{e}") |
||||
return False |
||||
|
||||
if login_response.status_code == 200: |
||||
# print(f"{email}: 登录成功!") |
||||
login_data = login_response.json() |
||||
# print("登录响应内容:", login_data) |
||||
|
||||
data = login_data.get("data") |
||||
token = data.get("access_token") or data.get("token") |
||||
token_type = data.get("token_type") |
||||
if not token or not token_type: |
||||
print("登录响应中未找到 Token 或 Token 类型!") |
||||
return False |
||||
|
||||
authorization_header = f"{token_type} {token}" |
||||
else: |
||||
print("登录失败!") |
||||
print("登录响应状态码:", login_response.status_code) |
||||
print("登录响应内容:", login_response.json()) |
||||
return False |
||||
|
||||
options_url = "https://api.dashboard.3dos.io/api/claim-reward" |
||||
options_headers = { |
||||
"Accept": "*/*", |
||||
"Accept-Encoding": "gzip, deflate, br, zstd", |
||||
"Accept-Language": "zh-CN,zh;q=0.9", |
||||
"Access-Control-Request-Headers": "authorization,cache-control,content-type,expires,pragma", |
||||
"Access-Control-Request-Method": "POST", |
||||
"Origin": "https://dashboard.3dos.io", |
||||
"Priority": "u=1, i", |
||||
"Referer": "https://dashboard.3dos.io/", |
||||
"Sec-Fetch-Dest": "empty", |
||||
"Sec-Fetch-Mode": "cors", |
||||
"Sec-Fetch-Site": "same-site", |
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36" |
||||
} |
||||
|
||||
try: |
||||
options_response = client.options(options_url, headers=options_headers) |
||||
except Exception as e: |
||||
print(f"OPTIONS 请求失败:{e}") |
||||
return False |
||||
|
||||
# print("OPTIONS 请求响应状态码:", options_response.status_code) |
||||
|
||||
claim_url = "https://api.dashboard.3dos.io/api/claim-reward" |
||||
claim_headers = { |
||||
"Accept": "application/json, text/plain, */*", |
||||
"Authorization": authorization_header, |
||||
"Cache-Control": "no-cache", |
||||
"Content-Type": "application/json", |
||||
"Expires": "0", |
||||
"Origin": "https://dashboard.3dos.io", |
||||
"Pragma": "no-cache", |
||||
"Priority": "u=1, i", |
||||
"Referer": "https://dashboard.3dos.io/", |
||||
"Sec-CH-UA": '"Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"', |
||||
"Sec-CH-UA-Mobile": "?0", |
||||
"Sec-CH-UA-Platform": '"Windows"', |
||||
"Sec-Fetch-Dest": "empty", |
||||
"Sec-Fetch-Mode": "cors", |
||||
"Sec-Fetch-Site": "same-site", |
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36" |
||||
} |
||||
claim_payload = { |
||||
"id": "daily-reward-api" |
||||
} |
||||
|
||||
try: |
||||
claim_response = client.post(claim_url, json=claim_payload, headers=claim_headers) |
||||
except Exception as e: |
||||
print(f"{email} claim-reward 请求失败:{e}") |
||||
return False |
||||
|
||||
message = claim_response.json().get("message") |
||||
|
||||
if claim_response.status_code not in [200, 429]: |
||||
print(f"{email} claim 报错: {message}, 状态码{claim_response.status_code}") |
||||
return False |
||||
|
||||
result = f"{email}: {message}" |
||||
return result |
||||
|
||||
|
||||
def main(): |
||||
print("开始执行...") |
||||
|
||||
account_list = [ |
||||
"jack0210_@hotmail.com|||aaaAAA111!!!", |
||||
"yujieccyj01@hotmail.com|||aaaAAA111!!!", |
||||
"yujieccyj02@hotmail.com|||aaaAAA111!!!", |
||||
"yujieccyj03@hotmail.com|||aaaAAA111!!!", |
||||
"yujieccyj04@hotmail.com|||aaaAAA111!!!", |
||||
"yujieccyj05@hotmail.com|||aaaaAA111!!!", |
||||
"yujieccyj06@hotmail.com|||aaaAAA111!!!", |
||||
"yujieccyj07@hotmail.com|||aaaAAA111!!!", |
||||
"yujieccyj08@hotmail.com|||aaaAAA111!!!", |
||||
"yujieccyj09@hotmail.com|||aaaAAA111!!!", |
||||
"yujieccyj10@hotmail.com|||aaaAAA111!!!", |
||||
] |
||||
|
||||
with ThreadPoolExecutor(max_workers=len(account_list)) as executor: |
||||
futures = [] |
||||
for account in account_list: |
||||
email, password = account.split("|||") |
||||
futures.append(executor.submit(daily_claim_3dos, email, password)) |
||||
|
||||
for future in as_completed(futures): |
||||
result = future.result() |
||||
if result: |
||||
print(result) |
||||
|
||||
|
||||
if __name__ == "__main__": |
||||
main() |
||||
@ -0,0 +1,33 @@ |
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
) |
||||
|
||||
type Account struct { |
||||
Email string |
||||
Password string |
||||
} |
||||
|
||||
func main() { |
||||
// 直接写死的账户信息
|
||||
accounts := []Account{ |
||||
{Email: "jack0210_@hotmail.com", Password: "aaaAAA111!!!"}, |
||||
{Email: "yujieccyj01@hotmail.com", Password: "aaaAAA111!!!"}, |
||||
{Email: "yujieccyj02@hotmail.com", Password: "aaaAAA111!!!"}, |
||||
{Email: "yujieccyj03@hotmail.com", Password: "aaaAAA111!!!"}, |
||||
{Email: "yujieccyj04@hotmail.com", Password: "aaaAAA111!!!"}, |
||||
{Email: "yujieccyj05@hotmail.com", Password: "aaaaAA111!!!"}, |
||||
{Email: "yujieccyj06@hotmail.com", Password: "aaaAAA111!!!"}, |
||||
{Email: "yujieccyj07@hotmail.com", Password: "aaaAAA111!!!"}, |
||||
{Email: "yujieccyj08@hotmail.com", Password: "aaaAAA111!!!"}, |
||||
{Email: "yujieccyj09@hotmail.com", Password: "aaaAAA111!!!"}, |
||||
{Email: "yujieccyj10@hotmail.com", Password: "aaaAAA111!!!"}, |
||||
} |
||||
|
||||
// 遍历账户并执行操作
|
||||
for _, account := range accounts { |
||||
fmt.Printf("Processing account: %s\n", account.Email) |
||||
// 在这里添加您需要的操作
|
||||
} |
||||
} |
||||
@ -0,0 +1,10 @@ |
||||
anyio==4.8.0 |
||||
certifi==2025.1.31 |
||||
h11==0.14.0 |
||||
httpcore==1.0.7 |
||||
httpx==0.27.2 |
||||
idna==3.10 |
||||
setuptools==75.8.0 |
||||
sniffio==1.3.1 |
||||
typing_extensions==4.12.2 |
||||
wheel==0.45.1 |
||||
@ -0,0 +1,5 @@ |
||||
{ |
||||
"cookies": [ |
||||
"_ga=GA1.1.691286698.1738712937; privy-session=privy.agnthub.ai; _ga_HZ81TDGZGW=GS1.1.1741104719.42.1.1741105531.0.0.0; privy-token=eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IlVZWDlVRXppSll1ajlpeTFEbmc5NnY3OXZQcGMtaV9DdXU0bm0wWnVCVkkifQ.eyJzaWQiOiJjbTZ3ZXR2eXQwMDBmOHNvajR3YXh0ZjQ4IiwiaXNzIjoicHJpdnkuaW8iLCJpYXQiOjE3NDExNDM1ODUsImF1ZCI6ImNtNmplc3V4ZDAwYTlvam8waTlybHh1ZGsiLCJzdWIiOiJkaWQ6cHJpdnk6Y202cjUzcHg2MDBid3A1aHlncW0zc3pxayIsImV4cCI6MTc0MTE0NzE4NX0.7DnKA0WG5b2CV2C5-iJlF0miKNP9t2ofGJbRe6C4-SOPnSm747ceG9RGUM15b1VdUFOOmXjc4vxUa4rlFVlbtg; privy-id-token=eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IlVZWDlVRXppSll1ajlpeTFEbmc5NnY3OXZQcGMtaV9DdXU0bm0wWnVCVkkifQ.eyJjciI6IjE3Mzg3MTM0NjIiLCJsaW5rZWRfYWNjb3VudHMiOiJbe1widHlwZVwiOlwidHdpdHRlcl9vYXV0aFwiLFwic3ViamVjdFwiOlwiMTYzOTM3MzU1ODA5Mzg0MDM4NFwiLFwidXNlcm5hbWVcIjpcIkFsaXNoYU1hcnQxNjkzOFwiLFwibmFtZVwiOlwiQWxpc2hhIE1hcnRpblwiLFwicGZwXCI6XCJodHRwczovL3Bicy50d2ltZy5jb20vcHJvZmlsZV9pbWFnZXMvMTYzOTM3NDE0MDM1OTc0MTQ0MC9LUXg0U0h6al9ub3JtYWwuanBnXCIsXCJsdlwiOjE3MzkwMzIxMzB9LHtcInR5cGVcIjpcIndhbGxldFwiLFwiYWRkcmVzc1wiOlwiMHhjNTVEM2VhNEZmMTVkRDdGMTQ2MjUzNTEyOEZEYmZBQTlGYmQzZUEzXCIsXCJjaGFpbl90eXBlXCI6XCJldGhlcmV1bVwiLFwid2FsbGV0X2NsaWVudF90eXBlXCI6XCJwcml2eVwiLFwibHZcIjoxNzM4NzEzNDczfSx7XCJ0eXBlXCI6XCJkaXNjb3JkX29hdXRoXCIsXCJzdWJqZWN0XCI6XCI5NTI1MTEzNDk0MTY2NjEwMTJcIixcInVzZXJuYW1lXCI6XCJtYXJjaDQwNjQjMFwiLFwibHZcIjoxNzM4NzYzMzE5fV0iLCJpc3MiOiJwcml2eS5pbyIsImlhdCI6MTc0MTE0MzU4NSwiYXVkIjoiY202amVzdXhkMDBhOW9qbzBpOXJseHVkayIsInN1YiI6ImRpZDpwcml2eTpjbTZyNTNweDYwMGJ3cDVoeWdxbTNzenFrIiwiZXhwIjoxNzQxMTQ3MTg1fQ.esW33-NgR46Mf5HMA3rcNg06eigNvtExRNVk9jw94CWvVO4VrUktZ9XUsBoJrZKvs9lUu3n2kr_e14iS_aZzUA" |
||||
] |
||||
} |
||||
@ -0,0 +1,153 @@ |
||||
# -*- coding: utf-8 -*- |
||||
import time |
||||
import os |
||||
import json |
||||
import httpx |
||||
|
||||
|
||||
class AgntTask: |
||||
def __init__(self, cookies_list): |
||||
self.cookies_list = cookies_list |
||||
|
||||
def daily_task(self): |
||||
for cookies in self.cookies_list: |
||||
url = "https://hub-api.agnthub.ai/api/daily-rewards/claim" |
||||
headers = { |
||||
"accept": "application/json, text/plain, */*", |
||||
"accept-encoding": "gzip, deflate, br, zstd", |
||||
"accept-language": "zh-CN,zh;q=0.9", |
||||
"content-length": "0", |
||||
"cookie": cookies, |
||||
"origin": "https://quests.agnthub.ai", |
||||
"priority": "u=1, i", |
||||
"referer": "https://quests.agnthub.ai/", |
||||
"sec-ch-ua": '"Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"', |
||||
"sec-ch-ua-mobile": "?0", |
||||
"sec-ch-ua-platform": '"Windows"', |
||||
"sec-fetch-dest": "empty", |
||||
"sec-fetch-mode": "cors", |
||||
"sec-fetch-site": "same-site", |
||||
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36" |
||||
} |
||||
|
||||
try: |
||||
response = httpx.post(url, headers=headers) |
||||
print(response.json()) |
||||
except Exception as e: |
||||
print(str(e)) |
||||
|
||||
def upload_task(self): |
||||
for cookies in self.cookies_list: |
||||
url = "https://hub-api.agnthub.ai/api/tasks/make-ai-laugh/34ecad1e-94df-48ba-b5f4-242fdd9d6546" |
||||
headers = { |
||||
"accept": "application/json, text/plain, */*", |
||||
"accept-encoding": "gzip, deflate, br, zstd", |
||||
"accept-language": "zh-CN,zh;q=0.9", |
||||
"content-length": "0", |
||||
"cookie": cookies, |
||||
"origin": "https://quests.agnthub.ai", |
||||
"priority": "u=1, i", |
||||
"referer": "https://quests.agnthub.ai/", |
||||
"sec-ch-ua": '"Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"', |
||||
"sec-ch-ua-mobile": "?0", |
||||
"sec-ch-ua-platform": '"Windows"', |
||||
"sec-fetch-dest": "empty", |
||||
"sec-fetch-mode": "cors", |
||||
"sec-fetch-site": "same-site", |
||||
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36" |
||||
} |
||||
|
||||
try: |
||||
response = httpx.post(url, headers=headers) |
||||
print(response.json()) |
||||
except Exception as e: |
||||
print(str(e)) |
||||
|
||||
def tasks(self): |
||||
tasks_list = [ |
||||
"6813de78-f821-4a84-8e8c-3aa89c15b2aa", |
||||
"fce2e806-a6c7-4de2-abc2-260d13bcfb2f", |
||||
"0bcb7d19-7c63-4933-96b0-00141ce54dbe", |
||||
"2f3241c5-29a0-4f47-acf3-9370baf94e74", |
||||
"d2b35062-40c1-48b8-bca5-c48779ccc66d", |
||||
"ab2fd158-b894-47bc-aadb-645259b46cc0", |
||||
"3861cd8e-5393-4285-b6ee-29a5ee301ee5", |
||||
"1a75844a-a108-4fbd-bfc3-c7476b26b73d", |
||||
"217e2f67-c110-4ef7-a636-8ac0623df3e8", |
||||
"49c1db40-8ecf-4454-af0a-fcc81b222135", |
||||
"2e6ff98c-132b-4886-8f38-6c89d1a7b02a", |
||||
"9fc278e8-4045-4130-9f52-6ce3b713318c", |
||||
"4f913da3-58b6-4636-a2c2-912fb01c73d4", |
||||
"6216f4e1-eafb-4442-a5d4-5b1830f89655", |
||||
"ebbba0a4-96d9-4fa4-85f9-6fb07fbc282a", |
||||
"5172f361-d28e-4aa2-a3ba-2adfe5057539", |
||||
"f81146e9-9ef9-4979-b0a0-437ea5c3e1bb", |
||||
"22301ec3-3a75-4758-a886-ab768312ffe5", |
||||
"6debaef3-844e-40f3-be6d-d99a6fd9f2a1", |
||||
"932d0c29-22ad-4be5-92b4-fc3a2e13aaed", |
||||
"05027b13-88a3-42a4-992a-0ce2a53068d4", |
||||
"9e0addfa-51fd-4f3b-a6f2-8dbe301265aa", |
||||
"4a42ba64-7822-469c-8899-bc07b5dd5d69", |
||||
"516d941e-b006-4744-a190-6c3207750854", |
||||
"bf9e7362-5eed-4110-bbe3-1289722a36b3", |
||||
"7eed7668-e71a-42ed-98ac-a0ded8bc0296", |
||||
"2cac41ba-36dd-4389-91b6-f8ee840083db", |
||||
"6f888d49-2b59-4ba9-a7be-199dceff45ab" |
||||
] |
||||
|
||||
for cookies in cookies_list: |
||||
for tasks in tasks_list: |
||||
url = "https://hub-api.agnthub.ai/api/tasks/start/" + tasks |
||||
|
||||
headers = { |
||||
"Accept": "application/json, text/plain, */*", |
||||
"Accept-Encoding": "gzip, deflate, br, zstd", |
||||
"Accept-Language": "zh-CN,zh;q=0.9", |
||||
"Content-Length": "0", |
||||
"Cookie": cookies, |
||||
"Origin": "https://quests.agnthub.ai", |
||||
"Priority": "u=1, i", |
||||
"Referer": "https://quests.agnthub.ai/", |
||||
"Sec-CH-UA": '"Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"', |
||||
"Sec-CH-UA-Mobile": "?0", |
||||
"Sec-CH-UA-Platform": '"Windows"', |
||||
"Sec-Fetch-Dest": "empty", |
||||
"Sec-Fetch-Mode": "cors", |
||||
"Sec-Fetch-Site": "same-site", |
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36" |
||||
} |
||||
|
||||
for retry in range(1, 4): |
||||
try: |
||||
response = httpx.post(url, headers=headers) |
||||
|
||||
if response.status_code == 201: |
||||
print("请求成功!") |
||||
print(response.json()) |
||||
break |
||||
else: |
||||
print(f"请求失败,状态码:{response.status_code}") |
||||
print(response.text) |
||||
except Exception as e: |
||||
print(f"出现错误:{e}\n重试...") |
||||
|
||||
time.sleep(0.5) |
||||
|
||||
|
||||
if __name__ == '__main__': |
||||
config_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "config.json") |
||||
try: |
||||
with open(config_path, "r", encoding="utf-8") as file: |
||||
config_data = json.load(file) |
||||
except Exception as e: |
||||
print(f"读取配置失败:{e}") |
||||
exit(1) |
||||
|
||||
cookies_list = config_data.get("cookies", []) |
||||
|
||||
A = AgntTask(cookies_list) |
||||
|
||||
A.daily_task() |
||||
A.upload_task() |
||||
|
||||
A.tasks() |
||||
|
After Width: | Height: | Size: 9.2 KiB |
@ -0,0 +1 @@ |
||||
{"version": "1.1.3", "username": "yujieccyj01@hotmail.com", "password": "aaaAAA111!!!", "appid": "67bc1b9b20f45f80e7c94634"} |
||||
File diff suppressed because one or more lines are too long
@ -0,0 +1,285 @@ |
||||
import base64 |
||||
import datetime |
||||
import json |
||||
import logging |
||||
import os.path |
||||
import time |
||||
import requests |
||||
import ddddocr |
||||
|
||||
# 配置日志 |
||||
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') |
||||
|
||||
# 配置文件路径 |
||||
CONFIG_FILE = "config.json" |
||||
|
||||
|
||||
# 初始化配置 |
||||
def init_config(): |
||||
if not os.path.exists(CONFIG_FILE): |
||||
with open(CONFIG_FILE, "w", encoding="utf-8") as f: |
||||
json.dump({}, f) |
||||
|
||||
|
||||
# 读取配置 |
||||
def load_config(): |
||||
with open(CONFIG_FILE, "r", encoding="utf-8") as f: |
||||
return json.load(f) |
||||
|
||||
|
||||
# 保存配置 |
||||
def save_config(config): |
||||
with open(CONFIG_FILE, "w", encoding="utf-8") as f: |
||||
json.dump(config, f, indent=4) |
||||
|
||||
|
||||
# 获取版本号 |
||||
def get_version(config): |
||||
if "version" not in config: |
||||
# 这里可以添加获取版本号的逻辑 |
||||
config["version"] = "1.1.3" |
||||
save_config(config) |
||||
return config["version"] |
||||
|
||||
|
||||
# 获取App ID |
||||
def get_app_id(config): |
||||
if "appid" not in config: |
||||
response = requests.get( |
||||
f"https://www.aeropres.in/chromeapi/dawn/v1/appid/getappid?app_v={get_version(config)}", |
||||
proxies=config.get("proxy"), |
||||
headers={ |
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"}, |
||||
verify=False, |
||||
timeout=15 |
||||
) |
||||
if response.status_code != 200: |
||||
raise Exception("获取appid失败") |
||||
config["appid"] = response.json()["data"]["appid"] |
||||
save_config(config) |
||||
return config["appid"] |
||||
|
||||
|
||||
# 获取Puzzle ID |
||||
def get_puzzle_id(config): |
||||
app_id = get_app_id(config) |
||||
headers = { |
||||
"Accept": "*/*", |
||||
"Accept-Encoding": "gzip, deflate, br, zstd", |
||||
"Accept-Language": "zh-CN,zh;q=0.9", |
||||
"Origin": "chrome-extension://fpdkjdnhkakefebpekbdhillbhonfjjp", |
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36", |
||||
"priority": "u=1, i", |
||||
"sec-ch-ua": '"Not(A:Brand";v="99", "Google Chrome";v="133", "Chromium";v="133"', |
||||
"sec-ch-ua-mobile": "?0", |
||||
"sec-ch-ua-platform": '"Windows"', |
||||
"sec-fetch-dest": "empty", |
||||
"sec-fetch-mode": "cors", |
||||
"sec-fetch-site": "cross-site", |
||||
} |
||||
response = requests.get( |
||||
f"https://www.aeropres.in/chromeapi/dawn/v1/puzzle/get-puzzle?appid={app_id}", |
||||
proxies=config.get("proxy"), |
||||
headers=headers, |
||||
verify=False, |
||||
timeout=15 |
||||
) |
||||
if response.status_code not in [200, 201]: |
||||
raise Exception("获取puzzle_id失败") |
||||
res_json = response.json() |
||||
if not res_json.get('success', False): |
||||
raise Exception("获取puzzle_id结果失败") |
||||
return res_json["puzzle_id"] |
||||
|
||||
|
||||
# 获取Puzzle Code |
||||
def get_puzzle_code(config): |
||||
puzzle_id = get_puzzle_id(config) |
||||
headers = { |
||||
"Accept": "*/*", |
||||
"Accept-Encoding": "gzip, deflate, br, zstd", |
||||
"Accept-Language": "zh-CN,zh;q=0.9", |
||||
"Origin": "chrome-extension://fpdkjdnhkakefebpekbdhillbhonfjjp", |
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36", |
||||
"priority": "u=1, i", |
||||
"sec-ch-ua": '"Not(A:Brand";v="99", "Google Chrome";v="133", "Chromium";v="133"', |
||||
"sec-ch-ua-mobile": "?0", |
||||
"sec-ch-ua-platform": '"Windows"', |
||||
"sec-fetch-dest": "empty", |
||||
"sec-fetch-mode": "cors", |
||||
"sec-fetch-site": "cross-site", |
||||
} |
||||
response = requests.get( |
||||
f"https://www.aeropres.in/chromeapi/dawn/v1/puzzle/get-puzzle-image?puzzle_id={puzzle_id}&appid={get_app_id(config)}", |
||||
proxies=config.get("proxy"), |
||||
headers=headers, |
||||
verify=False, |
||||
timeout=15 |
||||
) |
||||
if response.status_code != 200: |
||||
raise Exception("获取puzzle_url失败") |
||||
res_json = response.json() |
||||
if not res_json.get('success', False): |
||||
raise Exception("获取puzzle_url结果失败") |
||||
imgBase64 = res_json["imgBase64"] |
||||
data = base64.b64decode(imgBase64) |
||||
return get_code_with_img(puzzle_id, img_data=data) |
||||
|
||||
|
||||
# 获取验证码 |
||||
def get_code_with_img(puzzle_id, img_data): |
||||
print(puzzle_id) |
||||
with open(f'{str(int(time.time()))}.jpg', 'wb') as file: |
||||
file.write(img_data) |
||||
return False |
||||
|
||||
|
||||
# 获取Token |
||||
def get_token(config): |
||||
if "token" not in config: |
||||
retry_count = config.get('retry', 3) |
||||
code = "" |
||||
puzzle_id = "" |
||||
while retry_count > 0: |
||||
try: |
||||
puzzle_id = get_puzzle_id(config) |
||||
code = get_puzzle_code(config) |
||||
break |
||||
except Exception as e: |
||||
logging.error(f"获取token失败,{e}") |
||||
retry_count -= 1 |
||||
if not code or not puzzle_id: |
||||
return False |
||||
data = { |
||||
"username": config.get("username", ""), |
||||
"password": config.get("password", ""), |
||||
"logindata": {"_v": {"version": get_version(config)}, |
||||
"datetime": datetime.datetime.now().strftime("%Y-%m-%dT%H:%M:%S.%fZ")[:-3]}, |
||||
"puzzle_id": puzzle_id, |
||||
"ans": code, |
||||
"appid": get_app_id(config), |
||||
} |
||||
headers = { |
||||
"Accept": "*/*", |
||||
"Accept-Encoding": "gzip, deflate, br, zstd", |
||||
"Accept-Language": "zh-CN,zh;q=0.9", |
||||
"Origin": "chrome-extension://fpdkjdnhkakefebpekbdhillbhonfjjp", |
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36", |
||||
"priority": "u=1, i", |
||||
"sec-ch-ua": '"Not(A:Brand";v="99", "Google Chrome";v="133", "Chromium";v="133"', |
||||
"sec-ch-ua-mobile": "?0", |
||||
"sec-ch-ua-platform": '"Windows"', |
||||
"sec-fetch-dest": "empty", |
||||
"sec-fetch-mode": "cors", |
||||
"sec-fetch-site": "cross-site", |
||||
} |
||||
retry_count = config.get('retry', 3) |
||||
while retry_count > 0: |
||||
try: |
||||
response = requests.post( |
||||
f"https://www.aeropres.in/chromeapi/dawn/v1/user/login/v2?appid={get_app_id(config)}", |
||||
json=data, |
||||
proxies=config.get("proxy"), |
||||
verify=False, |
||||
timeout=15, |
||||
headers=headers |
||||
) |
||||
if response.status_code != 200: |
||||
raise Exception("获取token失败") |
||||
res_json = response.json() |
||||
if not res_json.get('success', False): |
||||
raise Exception("获取token结果失败") |
||||
config["token"] = res_json["data"]["token"] |
||||
save_config(config) |
||||
break |
||||
except Exception as e: |
||||
logging.error(f"获取token失败,{e}") |
||||
retry_count -= 1 |
||||
return config.get("token", "") |
||||
|
||||
|
||||
# 获取积分 |
||||
def get_point(config): |
||||
headers = { |
||||
"Authorization": f"Bearer {config.get('token', '')}", |
||||
"Content-Type": "application/json", |
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36", |
||||
"sec-ch-ua": '"Not(A:Brand";v="99", "Google Chrome";v="133", "Chromium";v="133"', |
||||
"sec-ch-ua-mobile": "?0", |
||||
"sec-ch-ua-platform": '"Windows"', |
||||
} |
||||
response = requests.get( |
||||
f"https://www.aeropres.in/api/atom/v1/userreferral/getpoint?appid={get_app_id(config)}", |
||||
headers=headers, |
||||
proxies=config.get("proxy"), |
||||
verify=False, |
||||
timeout=15 |
||||
) |
||||
if response.status_code != 200: |
||||
raise Exception(f"获取积分失败,{response.text}") |
||||
if not response.json().get('success', False): |
||||
raise Exception(f"获取积分失败,{response.json()}") |
||||
|
||||
|
||||
# 保持活跃 |
||||
def keep_alive(config): |
||||
headers = { |
||||
"Authorization": f"Bearer {config.get('token', '')}", |
||||
"Content-Type": "application/json", |
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36", |
||||
} |
||||
data = { |
||||
"username": config.get("username", ""), |
||||
"extensionid": "fpdkjdnhkakefebpekbdhillbhonfjjp", |
||||
"numberoftabs": 0, |
||||
"_v": get_version(config) |
||||
} |
||||
response = requests.post( |
||||
f"https://www.aeropres.in/chromeapi/dawn/v1/userreward/keepalive?appid={get_app_id(config)}", |
||||
json=data, |
||||
headers=headers, |
||||
proxies=config.get("proxy"), |
||||
verify=False, |
||||
timeout=15 |
||||
) |
||||
if response.status_code != 200: |
||||
raise Exception(f"保持活跃失败,{response.text}") |
||||
if not response.json().get('success', False): |
||||
raise Exception(f"保持活跃失败,{response.json()}") |
||||
|
||||
|
||||
# 主函数 |
||||
def main(): |
||||
init_config() |
||||
config = load_config() |
||||
while True: |
||||
token = get_token(config) |
||||
if not token: |
||||
time.sleep(60) |
||||
del config['token'] |
||||
save_config(config) |
||||
continue |
||||
retry_count = 5 |
||||
while retry_count > 0: |
||||
err = False |
||||
try: |
||||
get_point(config) |
||||
except Exception as e: |
||||
logging.error(f"获取积分失败,{e}") |
||||
err = True |
||||
try: |
||||
keep_alive(config) |
||||
except Exception as e: |
||||
logging.error(f"保持活跃失败,{e}") |
||||
err = True |
||||
if not err: |
||||
retry_count = 5 |
||||
else: |
||||
retry_count -= 1 |
||||
if retry_count <= 0: |
||||
break |
||||
time.sleep(5 * 60) |
||||
|
||||
|
||||
if __name__ == '__main__': |
||||
main() |
||||
@ -0,0 +1,7 @@ |
||||
# -*- coding: utf-8 -*- |
||||
import ddddocr |
||||
|
||||
with open('aa.jpg', 'rb') as f: |
||||
img_bytes = f.read() |
||||
res = ddddocr.DdddOcr(show_ad=False).classification(img_bytes) |
||||
print(res) |
||||
@ -0,0 +1,69 @@ |
||||
import httpx |
||||
from bs4 import BeautifulSoup |
||||
|
||||
proxy = "http://127.0.0.1:7890" |
||||
|
||||
|
||||
def get_lottery_info(url): |
||||
headers = { |
||||
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", |
||||
"accept-encoding": "gzip, deflate, br, zstd", |
||||
"accept-language": "zh-CN,zh;q=0.9", |
||||
"cache-control": "max-age=0", |
||||
"cookie": 'wagmi.store={"state":{"connections":{"__type":"Map","value":[]},"chainId":42161,"current":null},"version":2}; _ga=GA1.1.1564597071.1751872255; _ga_F9J18S6WJV=GS2.1.s1751946352$o3$g1$t1751946355$j57$l0$h0; ph_phc_9sSugZ5bXYldHSU4TaDf0jB2RBFxxCLFKQ91N6CqWhL_posthog=%7B%22distinct_id%22%3A%220197e3b9-3085-7350-9fed-4a9ef545e3ab%22%2C%22%24sesid%22%3A%5Bnull%2Cnull%2Cnull%5D%7D', |
||||
"priority": "u=0, i", |
||||
"sec-ch-ua": '"Chromium";v="140", "Not=A?Brand";v="24", "Google Chrome";v="140"', |
||||
"sec-ch-ua-mobile": "?0", |
||||
"sec-ch-ua-platform": '"macOS"', |
||||
"sec-fetch-dest": "document", |
||||
"sec-fetch-mode": "navigate", |
||||
"sec-fetch-site": "same-origin", |
||||
"sec-fetch-user": "?1", |
||||
"upgrade-insecure-requests": "1", |
||||
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36" |
||||
} |
||||
|
||||
with httpx.Client(proxies={"http://": proxy, "https://": proxy}) as client: |
||||
response = client.get(url, headers=headers) |
||||
|
||||
if response.status_code != 200: |
||||
print(f"请求失败,状态码: {response.status_code}") |
||||
return None |
||||
|
||||
html = response.text |
||||
soup = BeautifulSoup(html, "html.parser") |
||||
|
||||
data = {} |
||||
title_script_tags = soup.select("body > div.flex.flex-col.flex-nowrap.min-h-dvh.relative.pb-\[66px\].sm\:pb-0 > main > div.flex-1.max-w-\[100vw\].w-full > section > div > div.flex.justify-between.flex-col.w-full.md\:flex-row.sm\:justify-center > div > div.flex.flex-col.px-0.sm\:mb-5.w-full.sm\:px-0.sm\:py-0.sm\:flex-row.sm\:justify-between.sm\:gap-\[72px\] > div > div.flex.gap-2.mt-4.sm\:mt-5.sm\:gap-4 > div.font-mona.flex-1.flex.items-center.line-clamp-2.text-size-20.sm\:text-size-28.mh-20.font-extrabold") |
||||
description_script_tags = soup.select("#radix-«r2d» > div.flex-1.overflow-y-auto.mt-6.sm\:mt-7 > div > div") |
||||
|
||||
print(description_script_tags) |
||||
|
||||
for description_script_tag in description_script_tags: |
||||
print(description_script_tag.text) |
||||
|
||||
|
||||
|
||||
return data |
||||
|
||||
|
||||
def main(): |
||||
url = "https://app.galxe.com/quest/tiktrix/GCqaRtftKv" |
||||
result = get_lottery_info(url) |
||||
if not result: |
||||
print("获取数据失败") |
||||
return |
||||
|
||||
if len(result) == 0: |
||||
print("获取数据失败") |
||||
return |
||||
|
||||
try: |
||||
for data in result: |
||||
print(data.text) # 打印标签中的文本内容 |
||||
except Exception as e: |
||||
print('数据格式错误: {}'.format(e)) |
||||
|
||||
|
||||
if __name__ == "__main__": |
||||
main() |
||||
@ -0,0 +1,28 @@ |
||||
import time |
||||
from playwright.sync_api import sync_playwright |
||||
|
||||
def extract_content(): |
||||
with sync_playwright() as p: |
||||
# 启动浏览器(无头)模式并设置代理 |
||||
browser = p.chromium.launch(headless=True, proxy={"server": "http://127.0.0.1:7890"}) |
||||
page = browser.new_page() |
||||
|
||||
url = "https://app.galxe.com/quest/tiktrix/GCqaRtftKv" |
||||
page.goto(url) |
||||
|
||||
page.wait_for_load_state() |
||||
|
||||
time.sleep(5) |
||||
|
||||
selector = r'body > div.flex.flex-col.flex-nowrap.min-h-dvh.relative.pb-\[66px\].sm\:pb-0 > main > div.flex-1.max-w-\[100vw\].w-full > section > div > div.flex.justify-between.flex-col.w-full.md\:flex-row.sm\:justify-center > div > div.flex.flex-col.px-0.sm\:mb-5.w-full.sm\:px-0.sm\:py-0.sm\:flex-row.sm\:justify-between.sm\:gap-\[72px\] > div > div.flex.gap-2.mt-4.sm\:mt-5.sm\:gap-4 > div.font-mona.flex-1.flex.items-center.line-clamp-2.text-size-20.sm\:text-size-28.mh-20.font-extrabold' |
||||
content_elements = page.query_selector_all(selector) |
||||
|
||||
if content_elements: |
||||
for element in content_elements: |
||||
print(element.text_content()) |
||||
|
||||
# 关闭浏览器 |
||||
browser.close() |
||||
|
||||
if __name__ == "__main__": |
||||
extract_content() |
||||
@ -0,0 +1,78 @@ |
||||
import os |
||||
from playwright.sync_api import sync_playwright |
||||
from screeninfo import get_monitors |
||||
|
||||
def get_wallet_detail(wallet_address: str, page): |
||||
# 定义输入框和按钮的选择器 |
||||
input_selector = '#root > div > div > div.min-h-screen.overflow-hidden.sm\\:ml-0 > div:nth-child(3) > div > div > div.flex.flex-col.space-y-4 > input' |
||||
button_selector = '#root > div > div > div.min-h-screen.overflow-hidden.sm\\:ml-0 > div:nth-child(3) > div > div > div.flex.flex-col.space-y-4 > button.px-4.py-2.text-white.font-semibold.rounded-md.bg-purple-600.cursor-pointer.hover\\:bg-purple-700' |
||||
|
||||
try: |
||||
# 等待输入框出现并确保其可交互 |
||||
page.wait_for_selector(input_selector, state='visible', timeout=10000) |
||||
# 清除输入框内容(如果有默认值) |
||||
page.fill(input_selector, '') |
||||
# 填入钱包地址 |
||||
page.fill(input_selector, wallet_address) |
||||
|
||||
# 等待按钮出现并尝试点击,捕获异常以忽略找不到按钮的情况 |
||||
page.wait_for_selector(button_selector, state='visible', timeout=10000) |
||||
try: |
||||
page.click(button_selector) |
||||
print(f"已成功点击按钮,查询钱包地址:{wallet_address}") |
||||
except Exception as e: |
||||
print(f"未找到按钮,跳过点击操作。钱包地址:{wallet_address}") |
||||
except Exception as e: |
||||
print(f"查询钱包 {wallet_address} 时出错: {str(e)}") |
||||
|
||||
def main(): |
||||
# 读取钱包地址 |
||||
wallet_list = [] |
||||
wallet_txt_path = os.path.join(os.getcwd(), "wallet.txt") |
||||
with open(wallet_txt_path, "r") as file: |
||||
wallet_list = [line.strip() for line in file] |
||||
|
||||
if len(wallet_list) == 0: |
||||
print("未找到钱包地址,程序退出。") |
||||
return |
||||
|
||||
if len(wallet_list) > 10: |
||||
print("钱包地址数量超过10个,仅处理前10个。") |
||||
wallet_list = wallet_list[:10] |
||||
|
||||
# 获取屏幕大小 |
||||
monitors = get_monitors() |
||||
screen_width = monitors[0].width |
||||
screen_height = monitors[0].height |
||||
|
||||
# 每个窗口的大小 |
||||
window_width = screen_width // 5 |
||||
window_height = screen_height // 2 |
||||
|
||||
with sync_playwright() as p: |
||||
browser = p.chromium.launch(headless=False, args=["--start-maximized"]) |
||||
|
||||
for i, wallet in enumerate(wallet_list): |
||||
# 计算窗口位置 |
||||
row = i // 5 |
||||
col = i % 5 |
||||
x = col * window_width |
||||
y = row * window_height |
||||
|
||||
# 创建新页面并设置窗口位置 |
||||
context = browser.new_context() |
||||
page = context.new_page() |
||||
page.set_viewport_size({'width': window_width, 'height': window_height}) |
||||
page.context.set_window_position(x, y) |
||||
page.goto("https://repute.monadscore.xyz/") |
||||
print(f"已打开浏览器实例,查询钱包地址:{wallet}") |
||||
get_wallet_detail(wallet, page) |
||||
|
||||
print("所有浏览器已打开,可以手动操作。") |
||||
input("按任意键退出程序...") |
||||
|
||||
# 关闭浏览器 |
||||
browser.close() |
||||
|
||||
if __name__ == "__main__": |
||||
main() |
||||
@ -0,0 +1,66 @@ |
||||
import os |
||||
from playwright.sync_api import sync_playwright |
||||
import time |
||||
|
||||
def get_wallet_detail(wallet_address: str, page): |
||||
# 定义输入框和按钮的选择器 |
||||
input_selector = '#root > div > div > div.min-h-screen.overflow-hidden.sm\\:ml-0 > div:nth-child(3) > div > div > div.flex.flex-col.space-y-4 > input' |
||||
button_selector = '#root > div > div > div.min-h-screen.overflow-hidden.sm\\:ml-0 > div:nth-child(3) > div > div > div.flex.flex-col.space-y-4 > button.px-4.py-2.text-white.font-semibold.rounded-md.bg-purple-600.cursor-pointer.hover\\:bg-purple-700' |
||||
|
||||
try: |
||||
# 等待输入框出现并确保其可交互 |
||||
page.wait_for_selector(input_selector, state='visible', timeout=10000) |
||||
# 清除输入框内容(如果有默认值) |
||||
page.fill(input_selector, '') |
||||
# 填入钱包地址 |
||||
page.fill(input_selector, wallet_address) |
||||
|
||||
# 等待按钮出现并尝试点击,捕获异常以忽略找不到按钮的情况 |
||||
page.wait_for_selector(button_selector, state='visible', timeout=10000) |
||||
try: |
||||
page.click(button_selector) |
||||
print(f"已成功点击按钮,查询钱包地址:{wallet_address}") |
||||
except Exception as e: |
||||
print(f"未找到按钮,跳过点击操作。钱包地址:{wallet_address}") |
||||
except Exception as e: |
||||
print(f"查询钱包 {wallet_address} 时出错: {str(e)}") |
||||
|
||||
def run(): |
||||
with sync_playwright() as p: |
||||
browser = p.chromium.launch( |
||||
headless=True, |
||||
args=["--start-maximized"] |
||||
) |
||||
|
||||
wallet_list = [] |
||||
wallet_txt_path = os.path.join(os.getcwd(), "wallet.txt") |
||||
with open(wallet_txt_path, "r") as file: |
||||
wallet_list = [line.strip() for line in file] |
||||
|
||||
if len(wallet_list) == 0: |
||||
print("未找到钱包地址") |
||||
return |
||||
|
||||
context = browser.new_context(no_viewport=True) |
||||
|
||||
for i, wallet in enumerate(wallet_list, 1): |
||||
page = context.new_page() |
||||
page.goto("https://repute.monadscore.xyz/") |
||||
print(f"已打开第 {i} 个标签页") |
||||
time.sleep(1) |
||||
print(f'正在查询钱包 {i} : {wallet}') |
||||
get_wallet_detail(wallet, page) |
||||
|
||||
time.sleep(3600) |
||||
|
||||
context.close() |
||||
browser.close() |
||||
|
||||
|
||||
def main(): |
||||
while True: |
||||
run() |
||||
time.sleep(5) |
||||
|
||||
if __name__ == "__main__": |
||||
main() |
||||
@ -0,0 +1,10 @@ |
||||
0xe50B77Cd771243b8Ae1d6ce33b4E13ECC5Fa28a6 |
||||
0x9ea2ECAD4090E32916e03b77d7C75CbF6C8E0A55 |
||||
0xE8A4b0C04300154DC9B1D0e565Ba70F996614690 |
||||
0x1b623c5d70c93b437d93c305bf2cfa389095f636 |
||||
0x06D25c3e0E1F753ac0486a3f8aaD7259149656cB |
||||
0x15cFEE34Ca4541CAc9a1c4B6F6aB47A65877E240 |
||||
0x7aBF0dA8Ac07B6dE7206e467988455E1AD0b60B5 |
||||
0xF736f45d4663a8D8DfF7EFA55b1Cf6Fe38D026c8 |
||||
0x83173eECf3a6d9ABB79682568e16c2eAd361620e |
||||
0xa401b85B4849Fc7610Bd180cc937859C78528F47 |
||||
@ -0,0 +1,66 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# 检查所有代理延时 |
||||
|
||||
import asyncio |
||||
import aiohttp |
||||
|
||||
nodes_select = 0 |
||||
ip = "192.168.31.201" |
||||
nodes = [ |
||||
['58001', '58002', '58003', '58004', '58005', '58006', '58007', '58008', '58009', '58010'], |
||||
['32001', '32002', '32003', '32004', '32005', '32006', '32007', '32008', '32009', '32010', '32011', '32012'] |
||||
] |
||||
node = nodes[nodes_select] |
||||
|
||||
|
||||
async def check(url, session): |
||||
for retry in range(3): |
||||
try: |
||||
async with session.get(url) as response: |
||||
if response.status == 200: |
||||
print(f"Success: {url}") |
||||
return True |
||||
else: |
||||
print(f"Failed: {url} (Status: {response.status})") |
||||
except Exception as e: |
||||
print(f"Error: {url} - {str(e)}") |
||||
return False |
||||
|
||||
|
||||
async def prepare_check(node_url, ports, proxy_name_list): |
||||
async with aiohttp.ClientSession() as session: |
||||
tasks = [] |
||||
for port in ports: |
||||
proxy_url = f"{node_url}:{port}" |
||||
for proxy in proxy_name_list: |
||||
url = f"{proxy_url}/api/proxies/{proxy}/delay?timeout=5000&url=http:%2F%2Fwww.gstatic.com%2Fgenerate_204" |
||||
tasks.append(check(url, session)) |
||||
await asyncio.gather(*tasks) |
||||
|
||||
|
||||
async def load_nodes_details(): |
||||
tasks = [] |
||||
async with aiohttp.ClientSession() as session: |
||||
for port in node: |
||||
clash_tool_url = f"{ip}:{port}" |
||||
url = f"{clash_tool_url}/api/proxies" |
||||
try: |
||||
async with session.get(url) as response: |
||||
if response.status == 200: |
||||
proxies = await response.json() |
||||
proxy_name_list = list(proxies['proxies'].keys()) |
||||
tasks.append(prepare_check(ip, port, proxy_name_list)) |
||||
else: |
||||
print(f"Failed to load proxies from {url} (Status: {response.status})") |
||||
except Exception as e: |
||||
print(f"Error: {url} - {str(e)}") |
||||
await asyncio.gather(*tasks) |
||||
|
||||
|
||||
async def main(): |
||||
await load_nodes_details() |
||||
|
||||
|
||||
if __name__ == "__main__": |
||||
asyncio.run(main()) |
||||
print("All done!") |
||||
@ -0,0 +1,96 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# 获取当前使用代理, 并检查延时 |
||||
from urllib.parse import quote |
||||
import subprocess |
||||
import httpx |
||||
|
||||
nodes = [ |
||||
["192.168.31.201", ['58001', '58002', '58003', '58004', '58005', '58006', '58007', '58008', '58009', |
||||
'58010'], ], |
||||
["192.168.31.201", ['32001', '32002', '32003', '32004', '32005', '32006', '32007', '32008', '32009', |
||||
'32010', '32011', '32012']], |
||||
["127.0.0.1", ['17888']] |
||||
] |
||||
|
||||
selected_nodes = nodes[0] |
||||
|
||||
|
||||
def check_proxy(proxy_url, choose_proxy): |
||||
encode_proxy_name = quote(choose_proxy, safe="") |
||||
command = [ |
||||
"curl", |
||||
"-X", "GET", |
||||
f"{proxy_url}/api/proxies/{encode_proxy_name}/delay?timeout=5000&url=http:%2F%2Fwww.gstatic.com%2Fgenerate_204" |
||||
] |
||||
|
||||
try: |
||||
result = subprocess.run(command, capture_output=True, text=True, check=True) |
||||
# print("Output:", result.stdout) |
||||
if 'Timeout' in result.stdout: |
||||
return "Timeout" |
||||
res = eval(result.stdout).get("meanDelay") |
||||
return f"meanDelay: {res}" |
||||
except subprocess.CalledProcessError as e: |
||||
print("Error:", e.stderr) |
||||
return str(e) |
||||
|
||||
|
||||
def check_now_proxy(client: httpx.Client, ip, port): |
||||
url_and_port = f"{ip}:{port}" |
||||
url = f"http://{ip}:{port}/api/proxies" |
||||
headers = { |
||||
"Accept": "application/json, text/plain, */*", |
||||
"Accept-Encoding": "gzip, deflate, br, zstd", |
||||
"Accept-Language": "zh-CN,zh;q=0.8", |
||||
"Connection": "keep-alive", |
||||
"Host": url_and_port, |
||||
"Referer": f"http://{url_and_port}/", |
||||
"Sec-CH-UA": '"Chromium";v="134", "Not:A-Brand";v="24", "Brave";v="134"', |
||||
"Sec-CH-UA-Mobile": "?0", |
||||
"Sec-CH-UA-Platform": '"macOS"', |
||||
"Sec-Fetch-Dest": "empty", |
||||
"Sec-Fetch-Mode": "cors", |
||||
"Sec-Fetch-Site": "same-origin", |
||||
"Sec-GPC": "1", |
||||
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36" |
||||
} |
||||
|
||||
try: |
||||
response = client.get(url, headers=headers) |
||||
json_data = response.json() |
||||
if not json_data or response.status_code != 200: |
||||
print("JSON data is empty or request failed") |
||||
return |
||||
|
||||
proxies = json_data.get("proxies") |
||||
proxy_global = proxies.get("GLOBAL") |
||||
now_proxy = proxy_global.get("now") |
||||
|
||||
check_result = check_proxy(url_and_port, now_proxy) |
||||
|
||||
message = f"{url_and_port} --- {now_proxy} --- {check_result}" |
||||
print(message) |
||||
return now_proxy |
||||
|
||||
except httpx.RequestError as e: |
||||
print(f"Request failed: {e}") |
||||
return None |
||||
|
||||
|
||||
def main(): |
||||
ip = selected_nodes[0] |
||||
now_proxy_list = [] |
||||
with httpx.Client() as client: |
||||
for port in selected_nodes[1]: |
||||
now_proxy = check_now_proxy(client, ip, port) |
||||
if now_proxy: |
||||
now_proxy_list.append(now_proxy) |
||||
|
||||
# 查看当前代理节点有没有使用重复 |
||||
if len(now_proxy_list) != len(set(now_proxy_list)): |
||||
print("当前代理节点有使用重复") |
||||
return |
||||
|
||||
|
||||
if __name__ == "__main__": |
||||
main() |
||||
@ -0,0 +1,703 @@ |
||||
allow-lan: true |
||||
bind-address: '*' |
||||
dns: |
||||
enable: false |
||||
fallback: [] |
||||
ipv6: false |
||||
nameserver: [] |
||||
external-controller: 0.0.0.0:9090 |
||||
log-level: info |
||||
mixed-port: 7890 |
||||
mode: rule |
||||
proxies: |
||||
- alterId: 0 |
||||
cipher: auto |
||||
name: JP-Detour 01 AEAD |
||||
port: 15601 |
||||
server: jp-01.grabgo.pro |
||||
type: vmess |
||||
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6 |
||||
ws-path: / |
||||
- alterId: 0 |
||||
cipher: auto |
||||
name: JP-Detour 02 AEAD |
||||
port: 15602 |
||||
server: jp-02.grabgo.pro |
||||
type: vmess |
||||
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6 |
||||
ws-path: / |
||||
- alterId: 0 |
||||
cipher: auto |
||||
name: JP-Detour 03 AEAD |
||||
port: 15603 |
||||
server: jp-03.grabgo.pro |
||||
type: vmess |
||||
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6 |
||||
ws-path: / |
||||
- alterId: 0 |
||||
cipher: auto |
||||
name: JP-Detour 04 AEAD |
||||
port: 15604 |
||||
server: jp-04.grabgo.pro |
||||
type: vmess |
||||
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6 |
||||
ws-path: / |
||||
- alterId: 0 |
||||
cipher: auto |
||||
name: JP-Detour 05 AEAD |
||||
port: 15605 |
||||
server: jp-05.grabgo.pro |
||||
type: vmess |
||||
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6 |
||||
ws-path: / |
||||
- alterId: 0 |
||||
cipher: auto |
||||
name: JP-Detour 06 AEAD |
||||
port: 15606 |
||||
server: jp-06.grabgo.pro |
||||
type: vmess |
||||
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6 |
||||
ws-path: / |
||||
- alterId: 0 |
||||
cipher: auto |
||||
name: SG-Detour 01 AEAD |
||||
port: 15301 |
||||
server: sg-detour-01.grabgo.pro |
||||
type: vmess |
||||
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6 |
||||
ws-path: / |
||||
- alterId: 0 |
||||
cipher: auto |
||||
name: SG-Detour 02 AEAD |
||||
port: 15302 |
||||
server: sg-detour-02.grabgo.pro |
||||
type: vmess |
||||
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6 |
||||
ws-path: / |
||||
- alterId: 0 |
||||
cipher: auto |
||||
name: SG-Detour 03 AEAD |
||||
port: 15303 |
||||
server: sg-detour-03.grabgo.pro |
||||
type: vmess |
||||
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6 |
||||
ws-path: / |
||||
- alterId: 0 |
||||
cipher: auto |
||||
name: TW-Detour 01 AEAD |
||||
port: 15201 |
||||
server: tw-detour-01.grabgo.pro |
||||
type: vmess |
||||
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6 |
||||
ws-path: / |
||||
- alterId: 0 |
||||
cipher: auto |
||||
name: TW-Detour 02 AEAD |
||||
port: 15202 |
||||
server: tw-detour-02.grabgo.pro |
||||
type: vmess |
||||
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6 |
||||
ws-path: / |
||||
- alterId: 0 |
||||
cipher: auto |
||||
name: TW-Detour 03 AEAD |
||||
port: 15203 |
||||
server: tw-detour-03.grabgo.pro |
||||
type: vmess |
||||
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6 |
||||
ws-path: / |
||||
- alterId: 0 |
||||
cipher: auto |
||||
name: TW-Detour 05 AEAD |
||||
port: 15205 |
||||
server: tw-detour-05.grabgo.pro |
||||
type: vmess |
||||
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6 |
||||
ws-path: / |
||||
- alterId: 0 |
||||
cipher: auto |
||||
name: TW-Detour 06 AEAD |
||||
port: 15206 |
||||
server: tw-detour-06.grabgo.pro |
||||
type: vmess |
||||
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6 |
||||
ws-path: / |
||||
- alterId: 0 |
||||
cipher: auto |
||||
name: TW-Detour 08 AEAD |
||||
port: 15208 |
||||
server: tw-detour-08.grabgo.pro |
||||
type: vmess |
||||
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6 |
||||
ws-path: / |
||||
- alterId: 0 |
||||
cipher: auto |
||||
name: TW-Detour 09 AEAD |
||||
port: 15209 |
||||
server: tw-detour-09.grabgo.pro |
||||
type: vmess |
||||
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6 |
||||
ws-path: / |
||||
- alterId: 0 |
||||
cipher: auto |
||||
name: TW-Detour 10 AEAD |
||||
port: 15210 |
||||
server: tw-detour-10.grabgo.pro |
||||
type: vmess |
||||
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6 |
||||
ws-path: / |
||||
- alterId: 0 |
||||
cipher: auto |
||||
name: TW-Detour 12 AEAD |
||||
port: 15212 |
||||
server: tw-detour-12.grabgo.pro |
||||
type: vmess |
||||
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6 |
||||
ws-path: / |
||||
- alterId: 0 |
||||
cipher: auto |
||||
name: TW-Detour 13 AEAD |
||||
port: 15213 |
||||
server: tw-detour-13.grabgo.pro |
||||
type: vmess |
||||
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6 |
||||
ws-path: / |
||||
- alterId: 0 |
||||
cipher: auto |
||||
name: TW-Detour 15 AEAD |
||||
port: 15215 |
||||
server: tw-detour-15.grabgo.pro |
||||
type: vmess |
||||
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6 |
||||
ws-path: / |
||||
- alterId: 0 |
||||
cipher: auto |
||||
name: TW-Detour 16 AEAD |
||||
port: 15216 |
||||
server: tw-detour-16.grabgo.pro |
||||
type: vmess |
||||
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6 |
||||
ws-path: / |
||||
- alterId: 0 |
||||
cipher: auto |
||||
name: TW-Detour 18 AEAD |
||||
port: 15218 |
||||
server: tw-detour-18.grabgo.pro |
||||
type: vmess |
||||
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6 |
||||
ws-path: / |
||||
- alterId: 0 |
||||
cipher: auto |
||||
name: TW-Detour 19 AEAD |
||||
port: 15219 |
||||
server: tw-detour-19.grabgo.pro |
||||
type: vmess |
||||
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6 |
||||
ws-path: / |
||||
- alterId: 0 |
||||
cipher: auto |
||||
name: TW-Detour 20 AEAD |
||||
port: 15220 |
||||
server: tw-detour-20.grabgo.pro |
||||
type: vmess |
||||
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6 |
||||
ws-path: / |
||||
- alterId: 0 |
||||
cipher: auto |
||||
name: TW-Detour 22 AEAD |
||||
port: 15222 |
||||
server: tw-detour-22.grabgo.pro |
||||
type: vmess |
||||
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6 |
||||
ws-path: / |
||||
- alterId: 0 |
||||
cipher: auto |
||||
name: TW-Detour 23 AEAD |
||||
port: 15223 |
||||
server: tw-detour-23.grabgo.pro |
||||
type: vmess |
||||
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6 |
||||
ws-path: / |
||||
- alpn: |
||||
- h2 |
||||
- http/1.1 |
||||
name: 台湾-TW-1-流量倍率:1.0 |
||||
password: BWWGW01PcxMn5Xa6SW |
||||
port: 443 |
||||
server: tw-1.chianginc.com |
||||
skip-cert-verify: true |
||||
sni: tw-1.chianginc.com |
||||
type: trojan |
||||
- alpn: |
||||
- h2 |
||||
- http/1.1 |
||||
name: 台湾-TW-2-流量倍率:1.0 |
||||
password: BWWGW01PcxMn5Xa6SW |
||||
port: 443 |
||||
server: tw-2.chianginc.com |
||||
skip-cert-verify: true |
||||
sni: tw-2.chianginc.com |
||||
type: trojan |
||||
- alpn: |
||||
- h2 |
||||
- http/1.1 |
||||
name: 新加坡-SG-1-流量倍率:1.0 |
||||
password: BWWGW01PcxMn5Xa6SW |
||||
port: 443 |
||||
server: sg-1.victoriamitrepeak.com |
||||
skip-cert-verify: true |
||||
sni: sg-1.victoriamitrepeak.com |
||||
type: trojan |
||||
- alpn: |
||||
- h2 |
||||
- http/1.1 |
||||
name: 新加坡-SG-2-流量倍率:1.0 |
||||
password: BWWGW01PcxMn5Xa6SW |
||||
port: 443 |
||||
server: sg-2.victoriamitrepeak.com |
||||
skip-cert-verify: true |
||||
sni: sg-2.victoriamitrepeak.com |
||||
type: trojan |
||||
- alpn: |
||||
- h2 |
||||
- http/1.1 |
||||
name: 日本-FW-JP-TEST1-流量倍率:1.0 |
||||
password: BWWGW01PcxMn5Xa6SW |
||||
port: 5011 |
||||
server: fw-jp-test1.trojanwheel.com |
||||
skip-cert-verify: true |
||||
sni: fw-jp-test1.trojanwheel.com |
||||
type: trojan |
||||
- alpn: |
||||
- h2 |
||||
- http/1.1 |
||||
name: 日本-FW-JP-TEST2-流量倍率:1.0 |
||||
password: BWWGW01PcxMn5Xa6SW |
||||
port: 5012 |
||||
server: fw-jp-test2.trojanwheel.com |
||||
skip-cert-verify: true |
||||
sni: fw-jp-test2.trojanwheel.com |
||||
type: trojan |
||||
- alpn: |
||||
- h2 |
||||
- http/1.1 |
||||
name: 日本-FW-JP1-流量倍率:1.0 |
||||
password: BWWGW01PcxMn5Xa6SW |
||||
port: 5011 |
||||
server: fw-jp1.rise-fuji.com |
||||
skip-cert-verify: true |
||||
sni: fw-jp1.rise-fuji.com |
||||
type: trojan |
||||
- alpn: |
||||
- h2 |
||||
- http/1.1 |
||||
name: 日本-FW-JP2-流量倍率:1.0 |
||||
password: BWWGW01PcxMn5Xa6SW |
||||
port: 5012 |
||||
server: fw-jp2.rise-fuji.com |
||||
skip-cert-verify: true |
||||
sni: fw-jp2.rise-fuji.com |
||||
type: trojan |
||||
- alpn: |
||||
- h2 |
||||
- http/1.1 |
||||
name: 日本-OS-1-流量倍率:1.0 |
||||
password: BWWGW01PcxMn5Xa6SW |
||||
port: 443 |
||||
server: os-1.rise-fuji.com |
||||
skip-cert-verify: true |
||||
sni: os-1.rise-fuji.com |
||||
type: trojan |
||||
- alpn: |
||||
- h2 |
||||
- http/1.1 |
||||
name: 日本-OS-2-流量倍率:1.0 |
||||
password: BWWGW01PcxMn5Xa6SW |
||||
port: 443 |
||||
server: os-2.rise-fuji.com |
||||
skip-cert-verify: true |
||||
sni: os-2.rise-fuji.com |
||||
type: trojan |
||||
- alpn: |
||||
- h2 |
||||
- http/1.1 |
||||
name: 日本-OS-3-流量倍率:1.0 |
||||
password: BWWGW01PcxMn5Xa6SW |
||||
port: 443 |
||||
server: os-3.rise-fuji.com |
||||
skip-cert-verify: true |
||||
sni: os-3.rise-fuji.com |
||||
type: trojan |
||||
- alpn: |
||||
- h2 |
||||
- http/1.1 |
||||
name: 日本-TY-1-流量倍率:1.0 |
||||
password: BWWGW01PcxMn5Xa6SW |
||||
port: 443 |
||||
server: ty-1.rise-fuji.com |
||||
skip-cert-verify: true |
||||
sni: ty-1.rise-fuji.com |
||||
type: trojan |
||||
- alpn: |
||||
- h2 |
||||
- http/1.1 |
||||
name: 日本-TY-2-流量倍率:1.0 |
||||
password: BWWGW01PcxMn5Xa6SW |
||||
port: 443 |
||||
server: ty-2.rise-fuji.com |
||||
skip-cert-verify: true |
||||
sni: ty-2.rise-fuji.com |
||||
type: trojan |
||||
- alpn: |
||||
- h2 |
||||
- http/1.1 |
||||
name: 日本-TY-3-流量倍率:1.0 |
||||
password: BWWGW01PcxMn5Xa6SW |
||||
port: 443 |
||||
server: ty-3.rise-fuji.com |
||||
skip-cert-verify: true |
||||
sni: ty-3.rise-fuji.com |
||||
type: trojan |
||||
- alpn: |
||||
- h2 |
||||
- http/1.1 |
||||
name: 日本-TY-4-流量倍率:1.0 |
||||
password: BWWGW01PcxMn5Xa6SW |
||||
port: 443 |
||||
server: ty-4.rise-fuji.com |
||||
skip-cert-verify: true |
||||
sni: ty-4.rise-fuji.com |
||||
type: trojan |
||||
- alpn: |
||||
- h2 |
||||
- http/1.1 |
||||
name: 澳大利亚-AU-1-流量倍率:0.5 |
||||
password: BWWGW01PcxMn5Xa6SW |
||||
port: 443 |
||||
server: au-1.australiastudio.com |
||||
skip-cert-verify: true |
||||
sni: au-1.australiastudio.com |
||||
type: trojan |
||||
- alpn: |
||||
- h2 |
||||
- http/1.1 |
||||
name: 澳大利亚-AU-2-流量倍率:1.0 |
||||
password: BWWGW01PcxMn5Xa6SW |
||||
port: 443 |
||||
server: au-2.australiastudio.com |
||||
skip-cert-verify: true |
||||
sni: au-2.australiastudio.com |
||||
type: trojan |
||||
- alpn: |
||||
- h2 |
||||
- http/1.1 |
||||
name: 澳大利亚-AU-3-流量倍率:1.0 |
||||
password: BWWGW01PcxMn5Xa6SW |
||||
port: 443 |
||||
server: au-3.australiastudio.com |
||||
skip-cert-verify: true |
||||
sni: au-3.australiastudio.com |
||||
type: trojan |
||||
- alpn: |
||||
- h2 |
||||
- http/1.1 |
||||
name: 澳大利亚-AU-4-流量倍率:1.0 |
||||
password: BWWGW01PcxMn5Xa6SW |
||||
port: 443 |
||||
server: au-4.australiastudio.com |
||||
skip-cert-verify: true |
||||
sni: au-4.australiastudio.com |
||||
type: trojan |
||||
- name: 🇦🇺 澳大利亚 01 |
||||
password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4 |
||||
port: 12068 |
||||
server: cn2.cdn.xfltd-cdn.top |
||||
skip-cert-verify: true |
||||
sni: cdn.alibaba.com |
||||
type: trojan |
||||
udp: true |
||||
- name: 🇦🇺 澳大利亚-广东专线 GCore |
||||
password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845 |
||||
port: 32023 |
||||
server: lbso.bnnodeservice.com |
||||
skip-cert-verify: true |
||||
sni: cert.bitbyte.one |
||||
type: trojan |
||||
udp: true |
||||
- name: 🇦🇺 澳大利亚-广东专线 VUAU |
||||
password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845 |
||||
port: 32012 |
||||
server: lbso.bnnodeservice.com |
||||
skip-cert-verify: true |
||||
sni: cert.bitbyte.one |
||||
type: trojan |
||||
udp: true |
||||
- name: 🇨🇳 台湾 01 |
||||
password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4 |
||||
port: 12011 |
||||
server: cn1.cdn.xfltd-cdn.top |
||||
skip-cert-verify: true |
||||
sni: cdn.alibaba.com |
||||
type: trojan |
||||
udp: true |
||||
- name: 🇨🇳 台湾 02 |
||||
password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4 |
||||
port: 12012 |
||||
server: cn1.cdn.xfltd-cdn.top |
||||
skip-cert-verify: true |
||||
sni: cdn.alibaba.com |
||||
type: trojan |
||||
udp: true |
||||
- name: 🇯🇵 日本 01 |
||||
password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4 |
||||
port: 12031 |
||||
server: cn2.cdn.xfltd-cdn.top |
||||
skip-cert-verify: true |
||||
sni: cdn.alibaba.com |
||||
type: trojan |
||||
udp: true |
||||
- name: 🇯🇵 日本 02 |
||||
password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4 |
||||
port: 12032 |
||||
server: cn2.cdn.xfltd-cdn.top |
||||
skip-cert-verify: true |
||||
sni: cdn.alibaba.com |
||||
type: trojan |
||||
udp: true |
||||
- name: 🇯🇵 日本 03 |
||||
password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4 |
||||
port: 12033 |
||||
server: cn2.cdn.xfltd-cdn.top |
||||
skip-cert-verify: true |
||||
sni: cdn.alibaba.com |
||||
type: trojan |
||||
udp: true |
||||
- name: 🇯🇵 日本 04 |
||||
password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4 |
||||
port: 12034 |
||||
server: cn2.cdn.xfltd-cdn.top |
||||
skip-cert-verify: true |
||||
sni: cdn.alibaba.com |
||||
type: trojan |
||||
udp: true |
||||
- name: 🇯🇵 日本 05 |
||||
password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4 |
||||
port: 12035 |
||||
server: cn2.cdn.xfltd-cdn.top |
||||
skip-cert-verify: true |
||||
sni: cdn.alibaba.com |
||||
type: trojan |
||||
udp: true |
||||
- name: 🇯🇵 日本-广东专线 Akari |
||||
password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845 |
||||
port: 32036 |
||||
server: lbso.bnnodeservice.com |
||||
skip-cert-verify: true |
||||
sni: cert.bitbyte.one |
||||
type: trojan |
||||
udp: true |
||||
- name: 🇯🇵 日本-广东专线 BGP |
||||
password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845 |
||||
port: 32004 |
||||
server: lbso.bnnodeservice.com |
||||
skip-cert-verify: true |
||||
sni: cert.bitbyte.one |
||||
type: trojan |
||||
udp: true |
||||
- name: 🇯🇵 日本-广东专线 GCore |
||||
password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845 |
||||
port: 32022 |
||||
server: lbso.bnnodeservice.com |
||||
skip-cert-verify: true |
||||
sni: cert.bitbyte.one |
||||
type: trojan |
||||
udp: true |
||||
- name: 🇰🇷 韩国 01 |
||||
password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4 |
||||
port: 12041 |
||||
server: cn2.cdn.xfltd-cdn.top |
||||
skip-cert-verify: true |
||||
sni: cdn.alibaba.com |
||||
type: trojan |
||||
udp: true |
||||
- name: 🇰🇷 韩国-广东专线 VUKR |
||||
password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845 |
||||
port: 32005 |
||||
server: lbso.bnnodeservice.com |
||||
skip-cert-verify: true |
||||
sni: cert.bitbyte.one |
||||
type: trojan |
||||
udp: true |
||||
- name: 🇲🇾 马来西亚 01 |
||||
password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4 |
||||
port: 12067 |
||||
server: cn2.cdn.xfltd-cdn.top |
||||
skip-cert-verify: true |
||||
sni: cdn.alibaba.com |
||||
type: trojan |
||||
udp: true |
||||
- name: 🇲🇾 马来西亚-广东专线 Shin |
||||
password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845 |
||||
port: 32038 |
||||
server: lbso.bnnodeservice.com |
||||
skip-cert-verify: true |
||||
sni: cert.bitbyte.one |
||||
type: trojan |
||||
udp: true |
||||
- name: 🇵🇭 菲律宾-广东专线 Comfac |
||||
password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845 |
||||
port: 32030 |
||||
server: lbso.bnnodeservice.com |
||||
skip-cert-verify: true |
||||
sni: cert.bitbyte.one |
||||
type: trojan |
||||
udp: true |
||||
- name: 🇵🇭 菲律宾-广东专线 Zenlayer |
||||
password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845 |
||||
port: 32013 |
||||
server: lbso.bnnodeservice.com |
||||
skip-cert-verify: true |
||||
sni: cert.bitbyte.one |
||||
type: trojan |
||||
udp: true |
||||
- name: 🇸🇬 新加坡 01 |
||||
password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4 |
||||
port: 12021 |
||||
server: cn2.cdn.xfltd-cdn.top |
||||
skip-cert-verify: true |
||||
sni: cdn.alibaba.com |
||||
type: trojan |
||||
udp: true |
||||
- name: 🇸🇬 新加坡 02 |
||||
password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4 |
||||
port: 12022 |
||||
server: cn2.cdn.xfltd-cdn.top |
||||
skip-cert-verify: true |
||||
sni: cdn.alibaba.com |
||||
type: trojan |
||||
udp: true |
||||
- name: 🇸🇬 新加坡 03 |
||||
password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4 |
||||
port: 12023 |
||||
server: cn2.cdn.xfltd-cdn.top |
||||
skip-cert-verify: true |
||||
sni: cdn.alibaba.com |
||||
type: trojan |
||||
udp: true |
||||
- name: 🇸🇬 新加坡 04 |
||||
password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4 |
||||
port: 12024 |
||||
server: cn2.cdn.xfltd-cdn.top |
||||
skip-cert-verify: true |
||||
sni: cdn.alibaba.com |
||||
type: trojan |
||||
udp: true |
||||
- name: 🇸🇬 新加坡 05 |
||||
password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4 |
||||
port: 12025 |
||||
server: cn2.cdn.xfltd-cdn.top |
||||
skip-cert-verify: true |
||||
sni: cdn.alibaba.com |
||||
type: trojan |
||||
udp: true |
||||
- name: 🇸🇬 新加坡-广东专线 BGP |
||||
password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845 |
||||
port: 32007 |
||||
server: lbso.bnnodeservice.com |
||||
skip-cert-verify: true |
||||
sni: cert.bitbyte.one |
||||
type: trojan |
||||
udp: true |
||||
- name: 🇹🇼 台湾-广东专线 NeaRoute |
||||
password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845 |
||||
port: 32003 |
||||
server: lbso.bnnodeservice.com |
||||
skip-cert-verify: true |
||||
sni: cert.bitbyte.one |
||||
type: trojan |
||||
udp: true |
||||
- name: 🇹🇼 台湾-广东专线 STUIX |
||||
password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845 |
||||
port: 32040 |
||||
server: lbso.bnnodeservice.com |
||||
skip-cert-verify: true |
||||
sni: cert.bitbyte.one |
||||
type: trojan |
||||
udp: true |
||||
proxy-groups: |
||||
- name: GLOBAL |
||||
proxies: |
||||
- JP-Detour 01 AEAD |
||||
- JP-Detour 02 AEAD |
||||
- JP-Detour 03 AEAD |
||||
- JP-Detour 04 AEAD |
||||
- JP-Detour 05 AEAD |
||||
- JP-Detour 06 AEAD |
||||
- SG-Detour 01 AEAD |
||||
- SG-Detour 02 AEAD |
||||
- SG-Detour 03 AEAD |
||||
- TW-Detour 01 AEAD |
||||
- TW-Detour 02 AEAD |
||||
- TW-Detour 03 AEAD |
||||
- TW-Detour 05 AEAD |
||||
- TW-Detour 06 AEAD |
||||
- TW-Detour 08 AEAD |
||||
- TW-Detour 09 AEAD |
||||
- TW-Detour 10 AEAD |
||||
- TW-Detour 12 AEAD |
||||
- TW-Detour 13 AEAD |
||||
- TW-Detour 15 AEAD |
||||
- TW-Detour 16 AEAD |
||||
- TW-Detour 18 AEAD |
||||
- TW-Detour 19 AEAD |
||||
- TW-Detour 20 AEAD |
||||
- TW-Detour 22 AEAD |
||||
- TW-Detour 23 AEAD |
||||
- 台湾-TW-1-流量倍率:1.0 |
||||
- 台湾-TW-2-流量倍率:1.0 |
||||
- 新加坡-SG-1-流量倍率:1.0 |
||||
- 新加坡-SG-2-流量倍率:1.0 |
||||
- 日本-FW-JP-TEST1-流量倍率:1.0 |
||||
- 日本-FW-JP-TEST2-流量倍率:1.0 |
||||
- 日本-FW-JP1-流量倍率:1.0 |
||||
- 日本-FW-JP2-流量倍率:1.0 |
||||
- 日本-OS-1-流量倍率:1.0 |
||||
- 日本-OS-2-流量倍率:1.0 |
||||
- 日本-OS-3-流量倍率:1.0 |
||||
- 日本-TY-1-流量倍率:1.0 |
||||
- 日本-TY-2-流量倍率:1.0 |
||||
- 日本-TY-3-流量倍率:1.0 |
||||
- 日本-TY-4-流量倍率:1.0 |
||||
- 澳大利亚-AU-1-流量倍率:0.5 |
||||
- 澳大利亚-AU-2-流量倍率:1.0 |
||||
- 澳大利亚-AU-3-流量倍率:1.0 |
||||
- 澳大利亚-AU-4-流量倍率:1.0 |
||||
- 🇦🇺 澳大利亚 01 |
||||
- 🇦🇺 澳大利亚-广东专线 GCore |
||||
- 🇦🇺 澳大利亚-广东专线 VUAU |
||||
- 🇨🇳 台湾 01 |
||||
- 🇨🇳 台湾 02 |
||||
- 🇯🇵 日本 01 |
||||
- 🇯🇵 日本 02 |
||||
- 🇯🇵 日本 03 |
||||
- 🇯🇵 日本 04 |
||||
- 🇯🇵 日本 05 |
||||
- 🇯🇵 日本-广东专线 Akari |
||||
- 🇯🇵 日本-广东专线 BGP |
||||
- 🇯🇵 日本-广东专线 GCore |
||||
- 🇰🇷 韩国 01 |
||||
- 🇰🇷 韩国-广东专线 VUKR |
||||
- 🇲🇾 马来西亚 01 |
||||
- 🇲🇾 马来西亚-广东专线 Shin |
||||
- 🇵🇭 菲律宾-广东专线 Comfac |
||||
- 🇵🇭 菲律宾-广东专线 Zenlayer |
||||
- 🇸🇬 新加坡 01 |
||||
- 🇸🇬 新加坡 02 |
||||
- 🇸🇬 新加坡 03 |
||||
- 🇸🇬 新加坡 04 |
||||
- 🇸🇬 新加坡 05 |
||||
- 🇸🇬 新加坡-广东专线 BGP |
||||
- 🇹🇼 台湾-广东专线 NeaRoute |
||||
- 🇹🇼 台湾-广东专线 STUIX |
||||
type: select |
||||
secret: '' |
||||
@ -0,0 +1,66 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# 生成代理节点, 并过滤, 传入 merge.yaml 生成 config.yaml |
||||
|
||||
import yaml |
||||
|
||||
file_name = 'merge.yaml' |
||||
|
||||
need_nodes = ['日本', 'JP', '新加坡', 'SG', '台湾', 'TW', '韩国', '澳门', '马来西亚', '澳大利亚', '菲律宾'] |
||||
|
||||
config_file = { |
||||
"mixed-port": 7890, |
||||
"allow-lan": True, |
||||
"bind-address": "*", |
||||
"mode": "rule", |
||||
"log-level": "info", |
||||
"external-controller": "0.0.0.0:9090", |
||||
"secret": "", |
||||
"dns": { |
||||
"enable": False, |
||||
"ipv6": False, |
||||
"nameserver": [], |
||||
"fallback": [] |
||||
}, |
||||
"proxies": [], |
||||
"proxy-groups": [{"name": "GLOBAL", "type": "select", "proxies": []}], |
||||
} |
||||
|
||||
|
||||
def process_yaml_file(): |
||||
proxy_list = [] |
||||
with open(file_name, 'r', encoding='utf-8') as file: |
||||
data = yaml.safe_load(file) |
||||
|
||||
if not data: |
||||
print(f"Error reading {file_name}") |
||||
return |
||||
|
||||
proxies = data['proxies'] |
||||
for proxy in proxies: |
||||
if any(x in proxy['name'] for x in ['剩余流量', '套餐到期', '有效期']): |
||||
continue |
||||
|
||||
if any(node in proxy['name'] for node in need_nodes): |
||||
proxy_list.append(proxy) |
||||
|
||||
proxy_list_sorted = sorted(proxy_list, key=lambda x: x['name'] if 'name' in x else '') |
||||
|
||||
return proxy_list_sorted |
||||
|
||||
|
||||
def create_config_file(proxy_list_sorted): |
||||
config_file['proxies'] = proxy_list_sorted |
||||
|
||||
for proxy_list in proxy_list_sorted: |
||||
config_file['proxy-groups'][0]['proxies'].append(proxy_list['name']) |
||||
|
||||
|
||||
if __name__ == '__main__': |
||||
proxy_list_sorted = process_yaml_file() |
||||
|
||||
create_config_file(proxy_list_sorted) |
||||
|
||||
with open(f'config.yaml', 'w', encoding='utf-8') as file: |
||||
yaml.dump(config_file, file, allow_unicode=True, default_flow_style=False) |
||||
|
||||
print('done!') |
||||
@ -0,0 +1,185 @@ |
||||
proxies: |
||||
- {"name":"剩余流量:36.89 GB","type":"trojan","server":"cn1.cdn.xfltd-cdn.top","port":12001,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true} |
||||
- {"name":"套餐到期:长期有效","type":"trojan","server":"cn1.cdn.xfltd-cdn.top","port":12001,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true} |
||||
- {"name":"🇭🇰 香港 01","type":"trojan","server":"cn1.cdn.xfltd-cdn.top","port":12001,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true} |
||||
- {"name":"🇭🇰 香港 02","type":"trojan","server":"cn1.cdn.xfltd-cdn.top","port":12002,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true} |
||||
- {"name":"🇭🇰 香港 03","type":"trojan","server":"cn1.cdn.xfltd-cdn.top","port":12003,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true} |
||||
- {"name":"🇭🇰 香港 04","type":"trojan","server":"cn1.cdn.xfltd-cdn.top","port":12004,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true} |
||||
- {"name":"🇭🇰 香港 05","type":"trojan","server":"cn1.cdn.xfltd-cdn.top","port":12005,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true} |
||||
- {"name":"🇭🇰 香港 06","type":"trojan","server":"cn1.cdn.xfltd-cdn.top","port":12006,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true} |
||||
- {"name":"🇭🇰 香港 07","type":"trojan","server":"cn1.cdn.xfltd-cdn.top","port":12007,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true} |
||||
- {"name":"🇨🇳 台湾 01","type":"trojan","server":"cn1.cdn.xfltd-cdn.top","port":12011,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true} |
||||
- {"name":"🇨🇳 台湾 02","type":"trojan","server":"cn1.cdn.xfltd-cdn.top","port":12012,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true} |
||||
- {"name":"🇸🇬 新加坡 01","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12021,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true} |
||||
- {"name":"🇸🇬 新加坡 02","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12022,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true} |
||||
- {"name":"🇸🇬 新加坡 03","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12023,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true} |
||||
- {"name":"🇸🇬 新加坡 04","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12024,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true} |
||||
- {"name":"🇸🇬 新加坡 05","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12025,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true} |
||||
- {"name":"🇯🇵 日本 01","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12031,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true} |
||||
- {"name":"🇯🇵 日本 02","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12032,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true} |
||||
- {"name":"🇯🇵 日本 03","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12033,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true} |
||||
- {"name":"🇯🇵 日本 04","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12034,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true} |
||||
- {"name":"🇯🇵 日本 05","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12035,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true} |
||||
- {"name":"🇺🇸 美国 01","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12051,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true} |
||||
- {"name":"🇺🇸 美国 02","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12052,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true} |
||||
- {"name":"🇺🇸 美国 03","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12053,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true} |
||||
- {"name":"🇺🇸 美国 04","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12054,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true} |
||||
- {"name":"🇰🇷 韩国 01","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12041,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true} |
||||
- {"name":"🇮🇩 印尼 01","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12061,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true} |
||||
- {"name":"🇮🇹 意大利 01","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12062,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true} |
||||
- {"name":"🇹🇷 土耳其 01","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12064,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true} |
||||
- {"name":"🇫🇷 法国 01","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12065,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true} |
||||
- {"name":"🇦🇷 阿根廷 01","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12066,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true} |
||||
- {"name":"🇲🇾 马来西亚 01","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12067,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true} |
||||
- {"name":"🇦🇺 澳大利亚 01","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12068,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true} |
||||
- {"name":"🇬🇧 英国 01","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12069,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true} |
||||
- {"name":"🇩🇪 德国 01","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12070,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true} |
||||
- {"name":"🇸🇪 瑞典 01","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12071,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true} |
||||
- {"name":"🇮🇳 印度 01","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12072,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true} |
||||
- {"name":"🇳🇬 尼日利亚 01","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12073,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true} |
||||
- {"name":"🇳🇱 荷兰 01","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12074,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true} |
||||
- {"name":"🇷🇺 俄罗斯 01","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12075,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true} |
||||
- {"name":"🇹🇭 泰国 01","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12076,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true} |
||||
- {"name":"DE-Detour 01 AEAD","type":"vmess","server":"de-detour-01.grabgo.pro","port":15801,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"DE-Detour 02 AEAD","type":"vmess","server":"de-detour-02.grabgo.pro","port":15802,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"DE-Detour-03 AEAD","type":"vmess","server":"de-detour-03.grabgo.pro","port":15803,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"HKT-Detour 01 AEAD","type":"vmess","server":"hkt-detour-01.grabgo.pro","port":15101,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"HKT-Detour 02 AEAD","type":"vmess","server":"hkt-detour-02.grabgo.pro","port":15102,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"HKT-Detour 05 AEAD","type":"vmess","server":"hkt-detour-05.grabgo.pro","port":15105,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"HKT-Detour 06 AEAD","type":"vmess","server":"hkt-detour-06.grabgo.pro","port":15106,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"HKT-Detour 09 AEAD","type":"vmess","server":"hkt-detour-09.grabgo.pro","port":15109,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"HKT-Detour 10 AEAD","type":"vmess","server":"hkt-detour-10.grabgo.pro","port":15110,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"HKT-Detour 11 AEAD","type":"vmess","server":"hkt-detour-11.grabgo.pro","port":15111,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"HKT-Detour 12 AEAD","type":"vmess","server":"hkt-detour-12.grabgo.pro","port":15112,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"HKT-Detour 13 AEAD","type":"vmess","server":"hkt-detour-13.grabgo.pro","port":15113,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"HKT-Detour 14 AEAD","type":"vmess","server":"hkt-detour-14.grabgo.pro","port":15114,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"HKT-Detour 17 AEAD","type":"vmess","server":"hkt-detour-17.grabgo.pro","port":15117,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"HKT-Detour 18 AEAD","type":"vmess","server":"hkt-detour-18.grabgo.pro","port":15118,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"HKT-Detour 19 AEAD","type":"vmess","server":"hkt-detour-19.grabgo.pro","port":15119,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"HKT-Detour 20 AEAD","type":"vmess","server":"hkt-detour-20.grabgo.pro","port":15120,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"HKT-Detour 21 AEAD","type":"vmess","server":"hkt-detour-21.grabgo.pro","port":15131,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"HKT-Detour 23 AEAD","type":"vmess","server":"hkt-detour-23.grabgo.pro","port":15133,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"JP-Detour 01 AEAD","type":"vmess","server":"jp-01.grabgo.pro","port":15601,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"JP-Detour 02 AEAD","type":"vmess","server":"jp-02.grabgo.pro","port":15602,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"JP-Detour 03 AEAD","type":"vmess","server":"jp-03.grabgo.pro","port":15603,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"JP-Detour 04 AEAD","type":"vmess","server":"jp-04.grabgo.pro","port":15604,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"JP-Detour 05 AEAD","type":"vmess","server":"jp-05.grabgo.pro","port":15605,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"JP-Detour 06 AEAD","type":"vmess","server":"jp-06.grabgo.pro","port":15606,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"LA-Detour 02 AEAD","type":"vmess","server":"la-detour-02.grabgo.pro","port":15502,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"LA-Detour 03 AEAD","type":"vmess","server":"la-detour-03.grabgo.pro","port":15503,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"LA-Detour 05 AEAD","type":"vmess","server":"la-detour-05.grabgo.pro","port":15505,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"LA-Detour 07 AEAD","type":"vmess","server":"la-detour-07.grabgo.pro","port":15507,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"LA-Detour 09 AEAD","type":"vmess","server":"la-detour-09.grabgo.pro","port":15509,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"LA-Detour 10 AEAD","type":"vmess","server":"la-detour-10.grabgo.pro","port":15510,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"Oz-Detour 01 AEAD","type":"vmess","server":"oz-detour-01.grabgo.pro","port":15811,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"Oz-Detour 02 AEAD","type":"vmess","server":"oz-detour-02.grabgo.pro","port":15812,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"SG-Detour 01 AEAD","type":"vmess","server":"sg-detour-01.grabgo.pro","port":15301,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"SG-Detour 02 AEAD","type":"vmess","server":"sg-detour-02.grabgo.pro","port":15302,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"SG-Detour 03 AEAD","type":"vmess","server":"sg-detour-03.grabgo.pro","port":15303,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"TW-Detour 01 AEAD","type":"vmess","server":"tw-detour-01.grabgo.pro","port":15201,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"TW-Detour 02 AEAD","type":"vmess","server":"tw-detour-02.grabgo.pro","port":15202,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"TW-Detour 03 AEAD","type":"vmess","server":"tw-detour-03.grabgo.pro","port":15203,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"TW-Detour 05 AEAD","type":"vmess","server":"tw-detour-05.grabgo.pro","port":15205,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"TW-Detour 06 AEAD","type":"vmess","server":"tw-detour-06.grabgo.pro","port":15206,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"TW-Detour 08 AEAD","type":"vmess","server":"tw-detour-08.grabgo.pro","port":15208,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"TW-Detour 09 AEAD","type":"vmess","server":"tw-detour-09.grabgo.pro","port":15209,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"TW-Detour 10 AEAD","type":"vmess","server":"tw-detour-10.grabgo.pro","port":15210,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"TW-Detour 12 AEAD","type":"vmess","server":"tw-detour-12.grabgo.pro","port":15212,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"TW-Detour 13 AEAD","type":"vmess","server":"tw-detour-13.grabgo.pro","port":15213,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"TW-Detour 15 AEAD","type":"vmess","server":"tw-detour-15.grabgo.pro","port":15215,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"TW-Detour 16 AEAD","type":"vmess","server":"tw-detour-16.grabgo.pro","port":15216,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"TW-Detour 18 AEAD","type":"vmess","server":"tw-detour-18.grabgo.pro","port":15218,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"TW-Detour 19 AEAD","type":"vmess","server":"tw-detour-19.grabgo.pro","port":15219,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"TW-Detour 20 AEAD","type":"vmess","server":"tw-detour-20.grabgo.pro","port":15220,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"TW-Detour 22 AEAD","type":"vmess","server":"tw-detour-22.grabgo.pro","port":15222,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"TW-Detour 23 AEAD","type":"vmess","server":"tw-detour-23.grabgo.pro","port":15223,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"UK Detour-01 AEAD","type":"vmess","server":"uk-detour-01.grabgo.pro","port":15711,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"UK Detour-02 AEAD","type":"vmess","server":"uk-detour-02.grabgo.pro","port":15712,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"UK Detour-03 AEAD","type":"vmess","server":"uk-detour-03.grabgo.pro","port":15713,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"UK Detour-04 AEAD","type":"vmess","server":"uk-detour-04.grabgo.pro","port":15714,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"UK Detour-05 AEAD","type":"vmess","server":"uk-detour-05.grabgo.pro","port":15715,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"UK Detour-06 AEAD","type":"vmess","server":"uk-detour-06.grabgo.pro","port":15716,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"} |
||||
- {"name":"🇭🇰 香港-广东专线 BGP 1","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32443,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true} |
||||
- {"name":"🇭🇰 香港-广东专线 BGP 2","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32445,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true} |
||||
- {"name":"🇭🇰 香港-广东专线 Akari","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32037,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true} |
||||
- {"name":"🇭🇰 香港-广东专线 NeaRoute","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32029,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true} |
||||
- {"name":"🇭🇰 香港-广东专线 HKBN","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32000,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true} |
||||
- {"name":"🇭🇰 香港-广东专线 HGC","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32042,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true} |
||||
- {"name":"🇭🇰 香港-广东专线 HKT","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32033,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true} |
||||
- {"name":"🇭🇰 香港-广东专线 GCore","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32027,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true} |
||||
- {"name":"🇺🇸 美国-广东专线 BGP 1","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32001,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true} |
||||
- {"name":"🇺🇸 美国-广东专线 BGP 2","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32028,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true} |
||||
- {"name":"🇺🇸 美国-广东专线 DAOport","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32031,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true} |
||||
- {"name":"🇺🇸 美国-广东专线 GCore","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32021,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true} |
||||
- {"name":"🇹🇼 台湾-广东专线 NeaRoute","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32003,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true} |
||||
- {"name":"🇹🇼 台湾-广东专线 STUIX","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32040,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true} |
||||
- {"name":"🇯🇵 日本-广东专线 BGP","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32004,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true} |
||||
- {"name":"🇯🇵 日本-广东专线 Akari","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32036,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true} |
||||
- {"name":"🇯🇵 日本-广东专线 GCore","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32022,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true} |
||||
- {"name":"🇰🇷 韩国-广东专线 VUKR","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32005,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true} |
||||
- {"name":"🇸🇬 新加坡-广东专线 BGP","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32007,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true} |
||||
- {"name":"🇷🇺 俄罗斯-广东专线 PQ","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32008,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true} |
||||
- {"name":"🇫🇷 法国-广东专线 BGP","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32009,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true} |
||||
- {"name":"🇬🇧 英国-广东专线 BGP","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32010,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true} |
||||
- {"name":"🇨🇦 加拿大-广东专线 BGP","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32039,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true} |
||||
- {"name":"🇩🇪 德国-广东专线 BGP","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32011,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true} |
||||
- {"name":"🇦🇺 澳大利亚-广东专线 VUAU","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32012,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true} |
||||
- {"name":"🇦🇺 澳大利亚-广东专线 GCore","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32023,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true} |
||||
- {"name":"🇲🇾 马来西亚-广东专线 Shin","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32038,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true} |
||||
- {"name":"🇵🇭 菲律宾-广东专线 Zenlayer","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32013,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true} |
||||
- {"name":"🇵🇭 菲律宾-广东专线 Comfac","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32030,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true} |
||||
- {"name":"🇹🇭 泰国-广东专线 Bangmod","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32043,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true} |
||||
- {"name":"🇹🇷 土耳其-广东专线 Kapteyan","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32014,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true} |
||||
- {"name":"🇹🇷 土耳其-广东专线 GCore","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32026,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true} |
||||
- {"name":"🇦🇷 阿根廷-广东专线 DonWeb","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32015,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true} |
||||
- {"name":"🇳🇬 尼日利亚-广东专线 Melbicom","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32034,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true} |
||||
- {"name":"🇺🇦 乌克兰-广东专线 Vik","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32019,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true} |
||||
- {"name":"🇧🇷 巴西-广东专线 GCore 1","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32016,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true} |
||||
- {"name":"🇧🇷 巴西-广东专线 GCore 2","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32025,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true} |
||||
- {"name":"🇮🇳 印度-广东专线 DOIN","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32017,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true} |
||||
- {"name":"🇮🇳 印度-广东专线 GCore","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32024,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true} |
||||
- {"name":"🇸🇦 沙特-广东专线 STC","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32035,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true} |
||||
- {"name":"🇦🇶 南极-广东专线 WARP","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32041,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true} |
||||
- {"name":"有效期2026/03/11,剩余:100.00GB","type":"trojan","server":"iplc-hk-1.trojanwheel.com","port":465,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"iplc-hk-1.trojanwheel.com"} |
||||
- {"name":"香港-IPLC-HK-1-流量倍率:1.0","type":"trojan","server":"iplc-hk-1.trojanwheel.com","port":465,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"iplc-hk-1.trojanwheel.com"} |
||||
- {"name":"香港-IPLC-HK-2-流量倍率:1.0","type":"trojan","server":"iplc-hk-2.trojanwheel.com","port":465,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"iplc-hk-2.trojanwheel.com"} |
||||
- {"name":"香港-IPLC-HK-3-流量倍率:1.0","type":"trojan","server":"iplc-hk-3.trojanwheel.com","port":465,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"iplc-hk-3.trojanwheel.com"} |
||||
- {"name":"香港-IPLC-HK-4-流量倍率:1.0","type":"trojan","server":"iplc-hk-4.trojanwheel.com","port":5001,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"iplc-hk-4.trojanwheel.com"} |
||||
- {"name":"香港-IPLC-HK-5-流量倍率:1.0","type":"trojan","server":"iplc-hk-5.trojanwheel.com","port":5002,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"iplc-hk-5.trojanwheel.com"} |
||||
- {"name":"香港-IPLC-HK-6-流量倍率:1.0","type":"trojan","server":"iplc-hk-6.trojanwheel.com","port":5003,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"iplc-hk-6.trojanwheel.com"} |
||||
- {"name":"香港-IPLC-HK-7-流量倍率:1.0","type":"trojan","server":"iplc-hk-7.trojanwheel.com","port":5004,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"iplc-hk-7.trojanwheel.com"} |
||||
- {"name":"日本-FW-JP-TEST1-流量倍率:1.0","type":"trojan","server":"fw-jp-test1.trojanwheel.com","port":5011,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"fw-jp-test1.trojanwheel.com"} |
||||
- {"name":"日本-FW-JP-TEST2-流量倍率:1.0","type":"trojan","server":"fw-jp-test2.trojanwheel.com","port":5012,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"fw-jp-test2.trojanwheel.com"} |
||||
- {"name":"日本-FW-JP1-流量倍率:1.0","type":"trojan","server":"fw-jp1.rise-fuji.com","port":5011,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"fw-jp1.rise-fuji.com"} |
||||
- {"name":"日本-FW-JP2-流量倍率:1.0","type":"trojan","server":"fw-jp2.rise-fuji.com","port":5012,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"fw-jp2.rise-fuji.com"} |
||||
- {"name":"美国-FW-US1-流量倍率:1.5","type":"trojan","server":"fw-us1.regentgrandvalley.com","port":5021,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"fw-us1.regentgrandvalley.com"} |
||||
- {"name":"美国-FW-US2-流量倍率:1.0","type":"trojan","server":"fw-us2.regentgrandvalley.com","port":5022,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"fw-us2.regentgrandvalley.com"} |
||||
- {"name":"爱沙尼亚-EE-1-流量倍率:0.1","type":"trojan","server":"ee-1.kamediorg.com","port":443,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"ee-1.kamediorg.com"} |
||||
- {"name":"澳大利亚-AU-1-流量倍率:0.5","type":"trojan","server":"au-1.australiastudio.com","port":443,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"au-1.australiastudio.com"} |
||||
- {"name":"澳大利亚-AU-2-流量倍率:1.0","type":"trojan","server":"au-2.australiastudio.com","port":443,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"au-2.australiastudio.com"} |
||||
- {"name":"澳大利亚-AU-3-流量倍率:1.0","type":"trojan","server":"au-3.australiastudio.com","port":443,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"au-3.australiastudio.com"} |
||||
- {"name":"澳大利亚-AU-4-流量倍率:1.0","type":"trojan","server":"au-4.australiastudio.com","port":443,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"au-4.australiastudio.com"} |
||||
- {"name":"德国-DE-2-流量倍率:1.0","type":"trojan","server":"de-2.topeinstein.com","port":443,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"de-2.topeinstein.com"} |
||||
- {"name":"德国-DE-3-流量倍率:1.0","type":"trojan","server":"de-3.topeinstein.com","port":443,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"de-3.topeinstein.com"} |
||||
- {"name":"美国-US-1-流量倍率:1.5","type":"trojan","server":"us-1.regentgrandvalley.com","port":443,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"us-1.regentgrandvalley.com"} |
||||
- {"name":"美国-US-2-流量倍率:1.0","type":"trojan","server":"us-2.regentgrandvalley.com","port":443,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"us-2.regentgrandvalley.com"} |
||||
- {"name":"美国-US-3-流量倍率:1.0","type":"trojan","server":"us-3.regentgrandvalley.com","port":443,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"us-3.regentgrandvalley.com"} |
||||
- {"name":"香港-HK-1-流量倍率:1.0","type":"trojan","server":"hk-1.victoriamitrepeak.com","port":465,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"hk-1.victoriamitrepeak.com"} |
||||
- {"name":"香港-HK-2-流量倍率:1.0","type":"trojan","server":"hk-2.victoriamitrepeak.com","port":465,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"hk-2.victoriamitrepeak.com"} |
||||
- {"name":"新加坡-SG-1-流量倍率:1.0","type":"trojan","server":"sg-1.victoriamitrepeak.com","port":443,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"sg-1.victoriamitrepeak.com"} |
||||
- {"name":"新加坡-SG-2-流量倍率:1.0","type":"trojan","server":"sg-2.victoriamitrepeak.com","port":443,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"sg-2.victoriamitrepeak.com"} |
||||
- {"name":"日本-TY-1-流量倍率:1.0","type":"trojan","server":"ty-1.rise-fuji.com","port":443,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"ty-1.rise-fuji.com"} |
||||
- {"name":"日本-TY-2-流量倍率:1.0","type":"trojan","server":"ty-2.rise-fuji.com","port":443,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"ty-2.rise-fuji.com"} |
||||
- {"name":"日本-TY-3-流量倍率:1.0","type":"trojan","server":"ty-3.rise-fuji.com","port":443,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"ty-3.rise-fuji.com"} |
||||
- {"name":"日本-TY-4-流量倍率:1.0","type":"trojan","server":"ty-4.rise-fuji.com","port":443,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"ty-4.rise-fuji.com"} |
||||
- {"name":"日本-OS-1-流量倍率:1.0","type":"trojan","server":"os-1.rise-fuji.com","port":443,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"os-1.rise-fuji.com"} |
||||
- {"name":"日本-OS-2-流量倍率:1.0","type":"trojan","server":"os-2.rise-fuji.com","port":443,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"os-2.rise-fuji.com"} |
||||
- {"name":"日本-OS-3-流量倍率:1.0","type":"trojan","server":"os-3.rise-fuji.com","port":443,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"os-3.rise-fuji.com"} |
||||
- {"name":"荷兰-NL-1-流量倍率:1.0","type":"trojan","server":"nl-1.concert-geb.com","port":443,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"nl-1.concert-geb.com"} |
||||
- {"name":"荷兰-NL-2-流量倍率:1.0","type":"trojan","server":"nl-2.concert-geb.com","port":443,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"nl-2.concert-geb.com"} |
||||
- {"name":"荷兰-NL-3-流量倍率:1.0","type":"trojan","server":"nl-3.concert-geb.com","port":443,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"nl-3.concert-geb.com"} |
||||
- {"name":"英国-UK-1-流量倍率:1.0","type":"trojan","server":"uk-1.fishchipsexpress.com","port":443,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"uk-1.fishchipsexpress.com"} |
||||
- {"name":"台湾-TW-1-流量倍率:1.0","type":"trojan","server":"tw-1.chianginc.com","port":443,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"tw-1.chianginc.com"} |
||||
- {"name":"台湾-TW-2-流量倍率:1.0","type":"trojan","server":"tw-2.chianginc.com","port":443,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"tw-2.chianginc.com"} |
||||
- {"name":"美国-V6-US3-流量倍率:1.0","type":"trojan","server":"v6-us3.nigirocloud.com","port":4003,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"v6-us3.nigirocloud.com"} |
||||
- {"name":"荷兰-V6-NL1-流量倍率:1.0","type":"trojan","server":"v6-nl1.nigirocloud.com","port":4003,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"v6-nl1.nigirocloud.com"} |
||||
@ -0,0 +1,43 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# 修改当前代理设置, 切换全局代理 |
||||
|
||||
import httpx |
||||
import asyncio |
||||
|
||||
ip = "192.168.31.201" |
||||
|
||||
select_port_list = 0 |
||||
|
||||
port_group_list = [ |
||||
['58001', '58002', '58003', '58004', '58005', '58006', '58007', '58008', '58009', '58010'], |
||||
['32001', '32002', '32003', '32004', '32005', '32006', '32007', '32008', '32009', '32010', '32011', '32012'] |
||||
] |
||||
|
||||
port_list = port_group_list[select_port_list] |
||||
|
||||
|
||||
async def patch_config(base_port): |
||||
url_and_port = f"http://{ip}:{base_port}" |
||||
key = "/api/configs" |
||||
full_url = url_and_port + key |
||||
|
||||
data = {"mode": "Global"} |
||||
headers = {"Content-Type": "application/json"} |
||||
|
||||
async with httpx.AsyncClient() as client: |
||||
try: |
||||
response = await client.patch(full_url, json=data, headers=headers) |
||||
response.raise_for_status() |
||||
print(f"{url_and_port}: 切换全局代理 OK") |
||||
except httpx.HTTPError as exc: |
||||
print(f"请求失败: {exc}") |
||||
exit(1) |
||||
|
||||
|
||||
async def main(): |
||||
tasks = [patch_config(base_port) for base_port in port_list] |
||||
await asyncio.gather(*tasks) |
||||
|
||||
|
||||
if __name__ == "__main__": |
||||
asyncio.run(main()) |
||||
@ -0,0 +1,163 @@ |
||||
# -*- coding: utf-8 -*- |
||||
''' |
||||
切换到随机代理 |
||||
''' |
||||
import random |
||||
from urllib.parse import quote |
||||
import httpx |
||||
import time |
||||
import subprocess |
||||
from typing import List |
||||
|
||||
BASE_URL = "http://192.168.31.201" |
||||
|
||||
PORT_LIST = ['32001', '32002', '32003', '32004', '32005', '32006', '32007', '32008', '32009', '32010', '32011', '32012'] |
||||
|
||||
PROXY_GROUP = ['香港', 'HK', '新加坡', 'SG', '台湾', 'TW', '日本', 'JP', '韩国', '澳门', '马来西亚', '澳大利亚'] |
||||
|
||||
GROUP = 2 |
||||
|
||||
|
||||
class ClashProxyManager: |
||||
def __init__(self, base_url, base_port): |
||||
self.key_group = 0 |
||||
self.base_url = base_url |
||||
self.base_port = base_port |
||||
self.all_proxies = [] |
||||
self.used_proxy = [] |
||||
|
||||
def get_all_proxies(self, clash_tool_url: str) -> List[str]: |
||||
# 连接其中一个代理服务器, 获取所有代理节点, 因为每个代理服务器的所有节点都是一样的, 所以获取一个就行了 |
||||
url = f"{clash_tool_url}/api/proxies" |
||||
try: |
||||
response = httpx.get(url) |
||||
response.raise_for_status() |
||||
proxies = response.json() |
||||
# 输出读取的所有代理信息 |
||||
# for proxy_name, proxy_info in proxies['proxies'].items(): |
||||
# logging.info(f"Name: {proxy_name}, Type: {proxy_info.get('type', 'Unknown')}") |
||||
proxy_list = list(proxies['proxies'].keys()) |
||||
|
||||
result_data = [] |
||||
|
||||
if GROUP == 1: |
||||
for filtered in proxy_list: |
||||
for group in PROXY_GROUP: |
||||
if group.lower() in filtered.lower() and filtered not in {'REJECT', 'GLOBAL', 'DIRECT'}: |
||||
result_data.append(filtered) |
||||
elif GROUP == 2: |
||||
for filtered in proxy_list: |
||||
if all(group.lower() not in filtered.lower() for group in PROXY_GROUP) and filtered not in { |
||||
'REJECT', 'GLOBAL', 'DIRECT'}: |
||||
result_data.append(filtered) |
||||
else: |
||||
print(f'选择代理组为 {GROUP}') |
||||
exit(1) |
||||
print(f'读取所有代理节点, 一共 {len(result_data)} 个节点') |
||||
return result_data |
||||
except Exception as e: |
||||
print(f"Failed to get proxies: {e}") |
||||
return [] |
||||
|
||||
def switch_proxy(self, proxy_name: str, url_and_port: str) -> None: |
||||
# 根据节点名称和代理服务器url, 切换到指定的代理节点 |
||||
url = f"{url_and_port}/api/proxies/GLOBAL" |
||||
data = {"name": proxy_name} |
||||
try: |
||||
response = httpx.put(url, json=data) |
||||
if response.status_code == 204: |
||||
print(f"Switched to proxy: {proxy_name}") |
||||
else: |
||||
print(f"Failed to switch proxy: {response.status_code} - {proxy_name}") |
||||
except Exception as e: |
||||
print(f"Failed to switch proxy: {e}") |
||||
|
||||
def update_configs(self): |
||||
for base_port in self.base_port: |
||||
url_and_port = self.base_url + ":" + base_port |
||||
key = "/api/configs" |
||||
url = url_and_port + key |
||||
|
||||
# 构造 curl 命令 |
||||
curl_cmd = [ |
||||
"curl", |
||||
"-X", "PATCH", |
||||
url, |
||||
"-H", "Content-Type: application/json", |
||||
"-d", '{"mode": "Global"}' |
||||
] |
||||
|
||||
try: |
||||
# 使用 subprocess 运行 curl 命令 |
||||
result = subprocess.run(curl_cmd, capture_output=True, text=True, check=True) |
||||
|
||||
# 检查 curl 命令的返回状态 |
||||
if result.returncode != 0: |
||||
print(f"请求失败,状态码: {result.returncode}") |
||||
print("错误信息:", result.stderr.strip()) |
||||
except subprocess.CalledProcessError as exc: |
||||
print(f"请求失败: {exc}") |
||||
print("错误信息:", exc.stderr.strip()) |
||||
|
||||
def check_proxy(self, proxy_url, choose_proxy): |
||||
encode_proxy_name = quote(choose_proxy, safe="") |
||||
command = [ |
||||
"curl", |
||||
"-X", "GET", |
||||
f"{proxy_url}/api/proxies/{encode_proxy_name}/delay?timeout=5000&url=http:%2F%2Fwww.gstatic.com%2Fgenerate_204" |
||||
] |
||||
|
||||
try: |
||||
result = subprocess.run(command, capture_output=True, text=True, check=True) |
||||
print("Output:", result.stdout) |
||||
if 'Timeout' in result.stdout: |
||||
return False |
||||
return True |
||||
except subprocess.CalledProcessError as e: |
||||
print("Error:", e.stderr) |
||||
return False |
||||
|
||||
def main(self) -> None: |
||||
self.update_configs() |
||||
|
||||
if not self.all_proxies: |
||||
for port_list in self.base_port: |
||||
base_url = self.base_url + ":" + port_list |
||||
clash_tool_url = f"{base_url}" |
||||
self.all_proxies = self.get_all_proxies(clash_tool_url) |
||||
if self.all_proxies: |
||||
break |
||||
|
||||
if not self.all_proxies: |
||||
return |
||||
else: |
||||
print(f'待切换节点一共 {len(self.all_proxies)} 个') |
||||
|
||||
for base_port in self.base_port: |
||||
url_and_port = self.base_url + ":" + base_port |
||||
while True: |
||||
choose_proxy = random.choice(self.all_proxies) |
||||
if choose_proxy in self.used_proxy: |
||||
if len(self.used_proxy) >= len(self.all_proxies): |
||||
print('=' * 88) |
||||
print(f'所有节点已尝试过, 退出') |
||||
print('=' * 88) |
||||
return |
||||
continue |
||||
|
||||
self.switch_proxy(choose_proxy, url_and_port) |
||||
|
||||
self.used_proxy.append(choose_proxy) |
||||
|
||||
if self.check_proxy(url_and_port, choose_proxy): |
||||
print(f"代理 {choose_proxy} 切换成功,检测通过!") |
||||
print('=' * 88) |
||||
break |
||||
else: |
||||
print(f"{url_and_port} 切换 xxxxxxxx {choose_proxy} xxxxxxxx 检测失败") |
||||
time.sleep(1) |
||||
|
||||
|
||||
if __name__ == "__main__": |
||||
manager = ClashProxyManager(BASE_URL, PORT_LIST) |
||||
manager.main() |
||||
@ -0,0 +1,164 @@ |
||||
# -*- coding: utf-8 -*- |
||||
''' |
||||
切换到随机代理 |
||||
''' |
||||
import random |
||||
from urllib.parse import quote |
||||
import httpx |
||||
import time |
||||
import subprocess |
||||
from typing import List |
||||
|
||||
BASE_URL = "http://192.168.31.194" |
||||
|
||||
PORT_LIST = ['58001', '58002', '58003', '58004', '58005', '58006', '58007', '58008', '58009', '58010'] |
||||
|
||||
PROXY_GROUP = [] |
||||
# PROXY_GROUP = ['香港', 'HK', '新加坡', 'SG', '台湾', 'TW', '日本', 'JP', '韩国', '澳门'] |
||||
|
||||
GROUP = 1 |
||||
|
||||
|
||||
class ClashProxyManager: |
||||
def __init__(self, base_url, base_port): |
||||
self.key_group = 0 |
||||
self.base_url = base_url |
||||
self.base_port = base_port |
||||
self.all_proxies = [] |
||||
self.used_proxy = [] |
||||
|
||||
def get_all_proxies(self, clash_tool_url: str) -> List[str]: |
||||
# 连接其中一个代理服务器, 获取所有代理节点, 因为每个代理服务器的所有节点都是一样的, 所以获取一个就行了 |
||||
url = f"{clash_tool_url}/api/proxies" |
||||
try: |
||||
response = httpx.get(url) |
||||
response.raise_for_status() |
||||
proxies = response.json() |
||||
# 输出读取的所有代理信息 |
||||
# for proxy_name, proxy_info in proxies['proxies'].items(): |
||||
# logging.info(f"Name: {proxy_name}, Type: {proxy_info.get('type', 'Unknown')}") |
||||
proxy_list = list(proxies['proxies'].keys()) |
||||
|
||||
result_data = [] |
||||
|
||||
if GROUP == 1: |
||||
for filtered in proxy_list: |
||||
for group in PROXY_GROUP: |
||||
if group.lower() in filtered.lower() and filtered not in {'REJECT', 'GLOBAL', 'DIRECT'}: |
||||
result_data.append(filtered) |
||||
elif GROUP == 2: |
||||
for filtered in proxy_list: |
||||
if all(group.lower() not in filtered.lower() for group in PROXY_GROUP) and filtered not in { |
||||
'REJECT', 'GLOBAL', 'DIRECT'}: |
||||
result_data.append(filtered) |
||||
else: |
||||
print(f'选择代理组为 {GROUP}') |
||||
exit(1) |
||||
print(f'读取所有代理节点, 一共 {len(result_data)} 个节点') |
||||
return result_data |
||||
except Exception as e: |
||||
print(f"Failed to get proxies: {e}") |
||||
return [] |
||||
|
||||
def switch_proxy(self, proxy_name: str, url_and_port: str) -> None: |
||||
# 根据节点名称和代理服务器url, 切换到指定的代理节点 |
||||
url = f"{url_and_port}/api/proxies/GLOBAL" |
||||
data = {"name": proxy_name} |
||||
try: |
||||
response = httpx.put(url, json=data) |
||||
if response.status_code == 204: |
||||
print(f"Switched to proxy: {proxy_name}") |
||||
else: |
||||
print(f"Failed to switch proxy: {response.status_code} - {proxy_name}") |
||||
except Exception as e: |
||||
print(f"Failed to switch proxy: {e}") |
||||
|
||||
def update_configs(self): |
||||
for base_port in self.base_port: |
||||
url_and_port = self.base_url + ":" + base_port |
||||
key = "/api/configs" |
||||
url = url_and_port + key |
||||
|
||||
# 构造 curl 命令 |
||||
curl_cmd = [ |
||||
"curl", |
||||
"-X", "PATCH", |
||||
url, |
||||
"-H", "Content-Type: application/json", |
||||
"-d", '{"mode": "Global"}' |
||||
] |
||||
|
||||
try: |
||||
# 使用 subprocess 运行 curl 命令 |
||||
result = subprocess.run(curl_cmd, capture_output=True, text=True, check=True) |
||||
|
||||
# 检查 curl 命令的返回状态 |
||||
if result.returncode != 0: |
||||
print(f"请求失败,状态码: {result.returncode}") |
||||
print("错误信息:", result.stderr.strip()) |
||||
except subprocess.CalledProcessError as exc: |
||||
print(f"请求失败: {exc}") |
||||
print("错误信息:", exc.stderr.strip()) |
||||
|
||||
def check_proxy(self, proxy_url, choose_proxy): |
||||
encode_proxy_name = quote(choose_proxy, safe="") |
||||
command = [ |
||||
"curl", |
||||
"-X", "GET", |
||||
f"http://{proxy_url}/api/proxies/{encode_proxy_name}/delay?timeout=5000&url=http:%2F%2Fwww.gstatic.com%2Fgenerate_204" |
||||
] |
||||
|
||||
try: |
||||
result = subprocess.run(command, capture_output=True, text=True, check=True) |
||||
print("Output:", result.stdout) |
||||
if 'Timeout' in result.stdout: |
||||
return False |
||||
return True |
||||
except subprocess.CalledProcessError as e: |
||||
print("Error:", e.stderr) |
||||
return False |
||||
|
||||
def main(self) -> None: |
||||
self.update_configs() |
||||
|
||||
if not self.all_proxies: |
||||
for port_list in self.base_port: |
||||
base_url = self.base_url + ":" + port_list |
||||
clash_tool_url = f"{base_url}" |
||||
self.all_proxies = self.get_all_proxies(clash_tool_url) |
||||
if self.all_proxies: |
||||
break |
||||
|
||||
if not self.all_proxies: |
||||
return |
||||
else: |
||||
print(f'待切换节点一共 {len(self.all_proxies)} 个') |
||||
|
||||
for base_port in self.base_port: |
||||
url_and_port = self.base_url + ":" + base_port |
||||
while True: |
||||
choose_proxy = random.choice(self.all_proxies) |
||||
if choose_proxy in self.used_proxy: |
||||
if len(self.used_proxy) >= len(self.all_proxies): |
||||
print('=' * 88) |
||||
print(f'所有节点已尝试过, 退出') |
||||
print('=' * 88) |
||||
return |
||||
continue |
||||
|
||||
self.switch_proxy(choose_proxy, url_and_port) |
||||
|
||||
self.used_proxy.append(choose_proxy) |
||||
|
||||
if self.check_proxy(url_and_port, choose_proxy): |
||||
print(f"代理 {choose_proxy} 切换成功,检测通过!") |
||||
print('=' * 88) |
||||
break |
||||
else: |
||||
print(f"{url_and_port} 切换 xxxxxxxx {choose_proxy} xxxxxxxx 检测失败") |
||||
time.sleep(1) |
||||
|
||||
|
||||
if __name__ == "__main__": |
||||
manager = ClashProxyManager(BASE_URL, PORT_LIST) |
||||
manager.main() |
||||
@ -0,0 +1,133 @@ |
||||
import os |
||||
import pyautogui |
||||
import tkinter as tk |
||||
from tkinter import messagebox |
||||
import time |
||||
|
||||
|
||||
class AutoClicker: |
||||
def __init__(self, src_folder="src"): |
||||
self.src_folder = src_folder |
||||
self.png_files = [] |
||||
|
||||
def load_png_list(self): |
||||
"""加载src文件夹中的所有PNG文件""" |
||||
if not os.path.exists(self.src_folder): |
||||
os.makedirs(self.src_folder) |
||||
print(f"文件夹 {self.src_folder} 不存在,已创建。") |
||||
return [] |
||||
|
||||
self.png_files = [f for f in os.listdir(self.src_folder) if f.endswith(".png")] |
||||
print(f"加载PNG文件列表: {self.png_files}") |
||||
return self.png_files |
||||
|
||||
def check_image_on_screen(self, image_path, confidence=0.8): |
||||
"""检查当前屏幕是否存在图片""" |
||||
location = pyautogui.locateOnScreen(image_path, confidence=confidence) |
||||
if location: |
||||
print(f'图片: {image_path} 找到,坐标: {location}') |
||||
return location |
||||
else: |
||||
print(f'没有找到图片: {image_path}') |
||||
return None |
||||
|
||||
def click_image_center(self, image_path, confidence=0.8): |
||||
"""点击图片中心""" |
||||
location = self.check_image_on_screen(image_path, confidence) |
||||
if location: |
||||
button_x, button_y = pyautogui.center(location) |
||||
print(f'图片中心坐标: {button_x}, {button_y}') |
||||
pyautogui.click(button_x, button_y) |
||||
return True |
||||
return False |
||||
|
||||
def move_mouse_to(self, x, y): |
||||
"""移动鼠标到指定坐标""" |
||||
pyautogui.moveTo(x, y) |
||||
print(f'鼠标移动到坐标: {x}, {y}') |
||||
|
||||
def mouse_click(self): |
||||
"""鼠标点击""" |
||||
pyautogui.click() |
||||
print('鼠标点击') |
||||
|
||||
def scroll_mouse(self, delta): |
||||
"""滚动鼠标滚轮""" |
||||
pyautogui.scroll(delta) |
||||
print(f'鼠标滚轮滚动: {delta}') |
||||
|
||||
|
||||
def main(): |
||||
# 创建自动化点击器实例 |
||||
auto_clicker = AutoClicker() |
||||
|
||||
# 加载PNG文件 |
||||
auto_clicker.load_png_list() |
||||
|
||||
# 创建GUI |
||||
root = tk.Tk() |
||||
root.title("自动化点击器") |
||||
root.geometry("480x320") |
||||
|
||||
button_font = ("Arial", 12) |
||||
# 修改背景色和文字颜色 |
||||
button_bg_color = "lightblue" |
||||
button_fg_color = "black" |
||||
button_border_width = 2 |
||||
|
||||
# 测试按钮 |
||||
def test_check_image(): |
||||
file = auto_clicker.png_files[0] if auto_clicker.png_files else "1.png" |
||||
location = auto_clicker.check_image_on_screen(os.path.join(auto_clicker.src_folder, file)) |
||||
if location: |
||||
messagebox.showinfo("测试结果", f"图片 {file} 找到!") |
||||
else: |
||||
messagebox.showerror("测试结果", f"图片 {file} 未找到!") |
||||
|
||||
def test_click_image(): |
||||
file = auto_clicker.png_files[0] if auto_clicker.png_files else "1.png" |
||||
if auto_clicker.click_image_center(os.path.join(auto_clicker.src_folder, file)): |
||||
messagebox.showinfo("测试结果", f"点击图片 {file} 成功!") |
||||
else: |
||||
messagebox.showerror("测试结果", f"点击图片 {file} 失败!") |
||||
|
||||
def test_move_mouse(): |
||||
auto_clicker.move_mouse_to(100, 100) |
||||
messagebox.showinfo("测试结果", "鼠标已移动到 (100, 100)") |
||||
|
||||
def test_mouse_click(): |
||||
auto_clicker.mouse_click() |
||||
messagebox.showinfo("测试结果", "鼠标点击完成") |
||||
|
||||
def test_scroll_mouse(): |
||||
auto_clicker.scroll_mouse(10) |
||||
messagebox.showinfo("测试结果", "鼠标滚轮滚动完成") |
||||
|
||||
def start_tasks(): |
||||
while True: |
||||
# 在这里添加你的任务代码 |
||||
print("开始任务") |
||||
time.sleep(1) |
||||
print("任务结束") |
||||
time.sleep(1) |
||||
|
||||
# 创建按钮 |
||||
tk.Button(root, text="开始任务", command=start_tasks, font=button_font, bg=button_bg_color, |
||||
fg=button_fg_color, bd=button_border_width).pack(pady=5) |
||||
tk.Button(root, text="测试检查图片", command=test_check_image, font=button_font, bg=button_bg_color, |
||||
fg=button_fg_color, bd=button_border_width).pack(pady=5) |
||||
tk.Button(root, text="测试点击图片", command=test_click_image, font=button_font, bg=button_bg_color, |
||||
fg=button_fg_color, bd=button_border_width).pack(pady=5) |
||||
tk.Button(root, text="测试移动鼠标", command=test_move_mouse, font=button_font, bg=button_bg_color, |
||||
fg=button_fg_color, bd=button_border_width).pack(pady=5) |
||||
tk.Button(root, text="测试鼠标点击", command=test_mouse_click, font=button_font, bg=button_bg_color, |
||||
fg=button_fg_color, bd=button_border_width).pack(pady=5) |
||||
tk.Button(root, text="测试滚动鼠标", command=test_scroll_mouse, font=button_font, bg=button_bg_color, |
||||
fg=button_fg_color, bd=button_border_width).pack(pady=5) |
||||
|
||||
# 启动GUI |
||||
root.mainloop() |
||||
|
||||
|
||||
if __name__ == "__main__": |
||||
main() |
||||
|
After Width: | Height: | Size: 5.7 KiB |
|
After Width: | Height: | Size: 5.1 KiB |
|
After Width: | Height: | Size: 4.4 KiB |
@ -0,0 +1,13 @@ |
||||
soup elephant glare success violin unusual blade swing twenty tent cable require trap major cloud item infant ensure proof glimpse bulk gain grape annual |
||||
surge quit style joy armor save inside jungle man practice admit ball |
||||
drama follow rhythm grit myth glow immense pretty sorry royal board armed virtual avocado meadow exist urge club major cool saddle dad regular cigar |
||||
level blue fall burger famous thing subway zone undo panic clog voyage drum fade bracket bone attend pass level fetch trap brain client judge |
||||
cry margin renew bean awful hedgehog canyon often ahead frame master crazy luggage gown desert entire enrich grape human item faculty satisfy occur kind |
||||
cram kidney drip smart solar treat cry cushion volume under chief crowd today pond smart tomato net card shallow large act unlock boss private |
||||
nerve expand focus fury topic benefit fruit coach win betray guard clarify sketch project cat prize define anxiety remember acoustic client cave noodle sword |
||||
loud crucial output pony year attract lock barrel level entire price affair version shallow forward flock near badge mass box above future arm soup |
||||
ethics hobby gun relax goose apple reduce frequent jungle affair rotate solid ready ridge siege tide when suggest cannon change display marble expand tired |
||||
shaft dial garden surface dismiss kitchen clap ice manual answer spider walk open slogan earn cave boil magic wave olive medal sing dinner accident |
||||
|
||||
|
||||
|
||||
Loading…
Reference in new issue