free-web-search-js

Data & APIs

Playwright/HTTP 联网搜索与网页正文抓取,零 API Key。用于实时搜索、查资料、新闻、教程、网页内容读取;支持国内 Bing、海外 DDG、自动抓取正文。

Install

openclaw skills install free-web-search-js

free-web-search-js

一步式:search → 搜索 → 自动抓内容 → 返回。优先 HTTP,必要时 Playwright 兜底;在无桌面/服务器环境默认 headless,避免 GUI 依赖。

架构

国内:
  Playwright headless 打开 Bing → 首页拿 cookie → 搜索框提交
  → 结果为空时自动兜底 DDG HTTP
  → 自动抓取 top 3 页面内容

海外:
  纯 HTTP → DDG HTML 解析
  → fetch 失败时用 Playwright request 兜底
  → 自动抓取 top 3 页面内容

搜索引擎

引擎协议区域说明
Bing CNPlaywright 搜索框提交国内先访问首页拿 cookie,再搜索框输入提交
搜狗纯 HTTP国内--engine=sogou 可选,⚠ 无 cookie 易被反爬拦截,结果不稳定
DDG HTML Lite纯 HTTP海外html.duckduckgo.com

策略

区域搜索抓取
国内Bing CN (Playwright headless),空结果兜底 DDG自动抓前 3 条
海外DDG HTML,fetch 失败兜底 Playwright request;DDG 为空再兜底 Bing自动抓前 3 条

IP 怎么判断

每次搜索时自动检测,三轮探测并行,谁先成功用谁:

轮次探测服务逻辑
第1轮myip.ipip.net / cip.cc国内可达优先
第2轮ipinfo.io / ipapi.co国际探测
第3轮试连 cn.bing.com能通大概率国内
兜底默认国内

出口 IP 走代理时可能误判,用 --region=cn--region=intl 手动指定。

去重

智能去重:域名 + 路径主干(忽略 www/m 子域、tracking 参数、尾部斜杠、.html 后缀)。

Bing 跳转 URL(bing.com/ck/)自动解码为直链。

抓取模式

搜索后自动抓取 top N 条 URL 内容(默认 3 条)。

层级方式速度说明
第1层轻量 HTTP + cheerio⚡ 秒出不启动浏览器
第2层Playwright headed🟡 慢完整浏览器,支持 JS 渲染

第1层增强:

  • JSON API 响应:自动检测 Content-Type 并提取结构化内容
  • JSON-LD:提取 <script type="application/ld+json"> 中的 articleBody/description
  • NEXT_DATA:提取 Next.js 嵌入数据
  • meta 标签:og:description / description 兜底
  • GBK 编码:自动检测并转换

可靠性设计

  • SKILL.md 必须以 YAML frontmatter 开头;不要在 --- 前加标题,否则 OpenClaw 可能无法发现技能。
  • scripts/check-env.js 检查的是可执行浏览器文件,不是只看 ~/.cache/ms-playwright 目录,避免“缓存目录存在但浏览器缺文件”的假阳性。
  • Playwright 默认 headless: true,并带 --no-sandbox / --disable-dev-shm-usage,适配 Linux 服务器、Docker、无桌面环境。
  • 如果 Playwright 新版本要求 chrome-headless-shell 但下载慢/中断,脚本会优先复用已存在的 Chromium 可执行文件;也可设置 CHROMIUM_EXECUTABLE_PATH=/path/to/chrome
  • DDG 的 Node fetch 在部分网络会 fetch failed,已内置 Playwright request 兜底;如果仍为空,会再用 Bing Playwright 兜底,保证海外策略在国内网络也尽量有结果。

安装

前置依赖(全部必装):

依赖说明大小/耗时
Node.js >= 18运行时
cheerioHTML 解析小,秒装
commanderCLI 参数解析小,秒装
iconv-liteGBK 编码转换小,秒装
playwright浏览器自动化(Bing 搜索 + 抓取兜底)~50MB
ChromiumPlaywright 专用浏览器~150MB,需几分钟下载

安装脚本自动检测网络区域,国内使用镜像源加速:

# Windows
powershell -File scripts/setup.ps1

# Linux/macOS
bash scripts/setup.sh

国内镜像:

  • npm: https://registry.npmmirror.com
  • Playwright/Chromium: https://npmmirror.com/mirrors/playwright

手动安装:

cd skills/free-web-search-js
npm install
npx playwright install chromium    # ~150MB,需几分钟
# 如果下载慢/中断,可重试,或设置国内镜像:
PLAYWRIGHT_DOWNLOAD_HOST=https://npmmirror.com/mirrors/playwright npx playwright install chromium
# 如果系统已有 Chrome/Chromium:
export CHROMIUM_EXECUTABLE_PATH=/path/to/chrome

验证环境:node scripts/check-env.js

卸载:node scripts/uninstall.js

验证与故障排查

cd skills/free-web-search-js
node scripts/check-env.js
node scripts/search.js "OpenClaw" --max 2 --region cn --fetch 0
node scripts/search.js "OpenClaw" --max 2 --region intl --fetch 0

常见问题:

  • node_modules not found:运行 npm install
  • Executable doesn't exist ... chrome-headless-shell:运行 bash scripts/setup.sh,或设置 CHROMIUM_EXECUTABLE_PATH 指向已有 Chrome/Chromium。
  • browserType.launch ... closed:通常是无桌面/沙箱/缺浏览器文件;当前脚本默认 headless + no-sandbox,如仍失败,先跑 node scripts/check-env.js
  • 搜索 0 条:换 --region=cn/--region=intl,或 --fetch 0 先只测搜索。

性能优化:浏览器守护进程

搜索和抓取可复用浏览器守护进程,提速约 70%

node scripts/browser-daemon.js &       # 启动
node scripts/browser-daemon.js --status # 状态
node scripts/browser-daemon.js --stop   # 停止

守护进程空闲 10 分钟自动退出。

用法

# 搜索(搜 + 自动抓前3条内容)
node scripts/search.js "白银价格"
node scripts/search.js "how to deploy docker" --max=5
node scripts/search.js "xxx" --region=cn
node scripts/search.js "xxx" --fetch=5          # 抓前5条
node scripts/search.js "xxx" --no-fetch         # 只搜不抓

# 单独抓取(给定 URL)
node scripts/fetch.js "https://example.com/page1" "https://example.com/page2"

已知限制

  • 国内首次搜索较慢:需启动 Chromium(3~6s),后续复用更快
  • Bing CN 即时答案不返回:天气、计算器等即时卡片不走 li.b_algo,搜索结果为 0
  • 搜狗 HTTP 不稳定:无 cookie 纯请求易被反爬拦截,结果可能为空(--engine=sogou 慎用)
  • 部分站点 HTTP 抓不到:需要 JS 渲染的页面——HTTP 失败会自动 headed 重试
  • 部分站点海外不可达:国内专属站点从海外访问可能超时
  • 代理干扰 IP 检测:出口 IP 走代理时可能误判区域,用 --region=cn/intl 手动指定
  • 海外引擎国内不可达:DDG 在国内被墙,国内策略不使用