OpenClaw进阶篇:浏览器自动化——让AI帮你操作网页

OpenClaw进阶篇:浏览器自动化——让AI帮你操作网页

OpenClaw进阶篇:浏览器自动化——让AI帮你操作网页

前言

上篇我们写了自定义Skill,发现核心是Prompt模板

但Skill只是告诉AI"怎么做",真正执行还需要Tool

今天讲一个强大的Tool:browser

它让AI能像人一样操作浏览器——点击、输入、截图、执行JS。


一、browser工具是什么

OpenClaw的browser工具提供了三种连接模式

1. 内置浏览器(默认)

OpenClaw自带Playwright浏览器,AI可以直接调用:

功能说明示例
navigate打开网页访问百度、知乎
snapshot获取页面快照了解当前页面状态
screenshot截图保留证据
click点击元素登录、搜索、提交
type输入文字填表单、发评论
evaluate执行JS提取数据、计算
select下拉选择选择日期、分类
hover悬停显示隐藏菜单

特点:开箱即用,适合大多数场景。

2. CDP模式(Chrome DevTools Protocol)

连接你已有的Chrome浏览器,通过调试端口控制:

// 启动Chrome时加上调试端口// macOS:/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222// Windows:"C:\Program Files\Google\Chrome\Application\chrome.exe"--remote-debugging-port=9222// Linux: google-chrome --remote-debugging-port=9222

然后在OpenClaw配置中指定:

browser:remoteUrl: http://localhost:9222

优势

  • 保持登录状态(Cookie、Session持久化)
  • 可以用已有浏览器,不额外占用资源
  • 支持多个标签页

3. 浏览器扩展插件模式

安装OpenClaw的Chrome扩展,可以:

  • 控制已打开的标签页
  • 获取浏览器历史、书签
  • 在用户当前浏览上下文中执行

适合需要「接管用户当前页面」的场景。

4. 远程浏览器服务

通过CDP协议连接远程服务器上的浏览器:

browser:node: your-remote-server # 指定远程节点# 或通过CDP URLcdpUrl: ws://your-server:9222

适合服务器环境或需要更高隔离性的场景。


核心能力:让AI像人一样操作网页。

选择建议

  • 个人使用、日常任务 → 内置浏览器
  • 需要保持登录态 → CDP模式
  • 需要接管用户当前页 → 扩展插件
  • 服务器批量任务 → 远程浏览器

二、先看个例子

我们用浏览器自动化的思路,改造之前的热榜查询:

// 不再依赖外部API,直接爬取const result =await browser.navigate('https://weibo.com/hot')// 获取快照了解页面结构const page =await browser.snapshot()// 提取热搜标题const titles =await browser.evaluate(()=>{return[...document.querySelectorAll('.hot-item .title')].map(el=> el.innerText).slice(0,10)})// 输出结果 console.log(titles)

这就是浏览器自动化的威力——不依赖API,直接操作网页。


三、实战:自动获取微博热搜

3.1 两种方式的对比

获取微博热搜有两种方式:

方式优点缺点
API调用速度快、代码简单、无反爬问题需要依赖第三方服务、可能有频率限制
浏览器自动化数据完整、可获取任意页面、无需API Key速度较慢、需要处理反爬、占用资源

各自适用场景:

  • 定时任务、批量获取 → 用API(省资源)
  • 获取详细内容、分析页面 → 用浏览器(更灵活)

3.2 用浏览器自动化的场景

什么时候适合用browser工具?

  1. API不支持的数据:比如你想获取热搜的详细讨论、评论数等
  2. 需要登录才能看到:比如知乎的关注者列表
  3. 网页结构复杂:API返回的数据格式不够用

本节示例:演示如何用browser获取微博热搜(作为browser工具的入门案例)

3.3 编写Skill

---name: weibo_hot_browser description: 获取微博热搜榜单,了解最新热点话题(浏览器方式) ---# 微博热搜查询(browser版)## 什么时候触发- 用户问"微博热搜" - 用户说"今天有什么热点" - 用户说"帮我看看微博" ## 如何执行### 第1步:访问微博热搜 使用 `browser.navigate` 打开: ```text https://s.weibo.com/top/summary 

第2步:等待页面加载

页面是动态渲染的,需要等待热搜榜加载完成。
使用 browser.snapshot 查看当前页面状态。

如果页面还没加载完成,继续等待或刷新。

第3步:提取数据

使用 browser.evaluate 执行JS获取热搜列表:

const items = document.querySelectorAll('.c-table tbody tr')return[...items].slice(0,15).map(item=>{const rank = item.querySelector('.td-01').innerText const title = item.querySelector('.td-02 a').innerText const hot = item.querySelector('.td-02 span')?.innerText ||''return`${rank}. ${title}${hot}`})

第4步:格式化输出

🔥 微博热搜榜 1. xxx(热度过万) 2. xxx(热度8000) ... 数据来源:微博 | 时间:xxx 

注意事项

  • 微博有反爬机制,可能需要登录
  • 如果访问失败,尝试直接访问移动版:https://m.weibo.cn
  • 返回结果要包含排名、标题、热度

3.4 测试

用户:帮我看看微博热搜 AI: → browser.navigate('https://s.weibo.com/top/summary') → browser.snapshot() → browser.evaluate(...) → 格式化输出 

四、进阶:多步骤自动化

browser工具的真正威力在于多步骤串联

4.1 案例:自动登录知乎

---name: zhihu_login description: 自动登录知乎(需要提供账号密码) ---# 知乎自动登录## 触发场景 用户说"帮我登录知乎"、"登录我的知乎账号" ## 执行步骤### 第1步:打开知乎登录页 ```javascript await browser.navigate('https://www.zhihu.com/signin') await browser.snapshot() 

第2步:输入用户名

await browser.click('[name="username"]')await browser.type('[name="username"]','你的手机号')

第3步:点击获取验证码

await browser.click('.SignFlow-tab')await browser.click('.SignFlow-sendInput-button')

第4步:等待用户输入验证码

AI应该提示用户:验证码已发送到手机,请在30秒内输入。

第5步:完成登录

// 用户手动输入验证码后await browser.click('.SignFlow-submitButton')await browser.snapshot()// 验证是否登录成功

注意

  • 这个Skill需要用户配合(输入验证码)
  • 不能自动跳过验证码,这是安全机制
  • 登录状态会保持,直到退出或过期

五、进阶:数据提取与保存

浏览器自动化最强大的场景之一:提取网页数据并保存

5.1 案例:定期抓取B站热门视频

---name: bilibili_trend description: 获取B站热门视频排行榜 ---# B站热门榜查询## 触发场景- 用户问"B站热门" - 用户说"今天B站什么视频火" - 用户说"帮我看看哔哩哔哩排行榜" ## 执行步骤### 第1步:访问B站排行榜 ```javascript await browser.navigate('https://www.bilibili.com/v/popular/rank/all') await browser.snapshot() 

第2步:等待内容加载

B站是SPA(单页应用),需要等待视频列表渲染。

检查是否有多于0个视频元素,如果有则继续。

第3步:提取数据

const videos =await browser.evaluate(()=>{return[...document.querySelectorAll('.video-item')].slice(0,20).map(item=>{const title = item.querySelector('.title').innerText const author = item.querySelector('.author').innerText const play = item.querySelector('.play').innerText const like = item.querySelector('.like').innerText return{ title, author, play, like }})})

第4步:格式化输出

📺 B站热门榜 🥇 {videos[0].title} UP主:{videos[0].author} | 播放:{videos[0].play} | 点赞:{videos[0].like} 🥈 {videos[1].title} UP主:{videos[1].author} | 播放:{videos[1].play} | 点赞:{videos[1].like} ...(展示前10) 

第5步:保存数据(可选)

如果用户要求"每天定时发送",可以将数据保存到文件或数据库。

// 保存为JSONconst fs =require('fs')const data ={date:newDate().toISOString(),platform:'bilibili',videos: videos } fs.writeFileSync('/tmp/bilibili-trend.json',JSON.stringify(data,null,2))

注意事项

  • B站有反爬限制,频繁访问可能需要登录
  • 排行榜每2小时更新一次
  • 视频标题可能包含emoji,需要清理

六、调试技巧

6.1 查看页面快照

// 获取当前页面所有可交互元素const snapshot =await browser.snapshot() console.log(JSON.stringify(snapshot,null,2))

输出会包含:

  • 当前URL
  • 页面标题
  • 所有可点击的按钮、链接
  • 所有输入框
  • 所有图片(用于验证截图)

6.2 截图debug

// 在关键步骤截图await browser.screenshot({path:'/tmp/step1.png'})// 出现问题时截图try{await browser.click('.login-button')}catch(e){await browser.screenshot({path:'/tmp/error.png'})throw e }

6.3 等待技巧

// 等待元素出现(最多等10秒)await browser.waitForSelector('.hot-list',{timeout:10000})// 等待页面加载完成await browser.waitForLoadState('networkidle')// 等待某个条件await browser.waitForFunction(()=>{return document.querySelectorAll('.item').length >0})

七、常见问题

Q1: 页面加载慢怎么办?

// 增加超时时间await browser.navigate('https://example.com',{waitUntil:'networkidle',// 等待网络空闲timeout:30000// 30秒超时})

Q2: 元素找不到?

// 先用snapshot看页面结构const page =await browser.snapshot()// 检查选择器是否正确// 注意:很多网站动态生成class,可能需要用其他选择器await browser.click('text=登录')// 用文本选择器await browser.click('[aria-label="搜索"]')// 用aria属性

Q3: 被反爬了怎么办?

// 设置User-Agentawait browser.extra.setExtraHTTPHeaders({'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64) ...'})// 或者用stealth模式// 注意:频繁访问仍然可能被限制

Q4: 登录状态如何保持?

// 保存浏览器上下文await browser.contexts[0].storageState({path:'/tmp/zhihu-state.json'})// 下次使用时恢复await browser.newContext({storageState:'/tmp/zhihu-state.json'})

八、总结

今天我们学会了:

  • ✅ browser工具是什么(操作浏览器的瑞士军刀)
  • ✅ 如何用navigate + snapshot + evaluate组合抓取数据
  • ✅ 编写微博热搜、B站热门等Skill
  • ✅ 多步骤自动化(登录、填表、提交)
  • ✅ 调试技巧(snapshot、screenshot、wait)

更多内容

如果你对AI开发、Agent实战感兴趣,欢迎关注公众号【码头码农】:

  • 每日AI热点解读
  • 实战项目复盘
  • 技术成长心得

Read more

【全网最全的的本地部署Code Agent攻略参考】跃阶星辰AI开源Step-3.5-Flash

【全网最全的的本地部署Code Agent攻略参考】跃阶星辰AI开源Step-3.5-Flash

1. 简介 Step 3.5 Flash(访问官网)是我们目前最强大的开源基础模型,专为提供前沿推理与智能体能力而设计,同时具备卓越的效率。基于稀疏混合专家(MoE)架构,它每处理一个token仅激活1960亿参数中的110亿。这种"智能密度"使其推理深度可比肩顶级闭源模型,同时保持实时交互所需的敏捷性。 2. 核心能力 * 高速深度推理:聊天机器人擅长阅读,而智能体必须快速推理。通过三路多token预测(MTP-3)技术,Step 3.5 Flash在典型使用场景中实现100-300 tok/s的生成吞吐量(单流编码任务峰值达350 tok/s),能即时响应复杂的多步推理链条。 * 编码与智能体的强力引擎:Step 3.5 Flash专为智能体任务打造,集成可扩展的强化学习框架驱动持续自我进化。其SWE-bench Verified通过率74.4%,Terminal-Bench 2.0通过率51.

斯坦福HAI官网完整版《2025 AI Index Report》全面解读

斯坦福HAI官网完整版《2025 AI Index Report》全面解读

一、这份报告真正想说什么 如果把整份《2025 AI Index Report》压缩成一句话,我会这样概括:AI 已经从“技术突破期”进入“系统扩散期”。它一边继续提升性能,一边迅速降本、普及、商业化、制度化;与此同时,风险事件、治理压力、数据约束、社会信任问题也同步上升。换句话说,2025年的AI不是“更神奇了”这么简单,而是开始变成一种会重塑产业结构、教育体系、监管逻辑和公众心理预期的基础能力。这个判断基本贯穿斯坦福官网总览页的 12 条结论与各章节摘要。(斯坦福人工智能研究所) 斯坦福自己对AI Index的定位也很明确:它不是某家公司的宣传册,也不是对未来的主观想象,而是一个收集、整理、浓缩并可视化 AI 数据趋势的观测框架,目的是为政策制定者、研究者、企业与公众提供更全面、客观的判断基础。也正因为如此,这份报告最重要的价值,

Stable Diffusion实战:如何用英文提示词精准生成老虎图像

快速体验 在开始今天关于 Stable Diffusion实战:如何用英文提示词精准生成老虎图像 的探讨之前,我想先分享一个最近让我觉得很有意思的全栈技术挑战。 我们常说 AI 是未来,但作为开发者,如何将大模型(LLM)真正落地为一个低延迟、可交互的实时系统,而不仅仅是调个 API? 这里有一个非常硬核的动手实验:基于火山引擎豆包大模型,从零搭建一个实时语音通话应用。它不是简单的问答,而是需要你亲手打通 ASR(语音识别)→ LLM(大脑思考)→ TTS(语音合成)的完整 WebSocket 链路。对于想要掌握 AI 原生应用架构的同学来说,这是个绝佳的练手项目。 从0到1构建生产级别应用,脱离Demo,点击打开 从0打造个人豆包实时通话AI动手实验 Stable Diffusion实战:如何用英文提示词精准生成老虎图像 在AI绘画领域,提示词(prompt)就像魔法咒语,决定了最终图像的品质和风格。作为开发者,我们常常遇到生成的图像与预期不符的情况——要么细节粗糙,