当前位置: 首页 > news >正文

OpenClaw浏览器自动化实战:从零写一个网页监控机器人

前言

你有没有遇到过这种情况:

想蹲一个限时抢购、想等某个网页更新、想监控价格变化……但总不能24小时盯着屏幕。

你需要一个浏览器自动化机器人。

今天,我们用开源工具 OpenClaw(热榜第一的项目)手把手搭建一个网页监控机器人,彻底搞懂:

· 浏览器自动化的工作原理
· 如何让程序像人一样操作网页
· 怎么把监控结果推送到微信/钉钉

---

一、OpenClaw是什么?

OpenClaw 是一个浏览器自动化框架,可以:

· 模拟真实用户点击、输入、滚动
· 抓取动态网页内容(包括AJAX加载的数据)
· 执行JavaScript代码
· 截图、录屏、保存HTML

它的底层用的是 Playwright(微软出品),比传统的Selenium更快、更稳。

核心原理

```
你的代码 → OpenClaw API → Playwright → 浏览器驱动 → 真实浏览器

执行操作、返回结果
```

---

二、快速上手:安装与第一个脚本

1. 安装OpenClaw

```bash
# 安装Python包
pip install openclaw

# 安装浏览器驱动
playwright install chromium
```

2. 第一个脚本:打开百度并截图

```python
from openclaw import Browser

# 启动浏览器
browser = Browser(headless=False) # headless=False 可以看到浏览器界面

# 打开网页
page = browser.new_page()
page.goto("https://www.baidu.com")

# 输入关键词
page.fill("#kw", "OpenClaw")

# 点击搜索按钮
page.click("#su")

# 等待结果加载
page.wait_for_selector(".result")

# 截图
page.screenshot("baidu_result.png")

# 关闭
browser.close()
```

运行:

```bash
python baidu_search.py
```

你会看到一个浏览器窗口自动打开、输入、搜索、截图,然后关闭。

---

三、实战案例:网页监控机器人

场景需求

监控某个商品页面的价格变化,当价格低于阈值时发送通知。

完整代码

```python
import time
import json
import requests
from openclaw import Browser
from datetime import datetime

class WebMonitor:
def __init__(self, url, check_interval=60):
self.url = url
self.interval = check_interval
self.last_price = None
self.last_html_hash = None

def get_page_content(self):
"""获取页面内容"""
browser = Browser(headless=True) # 后台运行
page = browser.new_page()

try:
page.goto(self.url, timeout=30000)
page.wait_for_load_state("networkidle")

# 获取HTML
html = page.content()

# 获取价格(需要根据实际网页调整选择器)
price_element = page.query_selector(".price, .current-price, [data-price]")
price = None
if price_element:
price_text = price_element.text()
# 提取数字
import re
match = re.search(r'[\d\.]+', price_text)
if match:
price = float(match.group())

# 截图保存
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
page.screenshot(f"screenshots/{timestamp}.png")

return html, price

except Exception as e:
print(f"抓取失败: {e}")
return None, None
finally:
browser.close()

def calculate_hash(self, content):
"""计算HTML哈希,用于检测变化"""
import hashlib
return hashlib.md5(content.encode()).hexdigest()

def send_notification(self, message):
"""发送通知(支持多种渠道)"""
# 方式1:打印到控制台
print(f"[{datetime.now()}] {message}")

# 方式2:发送到钉钉机器人
webhook_url = "https://oapi.dingtalk.com/robot/send?access_token=YOUR_TOKEN"
headers = {"Content-Type": "application/json"}
data = {
"msgtype": "text",
"text": {"content": message}
}
try:
requests.post(webhook_url, json=data, headers=headers, timeout=5)
except:
pass

# 方式3:发送到Server酱(微信)
# https://sct.ftqq.com/

def check_and_notify(self):
"""检查并通知变化"""
content, price = self.get_page_content()

if not content:
return

current_hash = self.calculate_hash(content)

# 检测内容变化
if self.last_html_hash and current_hash != self.last_html_hash:
self.send_notification(f"🔔 网页内容更新了! {self.url}")

# 检测价格变化
if price is not None:
if self.last_price is not None and price != self.last_price:
direction = "⬇️ 降" if price < self.last_price else "⬆️ 涨"
self.send_notification(
f"💰 价格变化 {direction}了!\n"
f"原价: {self.last_price}\n"
f"现价: {price}\n"
f"链接: {self.url}"
)

# 价格低于阈值告警
if price < 100: # 阈值可配置
self.send_notification(
f"🎉 价格低于100元了!当前价格: {price}\n"
f"快去下单: {self.url}"
)

self.last_html_hash = current_hash
self.last_price = price

print(f"[{datetime.now()}] 检查完成, 价格: {price}")

def run(self):
"""持续运行"""
print(f"开始监控: {self.url}")
print(f"检查间隔: {self.interval} 秒")

# 创建截图目录
import os
os.makedirs("screenshots", exist_ok=True)

while True:
try:
self.check_and_notify()
except Exception as e:
print(f"错误: {e}")

time.sleep(self.interval)

# 使用示例
if __name__ == "__main__":
# 监控商品页面
monitor = WebMonitor(
url="https://example.com/product/12345",
check_interval=300 # 每5分钟检查一次
)
monitor.run()
```

---

四、高级技巧:处理复杂场景

1. 等待元素出现(处理动态加载)

```python
# 等待特定元素出现(最多10秒)
try:
page.wait_for_selector(".product-detail", timeout=10000)
print("商品详情已加载")
except:
print("加载超时")
```

2. 执行JavaScript(获取隐藏数据)

```python
# 执行JS并获取返回值
result = page.evaluate("""
() => {
return {
title: document.title,
scrollHeight: document.body.scrollHeight,
cookies: document.cookie
};
}
""")
print(result)
```

3. 模拟登录(保存登录状态)

```python
# 第一次:手动登录
browser = Browser(headless=False)
page = browser.new_page()
page.goto("https://example.com/login")

# 等待用户手动输入账号密码
input("请登录后按回车继续...")

# 保存cookies
cookies = page.context.cookies()
with open("cookies.json", "w") as f:
json.dump(cookies, f)

# 后续:加载cookies自动登录
browser2 = Browser()
context = browser2.new_context()
context.add_cookies(cookies)
page = context.new_page()
page.goto("https://example.com/dashboard")
```

4. 处理验证码(接入打码平台)

```python
# 截图验证码区域
captcha_element = page.query_selector("#captcha-img")
captcha_element.screenshot("captcha.png")

# 调用打码API(如超级鹰、打码兔)
# code = solve_captcha("captcha.png")

# 输入验证码
# page.fill("#captcha-input", code)
```

---

五、部署到服务器(24小时运行)

1. 使用 systemd 守护进程

创建服务文件 /etc/systemd/system/webmonitor.service:

```ini
[Unit]
Description=Web Monitor Service
After=network.target

[Service]
Type=simple
User=ubuntu
WorkingDirectory=/home/ubuntu/webmonitor
ExecStart=/usr/bin/python3 /home/ubuntu/webmonitor/monitor.py
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
```

启动服务:

```bash
sudo systemctl enable webmonitor
sudo systemctl start webmonitor
sudo systemctl status webmonitor
```

2. 使用 Docker 部署

```dockerfile
FROM python:3.10-slim

RUN pip install openclaw playwright
RUN playwright install chromium

WORKDIR /app
COPY monitor.py .

CMD ["python", "monitor.py"]
```

```bash
docker build -t webmonitor .
docker run -d --name monitor webmonitor
```

---

六、腾讯云Lighthouse一键部署(热榜文章提到的)

热榜上那篇《腾讯云Lighthouse一键部署OpenClaw》其实就是把上面的流程打包成了一键脚本:

```bash
# 腾讯云 Lighthouse 用户可以直接用这个脚本
curl -sSL https://raw.githubusercontent.com/openclaw/lighthouse/main/install.sh | bash
```

这个脚本会:

1. 安装 Docker 和 OpenClaw
2. 配置开机自启
3. 开放必要端口
4. 启动监控服务

---

七、常见问题与解决方案

问题 原因 解决
元素找不到 页面未加载完成 用 wait_for_selector
被反爬 检测到自动化特征 用 stealth 插件隐藏特征
内存占用高 浏览器实例未关闭 每次用完 browser.close()
中文乱码 编码问题 页面设置 page.set_viewport_size
定时任务不执行 cron环境变量问题 用绝对路径 + 完整环境

反爬绕过技巧

```python
# 隐藏自动化特征
from openclaw.stealth import stealth_async

await stealth_async(page)

# 使用真实用户代理
page.set_extra_http_headers({
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
})

# 模拟人类行为
page.mouse.move(100, 100)
page.wait_for_timeout(500)
page.mouse.click(100, 100)
```

---

八、扩展:多网页并发监控

```python
import asyncio
from openclaw import Browser

async def monitor_one(url, callback):
browser = await Browser.launch()
page = await browser.new_page()
await page.goto(url)
content = await page.content()
await callback(url, content)
await browser.close()

async def monitor_all(urls):
tasks = [monitor_one(url, handle_result) for url in urls]
await asyncio.gather(*tasks)

def handle_result(url, content):
print(f"{url} 长度: {len(content)}")

# 运行
asyncio.run(monitor_all([
"https://example.com/product1",
"https://example.com/product2",
"https://example.com/product3"
]))
```

---

九、总结

通过这篇文章,你学会了:

· OpenClaw 的基本使用方法
· 如何写一个网页监控机器人
· 处理动态加载、登录、验证码等复杂场景
· 部署到服务器实现24小时监控
· 并发监控多个网页

浏览器自动化能做的事情远不止监控:自动填表、批量发帖、数据采集、自动化测试……你可以用这套技术解决很多重复性工作。

下一篇预告:《从浏览器自动化到RPA:让机器人帮你干完所有重复工作》

---

评论区分享你用自动化工具做过最有趣的事情~

http://www.jsqmd.com/news/688894/

相关文章:

  • 微信好友关系一键检测:终极免费工具快速发现谁删除了你
  • 保姆级教程:在树莓派上用Node-RED连接Home Assistant,实时监控CPU温度与内存
  • 2026年黄金回收指南:这五家高评价实体店为何备受信赖? - 品牌企业推荐师(官方)
  • 智驾进阶之路:V2X打通车与万物互联,航芯安全芯片守护产业行稳致远
  • 订单中心怎么设计?一次讲清订单主链路、状态流转、拆单模型与核心边界
  • 告别触摸屏!用4个物理按键玩转LVGL界面(附焦点保存与恢复实战代码)
  • 仅限SRE/SecOps内部传阅:Docker 27 Registry安全基线27项强制项(含FIPS 140-2合规对照表)
  • Windows与Office终极激活指南:KMS_VL_ALL_AIO智能脚本完全教程
  • 抖音批量下载工具:从零开始构建高效视频收集工作流
  • 概率流常微分方程(PFODE)
  • Umi-CUT:彻底解决图片黑边困扰的终极批量处理工具
  • 2026年健康早餐新选择:这份黑麦吐司榜单,好吃到颠覆你的认知 - 品牌企业推荐师(官方)
  • 别再只会画折线图了!用Qt Charts搞定5种实用图表(附完整源码)
  • CUDA 13算子开发必踩的5大安全陷阱:从内存越界到PTX注入攻击,一线GPU工程师紧急避坑指南
  • 别再手动建文件夹了!Android Studio 2023.3.1 一键生成多语言资源目录(附完整国家/地区代码表)
  • 20260423 紫题训练
  • ComfyUI-Manager:彻底改变AI绘画插件管理体验的智能解决方案
  • 别再傻等Importing了!保姆级教程:用Docker快速部署Unity CacheServer(含Windows/Linux配置)
  • 5步快速上手《缺氧》存档编辑器:Duplicity终极指南
  • 球类运动自动跟拍怎么实现?AI尚运动相机实测揭秘
  • Windows右键菜单清理神器:ContextMenuManager让你的右键菜单焕然一新
  • 别再只用to_string()了!盘点Pandas中DataFrame与字符串互转的5种方法及适用场景
  • Mac Mouse Fix终极指南:5分钟让你的普通鼠标超越苹果触控板
  • 【信创开发环境黄金标准】:2026年工信部推荐VSCode配置模板——已通过中国电科、航天信息、中航信三大央企红蓝队渗透测试
  • 深度测评Alpha AI:大模型加持下,这款AI量化引擎表现如何?
  • AM32开源代码中的delay函数详解:STMICRO/GIGADEVICES/ARTERY三种计时器实现对比
  • 【收藏级】2026年AI与金融大模型深度解析:两条技术路径对比+落地指南(小白程序员入门必看)
  • 面试官最爱问的字符串算法:最长回文子串的两种解法(中心扩展 vs Manacher)
  • LVGL内存优化实战:当你的嵌入式Linux板子报‘段错误’时该怎么办?
  • 社交产品测试