9.9 KiB
0.1.2:fingerprint-chromium + Patchright 迁移与验证
1. 用户要求及已确认来源
用户指出 Chrome 显示“正受到自动测试软件的控制”,要求改用 fingerprint-chrome 和 Patchright。已通过交互确认具体项目为:
- 浏览器:
https://github.com/adryfish/fingerprint-chromium - Python 驱动:
https://github.com/Kaliiiiiiiiii-Vinyzu/patchright-python
原实现显式传入 --enable-automation,确实需要移除。提示条是否显示、navigator.webdriver 的值、CDP 暴露特征与平台能否识别自动化不是同一件事。 本次更换内核/驱动并测试相关可观测项,不承诺匿名、不可检测、防封或绕过风控。
上游 fingerprint-chromium 基于 Ungoogled Chromium,最新二进制补丁源码延迟发布。本次使用用户确认的第三方项目发布文件,并验证固定摘要;不把它称为 Google 官方 Chrome,也不声称独立审计了所有补丁。
2. 锁定的运行环境
- fingerprint-chromium:148.0.7778.215,Windows x64。
- Patchright Python:1.62.3,包含其匹配 Node 驱动。
- Python、PySide6/Qt、psutil 等保持现有完整打包方式,无需最终用户自行安装。
浏览器发布文件:
https://github.com/adryfish/fingerprint-chromium/releases/download/148.0.7778.215/ungoogled-chromium_148.0.7778.215-1.1_windows_x64.zip
SHA256 9ef3f471b7a6641b4224532522b29141ce3746e27d55788d88e2fd951f362579
来源、版本、ZIP 根目录与校验值保存于 packaging/fingerprint-browser-lock.json。上游 BSD-3-Clause 许可保存于 packaging/fingerprint-chromium-LICENSE.txt,并进入安装包 licenses。其他浏览器第三方许可可由 chrome://credits 及内附文件查看。
3. 代码变化
浏览器启动与隔离
src/account_browser.py:
- 默认仅使用安装目录
fingerprint-browser/chrome.exe,不回退到系统 Chrome 或 Chrome for Testing。 - 不再传入
--enable-automation。 - 按内部随机账号 ID 派生正 31 位稳定种子,启动时传入
--fingerprint=<seed>。 - 不随重启、UID 查询或归属变化随机轮换种子。不另外伪造平台/UA,不增加代理轮换或跨平台伪装。
- 重连时检查实际命令行的种子与自动化参数;仍核验 PID、创建时间、可执行路径、user-data-dir 及本机端口归属。
- 高级参数不允许覆盖 fingerprint、端口、用户目录、安全隔离等受管项。
同一种子不意味着跨不同硬件/系统的所有指纹值必然完全一致。自定义浏览器路径属于高级用户显式配置;仅文件名不能证明任意自定义二进制属于该项目,默认随包内核则受固定摘要约束。
Patchright 与页面 SDK 上下文
accounts_app.py、cdp_explicit.py、test_browser_matrix.py 改为 patchright.async_api;Windows 构建虚拟环境已卸载旧 Python Playwright 包。
Session.evaluate() 默认使用 Patchright 的隔离上下文。需要调用站点现有全局 SDK、签名 fetch 或通知监听对象时,明确指定 main_world=True,对应 isolated_context=False:
- 登录资料读取;
- 通知安装、等待和释放;
- 关注与详情请求;
- IM SDK 与旧 CLI 业务表达式。
这不是关闭 Patchright 的全部修补,而是明确访问对象所在上下文;不能把所有脚本盲目放进隔离 world,否则读取不到网页实际 SDK。普通不依赖页面全局对象的测试仍使用隔离 world。没有添加额外的手工 stealth JS 补丁。
旧账号与配置
- 新浏览器设置使用
fingerprint_browser/fingerprint_browser:<账号ID>键;旧browser设置保留,但不自动复用旧 Chrome 路径。 - 账号 UID、名称、归属、任务与历史保持不变。
- 按可执行路径隔离登录目录,新内核不会覆盖旧 Chrome 数据或复制 Cookie。
- 已绑定账号的“登录 / 刷新信息”也使用只读观察流程,重登后仍须匹配原 UID。
- 老 Chrome 尚在运行时显示具体原因,不能偷偷接入/强制终止未知进程。升级前应停止业务并关闭旧浏览器。
打包
build_windows.py:
- 收集 Patchright 全部运行数据及 Node 驱动;冒烟报告标识改为
patchright。 - 只允许确认过的项目 HTTPS release 下载源,并检查 ZIP SHA256。
- 将发行包的版本目录展平至
fingerprint-browser/。 - 校验原始 ZIP 文件名、目录穿越、反斜杠、NUL、ADS 冒号及符号链接。
- 特别使用
ZipInfo.orig_filename:Windows 会规范化filename的反斜杠,仅检查规范化结果不符合原始名称拒绝策略。 - 保留中文安装界面、全部运行依赖、许可、构建清单和 SHA256 文件。
- 安装包版本改为 0.1.2,AppId 不变。
4. 测试记录
本地基础与测试发现修复
初始 31 项 unittest 基线通过。新功能增加种子、无系统回退、安全解压、旧配置隔离和 Patchright world 选择覆盖后,unittest 共 35 项通过。
检查编辑器自动 pytest 时发现真实问题:系统 pytest 不在项目虚拟环境,并缺少根目录导入配置。新增 pytest.ini、requirements-test.txt,使用项目 .venv。完整 pytest 还发现两个旧函数式测试仍 mock 已移除的 subprocess.run,已改为实际 evaluate_script 边界。
最终 44 项 pytest 全部通过,包含此前 unittest discover 不会收集的函数式测试。没有把旧配置/收集失败掩盖为“断言通过”。
uv pip install --python .venv/bin/python -r requirements-test.txt
.venv/bin/python -m pytest -q
.venv/bin/python -m unittest discover -s src -q
.venv/bin/python src/test_notifications.py
.venv/bin/python src/test_verify_notification_mark_read.py
配置化 Pyright 最终 0 error / 0 warning。辅助诊断中的旧 follow_user.py 缓存项又用单独 LSP 检查确认干净。
Windows 测试
Windows 构建虚拟环境安装新依赖、卸载旧 Playwright 后:
- 44 项 pytest 通过。
- 首次 Windows 安全解压测试暴露了 ZIP 名称规范化差异,修复验证器和跨平台测试夹具后重跑通过。
- 使用真实随包 fingerprint-chromium、原生 Patchright CDP 的离线矩阵通过。
- 测试临时目录和账号 UID 都是假的;所有目标站点请求被固定响应拦截,没有自动登录、关注、私信或标记已读。
矩阵覆盖包括:
- 多账号独立端口与目录;
- 实际进程参数中无
--enable-automation,且每个账号使用自己的固定 seed; navigator.webdriver为布尔false;- 隔离 world 看不到主 world SDK 夹具;显式主 world 能安装监听、接收消息、清理自己的监听且保留站点已有监听;
- 自有实例重连、错误 UID/多标签拒绝;
- 名称录入后的 UID/资料自动回填且不启动业务;
- 刷新、退出重启、localStorage 持久化;
- 重启后 seed 不变;
- 安全关闭与账号目录删除。
CDP 轨迹验证
仅对上述离线矩阵开启 DEBUG=pw:protocol,没有在真实账号上记录原始协议。
实际观察到 CDP 命令:903
Runtime.callFunctionOn:31
Runtime.enable:0
DOM.enable:0
轨迹包含实际调用,不是空日志。它验证了本次测试路径没有发出这两个 enable 指令,不代表所有未来 SDK 分支或平台检测手段都已覆盖。
Windows 打包与无外部运行时冒烟
- GUI/CLI onedir 与 Inno 中文安装程序构建成功。
- 打包冒烟确认 Qt、SQLite、核心、Patchright 正常,使用安装目录内
fingerprint-browser/chrome.exe。 - 复制到新的中文/空格路径,限制 PATH、提供无效外部 PYTHONHOME / 浏览器路径,仍可成功运行打包冒烟。
- 新包
_internal中没有旧 Pythonplaywright包。 - 账号数为 0、真实写入次数为 0;没有遗留测试 Chrome 进程。
- 全部 21 个本地 Python 源文件摘要与 Windows 构建清单一致。
此处是已有 Windows 机器上的隔离环境测试,不是重装系统、真实多账号写操作或长期风控测试,也没有用截图证明所有未来版本的提示条外观。
5. 发布
仅发布到指定 Windows,未执行产品安装或自动升级:
C:\Users\rogee\Desktop\抖音账号助手-0.1.2\
DouyinAccounts-0.1.2-Windows-x64-Setup.exe
SHA256SUMS.txt
使用说明.txt
安装程序大小:222,672,989 字节。
SHA256 ce24ab16b6d51b5fe31564ef11d139f1ba416e07149309080a7a395ff43c6ce6
旧安装包目录未删除。用户应先停止业务、退出旧程序并关闭旧 Chrome,再安装 0.1.2;新内核中需自己登录原账号,原 UID 绑定、规则和任务保持不变。
6. 可复用构建命令与证据
Windows 源码目录:
py -3.12 -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r requirements-build-windows.txt -r requirements-test.txt
.\.venv\Scripts\python.exe -m pytest -q
.\.venv\Scripts\python.exe build_windows.py
.\.venv\Scripts\python.exe src\test_browser_matrix.py `
--chrome "$PWD\dist\DouyinAccounts\fingerprint-browser\chrome.exe" `
--report "$PWD\browser-matrix-fingerprint.json"
不需要执行 patchright install,也不另行下载其他 Chromium;产品直接使用指定发行版。更新浏览器需修改新锁文件并重新验证,不能自行追随可变 latest URL。
本次 Windows 工作目录 C:\Users\rogee\douyin-pc-build-20260906 保存:
tests-fingerprint.logbrowser-matrix-fingerprint.jsonbrowser-matrix-fingerprint-protocol.jsonfingerprint-protocol.log(仅离线假数据)build-fingerprint.log.build-cache\smoke-packaged.jsonsmoke-fingerprint-isolated.jsondist\DouyinAccounts\build-manifest.jsonrelease\SHA256SUMS.txt
仍待用户验收:安装/升级体验、实际浏览器提示条、真实多账号登录与业务,以及长时间平台行为。指纹内核和 Patchright 不能替代身份校验、行为约束与平台规则。