基于 Playwright 的反爬虫网页抓取技能,支持普通、隐身、批量三种模式;内置反检测技术(隐藏 webdriver、随机 UA、Canvas/WebGL 指纹防护)绕过常见反爬机制;适用于网页内容抓取、批量采集、截图保存等场景;触发关键词:scrape、抓取、爬虫、反爬、stealt...
基于 Playwright 的反爬虫网页抓取技能,支持普通模式、隐身模式和批量模式。
强大的网页抓取工具,内置反检测技术,绕过常见反爬虫机制。纯手写反检测代码,不依赖任何第三方 stealth 插件。
核心能力:
yaml
bins: ["node"]
首次使用前需要安装依赖:
bash
cd ~/.openclaw/workspace/skills/stealth-scraper
npm install
如果 Chromium 未自动安装,运行:
bash
node scripts/setup.js
bash
node scripts/scraper-simple.js <URL> [options]
参数:
参数说明默认值--wait <ms>页面加载后等待时间(毫秒)2000--selector <css>CSS 选择器,只提取匹配元素的内容无(提取全部)
示例:
bash
# 基本抓取
node scripts/scraper-simple.js https://example.com
# 等待 5 秒后提取
node scripts/scraper-simple.js https://example.com --wait 5000
# 只提取文章正文
node scripts/scraper-simple.js https://example.com --selector "article.content"
bash
node scripts/scraper-stealth.js <URL> [options]
参数:
参数说明默认值--wait <ms>页面加载后等待时间(毫秒)2000--selector <css>CSS 选择器精确提取无--proxy <url>代理服务器地址无--screenshot <path>保存截图到指定路径无--html <path>保存完整 HTML 到指定路径无--cookie <json>自定义 cookie(JSON 格式)无--scroll自动滚动页面加载懒加载内容false
示例:
bash
# 隐身抓取
node scripts/scraper-stealth.js https://example.com
# 使用代理 + 截图
node scripts/scraper-stealth.js https://example.com --proxy http://127.0.0.1:7890 --screenshot ./shot.png
# 自动滚动 + 保存 HTML
node scripts/scraper-stealth.js https://example.com --scroll --html ./page.html
# 带 cookie 访问
node scripts/scraper-stealth.js https://example.com --cookie '[{"name":"token","value":"abc123","domain":".example.com"}]'
# 精确提取 + 等待
node scripts/scraper-stealth.js https://example.com --selector "div.main" --wait 5000
bash
node scripts/scraper-batch.js [options] <URL1> <URL2> ...
# 或
node scripts/scraper-batch.js --file urls.txt [options]
参数:
参数说明默认值--file <path>URL 列表文件(每行一个 URL)无--concurrency <n>并发数3--stealth使用隐身模式false--wait <ms>每个页面的等待时间2000--selector <css>CSS 选择器无--output <path>输出 JSON 文件路径stdout
示例:
bash
# 批量抓取多个 URL
node scripts/scraper-batch.js https://a.com https://b.com https://c.com
# 从文件读取 URL 列表,隐身模式
node scripts/scraper-batch.js --file urls.txt --stealth --concurrency 2
# 输出到文件
node scripts/scraper-batch.js --file urls.txt --output results.json
所有模式输出统一的 JSON 结构:
json
{
"success": true,
"url": "https://example.com",
"title": "Example Domain",
"content": "页面文本内容...",
"links": [{"text": "More info", "href": "https://..."}],
"images": [{"alt": "Logo", "src": "https://..."}],
"metadata": {
"description": "...",
"keywords": "...",
"author": "..."
},
"elapsedSeconds": 2.35
}
技术说明navigator.webdriver 隐藏删除 webdriver 属性,伪装为真实浏览器User-Agent 轮换10+ 真实 UA,涵盖 Chrome/Safari/Firefox,桌面+移动端随机延迟1-3 秒随机等待,模拟人类浏览行为随机视口随机分辨率,避免固定窗口指纹WebGL 指纹防护注入噪声干扰 WebGL 指纹采集Canvas 指纹防护对 Canvas 数据添加微小噪声插件伪装伪造 navigator.plugins 数组语言伪装伪造 navigator.languages硬件并发伪装随机化 navigator.hardwareConcurrency
addInitScript 在页面加载前注入