把 AdsPower 多链接重复测试,从逐条慢慢点,变成按轮并行、自动计数、可审计。
指定一个 AdsPower 环境、若干完整链接和轮数;技能会先检查 LocalAPI,再在每一轮同时打开全部链接,等待、关闭,并确认环境回到 Inactive。
用于已获授权的链接可达性和重复稳定性测试,不用于制造流量、广告互动或归因数据。
人工测试多个长链接时,最浪费时间的不是“打开页面”,而是重复处理这些细节:AdsPower 有没有启动、环境号是否正确、多个链接能不能同时测、每一轮是否完整关闭、失败发生在哪个链接、报告会不会泄露查询参数。
这个 Skill 把整套流程固定下来:
- 先检查,再执行:自动探测
127.0.0.1:50325和50326,LocalAPI 不通就停止。 - 环境精确匹配:按
serial_number找环境;环境已在使用时拒绝接管,避免误关现有会话。 - 同轮真并行:一轮内全部链接通过
Promise.all同时打开和等待,不做链接数 × 30 秒的串行排队。 - 完整一轮语义:启动环境 → 并行打开 → 等待 → 关闭页面 → 停止环境 → 回读
Inactive,全部完成才计一轮。 - 默认等待 30 秒:适合加载较慢或需要观察跳转后的页面,也可通过参数调整。
- 失败可定位:保留轮次、链接序号、HTTP 状态或错误;单条失败不会掩盖其余结果。
- 隐私优先:报告只保留脱敏 URL 和短哈希,不保存查询参数值、Cookie、代理凭据或 API Key。
- Claude / Codex 双兼容:标准
SKILL.md加agents/openai.yaml,同一份仓库可被两端识别。
flowchart LR
A["检测 AdsPower LocalAPI"] --> B["精确查找环境号"]
B --> C["启动环境"]
C --> D["同轮并行打开全部链接"]
D --> E["每页等待 30 秒"]
E --> F["关闭页面与环境"]
F --> G{"已回到 Inactive?"}
G -- 是 --> H["计为完整一轮并写入报告"]
G -- 否 --> I["标记本轮不完整"]
H -->|还有轮次| C
一轮的耗时接近“最慢链接的加载时间 + 30 秒 + 环境启动/关闭时间”,而不是所有链接等待时间相加。
2026-07-14 在本地 AdsPower 环境完成了脱敏验收:
| 项目 | 结果 |
|---|---|
| 测试规模 | 6 个链接 × 3 轮 = 18 次导航 |
| 执行方式 | 每轮 6 个链接并行 |
| 页面停留 | 每页 30 秒 |
| 导航结果 | 18 / 18 通过 |
| 完整轮次 | 3 / 3 通过 |
| 环境状态 | 每轮结束后均回读为 Inactive |
| 隐私检查 | 报告未保存原始查询参数值 |
这是一条单机验收记录,不代表所有网络、代理或目标站点都会得到相同结果。
克隆一次,同时链接给 Codex 和 Claude:
git clone https://github.com/yuanyuanyuan430/ganhuo-adspower-budianji.git "$HOME/ganhuo-adspower-budianji"
mkdir -p "$HOME/.codex/skills" "$HOME/.claude/skills"
ln -s "$HOME/ganhuo-adspower-budianji" "$HOME/.codex/skills/ganhuo-adspower-budianji"
ln -s "$HOME/ganhuo-adspower-budianji" "$HOME/.claude/skills/ganhuo-adspower-budianji"也可以从 Releases 下载 ganhuo-adspower-budianji.skill。
使用 $ganhuo-adspower-budianji。
先检测 AdsPower LocalAPI;用环境号 1001 测试下面 3 个完整链接,共跑 5 轮。
每一轮同时打开全部链接,每页等待 30 秒;全部页面关闭且环境回到 Inactive 才算一轮。
https://example.com/a?case=one
https://example.com/b?case=two
https://example.com/c?case=three
更多可直接复制的中文和英文用法见 PROMPTS.md。
先 dry-run,确认 LocalAPI、环境号、链接数和轮数:
node scripts/run.mjs \
--profile-no 1001 \
--rounds 3 \
--url 'https://example.com/a?case=one' \
--url 'https://example.com/b?case=two' \
--dry-run \
--json确认无误后执行:
node scripts/run.mjs \
--profile-no 1001 \
--rounds 3 \
--url 'https://example.com/a?case=one' \
--url 'https://example.com/b?case=two' \
--execute \
--json| 参数 | 必填 | 默认值 | 说明 |
|---|---|---|---|
--profile-no |
是 | — | AdsPower 环境号,即 serial_number |
--url |
是 | — | 完整 URL;可重复传入多个,原样保留 |
--rounds |
是 | 1 |
完整测试轮数,范围 1–1000 |
--dry-run / --execute |
是 | dry-run 语义 | 只检查计划,或真实执行 |
--settle-ms |
否 | 30000 |
每个并行页面加载后的停留时间 |
--navigation-timeout-ms |
否 | 30000 |
单链接导航超时 |
--between-rounds-ms |
否 | 1500 |
两轮之间的间隔 |
--api |
否 | 自动探测 | 指定 AdsPower LocalAPI 地址 |
--report-dir |
否 | .adspower-safe-reports |
本地 JSON 报告目录 |
如 LocalAPI 开启鉴权,通过环境变量 ADSPOWER_API_KEY 提供密钥;不要把密钥写进命令或仓库。
- Node.js 18 或更高版本
- 已启动并允许 LocalAPI 的 AdsPower
- 本机可用的 Playwright;找不到时可设置
PLAYWRIGHT_NODE_MODULES - 目标 AdsPower 环境必须处于
Inactive - 你有权访问并重复测试目标链接
每次 dry-run 或执行都会生成权限为 0600 的 JSON 报告,包括:
- LocalAPI 连接结果和实际地址
- 环境号、链接数、轮数、计划导航次数
parallel_per_round执行模式和并行标签页数- 完整轮数、成功轮数、失败轮数
- 失败项的轮次、链接序号、状态或错误
- URL 路径、脱敏查询标记和短哈希
查询参数值、Cookie、代理凭据和 API Key 不会写入报告。公开提交 Issue 前,仍请自行检查并删除环境名称、环境 ID 和本地路径。
node scripts/run.mjs --self-test自检覆盖 URL 校验、查询参数脱敏、轮数计算、同轮并行、30 秒默认值和 API 地址拼接,不会启动 AdsPower 环境。
SKILL.md # Claude / Agent 技能说明
agents/openai.yaml # Codex 展示与默认调用信息
scripts/run.mjs # LocalAPI + Playwright 执行器
evals/evals.json # 触发与行为评测样例
examples/ # 安全、可复制的演示
dist/ganhuo-adspower-budianji.skill
PROMPTS.md # 中英文复制即用 Prompt
llms.txt / llms-full.txt # AI 可读项目入口
为什么不接管已经打开的环境?
脚本每一轮都会停止环境。接管已有会话可能误关你正在使用的浏览器,所以检测到 Active 会立即停止。
10 个链接会等待 10 × 30 秒吗?
不会。同一轮中的链接并行打开和等待;只有轮次之间是顺序执行,以保证每轮都有独立的启动、关闭和状态验证。
链接失败会自动重试到成功吗?
不会用重试掩盖失败率。单条失败会被记录,其余链接和后续轮次继续执行;LocalAPI 的短暂限频会做有限重试。
欢迎提交 Issue 和 Pull Request。请先阅读 CONTRIBUTING.md 与 SECURITY.md,不要提交真实追踪链接、Cookie、代理凭据、API Key 或未经脱敏的报告。
如果这个项目替你省下了重复测试时间,欢迎点一个 Star,也欢迎把它分享给同样在做 AdsPower 自动化测试的人。