跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
JavaScriptNode.jsAI大前端

OpenClaw 浏览器自动化实战:让 AI 模拟人类操作网页

OpenClaw 的 browser 工具支持多种连接模式,包括内置浏览器、CDP 及扩展插件,使 AI 能像人一样点击、输入和截图。通过 navigate、snapshot 和 evaluate 组合,可绕过 API 直接抓取网页数据,如微博热搜或 B 站榜单。实战中需注意反爬机制、动态加载等待及登录态保持。调试时利用快照和截图定位问题,结合超时设置提升稳定性。适合需要复杂交互或无 API 接口的自动化场景。

草莓泡芙发布于 2026/4/10更新于 2026/7/2337 浏览
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 浏览器,通过调试端口控制。启动时加上调试端口即可:

# 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 URL
cdpUrl:
ws://your-server:9222

选择建议:

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

快速上手:不依赖 API 的数据抓取

我们用浏览器自动化的思路,改造之前的热榜查询,不再依赖外部 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,直接操作网页。

实战:自动获取微博热搜

方案对比

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

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

适用场景:

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

编写 Skill

下面演示如何用 browser 获取微博热搜,作为入门案例。

---
name: weibo_hot_browser
description: 获取微博热搜榜单,了解最新热点话题(浏览器方式)
---
# 微博热搜查询(browser 版)

## 什么时候触发
- 用户问 "微博热搜"
- 用户说 "今天有什么热点"
- 用户说 "帮我看看微博"

## 如何执行

### 访问微博热搜
使用 `browser.navigate` 打开:
```text
https://s.weibo.com/top/summary

等待页面加载

页面是动态渲染的,需要等待热搜榜加载完成。使用 browser.snapshot 查看当前页面状态。如果页面还没加载完成,继续等待或刷新。

提取数据

使用 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}`
})

格式化输出

🔥 微博热搜榜

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

注意事项:

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

测试时,用户输入'帮我看看微博热搜',AI 将依次执行导航、快照、JS 评估并输出结果。

## 进阶:多步骤自动化

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

### 案例:自动登录知乎

```yaml
---
name: zhihu_login
description: 自动登录知乎(需要提供账号密码)
---
# 知乎自动登录

## 触发场景
用户说 "帮我登录知乎"、"登录我的知乎账号"

## 执行步骤

### 打开知乎登录页
```javascript
await browser.navigate('https://www.zhihu.com/signin')
await browser.snapshot()

输入用户名

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

点击获取验证码

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

等待用户输入验证码

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

完成登录

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

注意:

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

进阶:数据提取与保存

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

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

---
name: bilibili_trend
description: 获取 B 站热门视频排行榜
---
# B 站热门榜查询

## 触发场景
- 用户问 "B 站热门"
- 用户说 "今天 B 站什么视频火"
- 用户说 "帮我看看哔哩哔哩排行榜"

## 执行步骤

### 访问 B 站排行榜
```javascript
await browser.navigate('https://www.bilibili.com/v/popular/rank/all')
await browser.snapshot()

等待内容加载

B 站是 SPA(单页应用),需要等待视频列表渲染。检查是否有多于 0 个视频元素,如果有则继续。

提取数据

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 }
  })
})

格式化输出

📺 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)

保存数据(可选)

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

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

注意事项:

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

调试技巧

查看页面快照

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

输出会包含当前 URL、页面标题、所有可点击的按钮链接、输入框及图片信息。

截图 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
}

等待技巧

// 等待元素出现(最多等 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 看页面结构,检查选择器是否正确。很多网站动态生成 class,可能需要用其他选择器:

await browser.click('text=登录') // 用文本选择器
await browser.click('[aria-label="搜索"]') // 用 aria 属性

Q3: 被反爬了怎么办? 设置 User-Agent 或使用 stealth 模式:

await browser.extra.setExtraHTTPHeaders({
  'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64) ...'
})

注意:频繁访问仍然可能被限制。

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 的关键一环。

目录

  1. OpenClaw 浏览器自动化实战:让 AI 模拟人类操作网页
  2. 前言
  3. browser 工具概览
  4. 1. 内置浏览器(默认)
  5. 2. CDP 模式(Chrome DevTools Protocol)
  6. macOS
  7. Windows
  8. Linux
  9. 3. 浏览器扩展插件模式
  10. 4. 远程浏览器服务
  11. 或通过 CDP URL
  12. 快速上手:不依赖 API 的数据抓取
  13. 实战:自动获取微博热搜
  14. 方案对比
  15. 编写 Skill
  16. 微博热搜查询(browser 版)
  17. 什么时候触发
  18. 如何执行
  19. 访问微博热搜
  20. 等待页面加载
  21. 提取数据
  22. 格式化输出
  23. 进阶:多步骤自动化
  24. 案例:自动登录知乎
  25. 知乎自动登录
  26. 触发场景
  27. 执行步骤
  28. 打开知乎登录页
  29. 输入用户名
  30. 点击获取验证码
  31. 等待用户输入验证码
  32. 完成登录
  33. 进阶:数据提取与保存
  34. 案例:定期抓取 B 站热门视频
  35. B 站热门榜查询
  36. 触发场景
  37. 执行步骤
  38. 访问 B 站排行榜
  39. 等待内容加载
  40. 提取数据
  41. 格式化输出
  42. 保存数据(可选)
  43. 调试技巧
  44. 查看页面快照
  45. 截图 Debug
  46. 等待技巧
  47. 常见问题
  48. 总结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 8 款实用 AI 绘画工具推荐:从 Midjourney 到 Stable Diffusion
  • OpenCode 接入 Kimi K2.5 配置与实战指南
  • Windows 环境下 OpenClaw 接入飞书机器人配置指南
  • 2021 年 CSP-S 信奥赛 C++ 提高组阅读程序题解析
  • Java 实现 PDF 文字与图片水印添加及 MinIO 下载实战
  • FileSaver.js 实战解析:前端文件下载通用方案
  • Ollama 下载模型太慢?试试国内 HuggingFace 镜像与 LLama-Factory 组合
  • MCP Server 实现 Excel 表格一键生成可视化图表 HTML 报告
  • C++ 类与对象:封装特性的实现与实战应用
  • OpenClaw 配置与 QQ Bot 接入指南
  • Transformer 20 个常见面试问题解析:从基础到高级
  • AI 机器人安全私信访问机制:Secure DM Pairing 实现原理
  • OpenClaw 系列:16 款 AI Agent 工具选型指南
  • C++ 智能指针详解:原理、实现与使用场景
  • GitHub 第 10 亿个仓库名为 shit,官方祝贺创造伟大屎
  • 三年销售助理转行软件测试工程师的求职经历与心得
  • 大模型分布式训练与高效调参技术实战
  • WebApp 开发结构化方法:交互、功能与导航三大核心模型
  • 零样本分类 WebUI 操作指南与结果可视化
  • Python 知识图谱分析:NetworkX 库使用指南

相关免费在线工具

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online