2025.04.11
手搓了一个图形化开箱即用的exe
exe下载
https://github.com/benja956/disadober/releases/download/0.0.2/disadober.v0.0.2.exe
repo地址
2025.04.10
利用脚本修改Roaming\io.github.clash-verge-rev.clash-verge-rev\profiles\Script.js
屏蔽的url基于GitHub · Where software is built
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
import platform
import shutil
import requests
from pathlib import Path
from datetime import datetime
def get_clash_verge_directory():
"""获取Clash Verge配置文件目录"""
system = platform.system()
home = Path.home()
if system == "Windows":
return home / "AppData" / "Roaming" / "io.github.clash-verge-rev.clash-verge-rev"
elif system == "Darwin": # macOS
return home / "Library" / "Application Support" / "io.github.clash-verge-rev"
elif system == "Linux":
return home / ".config" / "clash-verge"
else:
raise OSError(f"不支持的操作系统: {system}")
def find_global_script():
"""查找Clash Verge的全局脚本"""
config_dir = get_clash_verge_directory()
profiles_dir = config_dir / "profiles"
if not profiles_dir.exists():
print(f"配置目录不存在: {profiles_dir}")
return None
script_files = []
# 查找名为 "script.js" 的全局脚本文件
for file in profiles_dir.glob("*.js"):
if file.name == "Script.js":
script_files.append(file)
# 如果没有找到 script.js,则查找其他可能的脚本文件
if not script_files:
for file in profiles_dir.glob("*.js"):
script_files.append(file)
if not script_files:
print("未找到全局脚本文件")
return None
if len(script_files) > 1:
print(f"找到多个脚本文件: {', '.join(str(f) for f in script_files)}")
print(f"默认选择第一个: {script_files[0]}")
return script_files[0]
def backup_file(file_path):
"""备份文件"""
if not file_path.exists():
print(f"文件不存在: {file_path}")
return False
timestamp = datetime.now().strftime("%Y%m%d%H%M%S")
backup_path = file_path.with_suffix(f".bak.{timestamp}")
shutil.copy2(file_path, backup_path)
print(f"已备份文件到: {backup_path}")
return True
def download_adobe_block_list():
"""下载Adobe屏蔽名单"""
url = "https://raw.githubusercontent.com/ignaciocastro/a-dove-is-dumb/main/127.txt"
try:
response = requests.get(url)
if response.status_code == 200:
domains = []
for line in response.text.splitlines():
line = line.strip()
if line and line.startswith("127.0.0.1 "):
domain = line.split(" ")[1]
if "adobe" in domain.lower():
domains.append(domain)
return domains
else:
print(f"下载Adobe屏蔽名单失败,HTTP状态码: {response.status_code}")
return None
except Exception as e:
print(f"下载Adobe屏蔽名单时出错: {e}")
return None
def create_adobe_block_script(domains):
"""创建Adobe屏蔽脚本"""
# 安全的脚本模板
script_template = """// Adobe屏蔽规则 - 由 clash_verge_adobe_block.py 生成
function main(config) {
// 确保配置对象存在
if (!config) {
config = {};
}
// 确保rules数组存在
if (!config.rules) {
config.rules = [];
}
// Adobe屏蔽规则 - 允许photo-api
const adobe_rules = [
"DOMAIN-SUFFIX,photo-api.adobe.io,DIRECT"
];
// Adobe屏蔽规则 - 固定规则
adobe_rules.push("DOMAIN-SUFFIX,*.adobe.io,REJECT");
adobe_rules.push("DOMAIN-SUFFIX,adobestats.io,REJECT");
// Adobe屏蔽规则 - 从屏蔽列表生成
%s
// 将规则添加到配置的开头
config.rules = adobe_rules.concat(config.rules);
return config;
}
"""
# 生成域名规则代码
domain_rules = []
for domain in domains:
if "adobe" in domain.lower() and "adobe.io" not in domain:
domain_rules.append(f' adobe_rules.push("DOMAIN-SUFFIX,{domain},REJECT");')
# 插入域名规则
domain_rules_str = "\n".join(domain_rules)
return script_template % domain_rules_str
def modify_clash_verge_script():
"""修改Clash Verge脚本添加Adobe屏蔽规则"""
# 查找脚本文件
script_path = find_global_script()
if not script_path:
print("无法找到全局脚本,退出")
return
print(f"找到全局脚本: {script_path}")
# 下载Adobe屏蔽列表
print("正在下载Adobe屏蔽名单...")
domains = download_adobe_block_list()
if not domains:
print("获取Adobe屏蔽名单失败,使用基本规则")
domains = []
else:
print(f"成功获取到 {len(domains)} 个Adobe相关域名")
# 创建安全的脚本
new_script = create_adobe_block_script(domains)
# 备份原文件
if not backup_file(script_path):
return
# 写入新脚本
with open(script_path, 'w', encoding='utf-8') as f:
f.write(new_script)
print(f"已成功修改脚本: {script_path}")
print("Adobe屏蔽规则已应用。请重启Clash Verge以生效。")
if __name__ == "__main__":
try:
print("Clash Verge Adobe屏蔽工具")
print("-" * 50)
modify_clash_verge_script()
except Exception as e:
print(f"发生错误: {e}")