任务 ID: task-wf027  |  文件: task.md  |  最后修改: 2026-02-23 23:45:42

Task task-wf027 — web_fetch.py Playwright JS 渲染支持

文件路径

原始需求

升级 /root/.openclaw/workspace/scripts/web_fetch.py,加入 --js flag,触发时用 Playwright headless Chromium 渲染页面,处理 JS 动态页面。

现状:web_fetch.py 已支持 requests 直连 + SOCKS5 代理轮换(50003→50002→50001)+ readability 提取。

目标:加 --js flag,触发时按需启动 Playwright headless Chromium,渲染完整 HTML 后用 readability 提取正文,其余行为不变。

执行链

coder → reviewer → 爱衣质检


各 Agent 职责


Ai.Dev(session key: agent:coder:main

任务:升级 web_fetch.py,实现 --js flag 的 Playwright 支持

具体要求:

  1. 依赖安装(在执行前先确认是否已安装,未安装则安装):
    bash pip install playwright --break-system-packages playwright install chromium # 下载专用版本 ~300MB,放 ~/.cache/ms-playwright/

  2. 实现 --js flag,修改 web_fetch.py:

  3. --js:跳过 requests,直接用 Playwright 启动 Chromium(--no-sandbox,root 必须),wait_until="networkidle",获取完整渲染 HTML,再用 readability 提取
  4. 代理支持:若同时有 --proxy,通过 browser.new_context(proxy={"server": "socks5://127.0.0.1:50003"}) 传入,按 PROXIES 列表轮换
  5. --js:现有行为完全不变

  6. 关键实现细节

  7. Playwright 每次按需启动/关闭(不做常���),冷启动 3-5s 可接受
  8. --no-sandbox 是 root 用户运行 Chromium 的必要参数,通过 launch(args=["--no-sandbox"]) 传入
  9. Playwright 代理用 Context 级别:browser.new_context(proxy={...}),不是 Browser 级别
  10. 代理轮换逻辑同现有 requests 部分,失败换下一个

  11. 测试验证(写入 session.md):

  12. 测试静态页面(无 --js):确保现有功能不受影响
  13. 测试 --js 抓一个 JS 渲染页面(如 https://example.com 验证能拿到内容)
  14. 记录每个测试的命令和结果

开始时:
1. 发工作日志:
bash /root/.openclaw/workspace/scripts/log-to-channel.sh coder receive "web_fetch Playwright升级" task-wf027

完成后:
1. 将执行日志追加到 session.md
2. 发工作日志:
bash /root/.openclaw/workspace/scripts/log-to-channel.sh coder handoff "web_fetch Playwright升级" reviewer task-wf027
3. sessions_send 通知 reviewer(agent:reviewer:main):
task_id=task-wf027 task=/root/.openclaw/workspace/tasks/task-wf027/task.md


Ai.Rev(session key: agent:reviewer:main

任务:审计 web_fetch.py 的 Playwright 实现质量

审计要点:
1. --js--proxy 组合是否都正确处理(4种组合:无/无、有/无、无/有、有/有)
2. --no-sandbox 是否传给 Playwright
3. 代理是否用 Context 级别传入(不是 Browser 级别)
4. 现有 requests 逻辑是否完好(无 --js 时行为不变)
5. 异常处理:Playwright 失败时是否有合理的错误输出
6. 依赖安装方式是否合理(--break-system-packages 或虚拟环境)

完成后:
1. 将审计报告追加到 session.md
2. 发工作日志:
bash /root/.openclaw/workspace/scripts/log-to-channel.sh reviewer handoff "web_fetch Playwright升级" main task-wf027
3. sessions_send 通知爱衣(agent:main:main):
task_id=task-wf027 task=/root/.openclaw/workspace/tasks/task-wf027/task.md


⚠️ 爱衣质检 SOP(收到最终通知后执行)

Step 1:评估工作区大小

du -sb /root/.openclaw/workspace/tasks/task-wf027/

Step 2:读取 session.md

wc -l /root/.openclaw/workspace/tasks/task-wf027/session.md

若行数 N > 0,read session.md 全文。

Step 3:质检要点

通用检查(每次必须):
- 产出是否符合原始需求?
- 执行过程是否有明显问题?
- Agent 间是否有未解决的分歧?

任务特定检查:
- --js flag 是否实现,静态页面现有功能是否完好
- Playwright 安装是否成功,测试是否通过
- 审计发现的问题是否已修复

Step 4:输出结论

通过

  1. 发工作日志:
    bash /root/.openclaw/workspace/scripts/log-to-channel.sh main done "web_fetch Playwright升级" task-wf027
  2. message 工具发送给主人(telegram, 92763607),归纳任务结果
    ⚠️ 必须调用 message 工具,不能只在主对话回复

不通过(rejectCount == 0)
1. 分析问题根因,设计新执行链
2. 创建新的 task.md(task_id 加后缀 -retry1),session.md 独立
3. 在原 session.md 末尾追加一行 rejectCount=1
4. sessions_send 给新执行链起始 Agent
5. 发工作日志:
bash /root/.openclaw/workspace/scripts/log-to-channel.sh main retry "web_fetch Playwright升级" "<新执行链>" <起始role> 1 task-wf027

rejectCount >= 1(第二次仍失败)
1. 发工作日志:
bash /root/.openclaw/workspace/scripts/log-to-channel.sh main fail "web_fetch Playwright升级" task-wf027
2. message 主人,归纳问题和两次失败原因,请主人裁决

超限处理(工作区 > 80KB)

  1. 仅读 task.md(了解需求)
  2. 读 session.md 末尾 200 行:
    bash wc -l /root/.openclaw/workspace/tasks/task-wf027/session.md # 获取总行数 N # 然后 read offset=max(1, N-200) limit=200
  3. message 主人:任务已完成,但工作区内容繁多(XXkB),建议人工审计,附简单归纳