第一个任务:打开页面、读取结果与关闭
本章使用项目自带 dsb 客户端完成一个只读任务。先按 上一章 启动服务,再在仓库根目录运行命令。
1. 创建任务
python client/dsb.py --id 1001 start --headful
1001 是教学 ID,执行前应确认没有同名任务。实际项目可省略 ID,由服务生成;读取返回的 data.id,后续请求始终使用这个值。Java 侧需要生成业务 ID 时使用 nexus.io.tio.utils.snowflake.SnowflakeIdUtils.id()。
--headful 用于显示浏览器窗口,方便初学者观察;省略时默认无头。检查 ok 和 data.engineHonored,确认创建成功且浏览器选择符合预期。
2. 导航到示例页面
python client/dsb.py --id 1001 run go_to_url -p url=https://example.com
python client/dsb.py --id 1001 state --full
阅读回执里的标题、URL、页签和 data.text。成功的导航不一定意味着页面内容加载完整;遇到动态页面,应按需要等待可观察的元素或状态。
3. 读取正文
python client/dsb.py --id 1001 run extract_structured_data -p extractLinks=true
检查 data.text 是否包含页面正文,并查看 data.links。该命令读取当前主文档的文本和链接;更完整的能力边界见 正文提取。
如果只需要标题:
python client/dsb.py --id 1001 run get_title
4. 理解元素索引
先看 从截图到结构化文本:其中保留了原教程的百度高亮截图,并逐项解释编号、缩进、标签和属性。
页面状态可能出现类似下面的行,具体编号以当次结果为准:
[3]<a >更多信息/>
数字表示本次快照中的元素索引。确认当前页面确实出现目标元素后,才将实际索引传给 click_element_by_index。不要直接复制示例编号去操作另一页面。导航、弹窗、翻页或前端重新渲染后,要重新读取状态。
还应检查 data.indicesUsable 和 data.snapshotConsistent。页面在采集过程中变化时,服务可能返回 ok:true,但将 indicesUsable 标成 false;此时不能继续按该快照的索引操作,应等待目标内容稳定后重取状态。
5. 关闭本任务
python client/dsb.py --id 1001 close
仅关闭自己的任务。任务之间共享浏览器配置和 profile,shutdown 会影响全部任务,不用于普通任务收尾。
对应的 HTTP 请求
客户端会把命令转换成统一 JSON。以导航为例:
{
"id": 1001,
"method": "go_to_url",
"params": {"url": "https://example.com"}
}
发送到 POST http://localhost:10049/playwright/command,请求头为 Content-Type: application/json。所有浏览器控制命令都走这个入口,不根据命令名拼接不同 HTTP 路径。
如何判断成功
- 检查 HTTP 是否可达,再检查响应
ok;HTTP 200 不保证动作成功。 - 读取命令结果,确认当前 URL、文本或字段值符合目标。
- 对会改变页面的动作,结合截图与动作后的页面观察判断。
- CLI 退出码 0 表示成功,1 表示传输或协议问题,2 表示业务失败,3 表示调用用法错误。
