关于 Scrape-LE
Scrape-LE 在无头 Chromium 中检查 URL,帮助开发者在编写抓取程序前评估抓取条件。它报告页面信息,并检测 robots.txt 规则、速率限制、反爬信号和身份验证拦截。
主要功能
- 01在无头 Chromium 中加载 URL
- 02针对路径评估 robots.txt 规则
- 03检测速率限制和反爬信号
- 04报告身份验证拦截和页面错误
- 05截取完整页面截图
适用场景
- 01编写抓取程序前检查目标页面
- 02核对爬虫权限和抓取延迟规则
- 03诊断被拦截或要求登录的页面
MCP 相关
MCP 服务通过 stdio 提供 `analyze_robots_txt` 工具。它评估传入的 robots.txt 内容和路径,不会抓取 URL 或发起网络请求。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
1收录的工具列表 · 更新于 今天
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| path | string | 是 | 要检查的路径,例如 "/admin"。接受完整 URL,并将其简化为路径。 |
| agent | string | 否 | 要模拟的爬虫,例如 "Googlebot" 或 "MyBot/1.0";按产品标识进行不区分大小写的匹配。省略时,返回通用规则的结果。 |
| content | string | 是 | robots.txt 文件的内容。 |
| maxResults | integer | 否 | 返回的禁止访问路径数量上限(默认值为 500)。meta.truncated 报告是否有结果被丢弃。 |
详细介绍
Scrape-LE:轻松检查网站可抓取性
在无头 Chromium 中加载 URL,看看哪些因素会阻止你的抓取程序——在编写之前
反机器人服务商、速率限制、robots.txt 规则、登录墙、控制台错误、屏幕截图
觉得有用? 点赞或评分能帮助其他开发者找到它 — ★ GitHub · ★ Open VSX · ★ Marketplace
功能
运行 Scrape-LE: Check URL Scrapeability,输入 URL,页面就会在真实的无头 Chromium 中加载。报告会显示在输出面板中,包含 HTTP 状态、页面标题、加载时间、控制台错误、整页屏幕截图和四项检测结果。支持 VS Code,以及 Cursor 和 VSCodium 等基于 VS Code 的编辑器(可从 Open VSX 安装)。
一次性设置:运行 Scrape-LE: Setup Browser 安装 Chromium(约 130MB,安装到 Playwright 的浏览器缓存中)。
安装
| 位置 | 可获得的功能 | 安装 |
|---|---|---|
| VS Code | 在编辑器中通过快捷键执行同一项检查 | Marketplace |
| Cursor、VSCodium、Windsurf | 同一款扩展 | Open VSX |
| 终端或 CI 步骤 | 对单个 URL 或一批 URL 执行同一项检查,并返回退出代码 | npx scrape-le · npm 或 cargo install scrape-le · crates.io |
| 任何 MCP Agent,通过 Node 使用 | 通过 stdio 调用 analyze_robots_txt | npx scrape-le-mcp · npm |
在 AI Agent 中使用
同一引擎也可作为 MCP 服务运行,因此 Agent 可以直接调用它,无需你运行命令。
| 编辑器 | 用法 |
|---|---|
| VS Code 1.101+ | 无需安装任何内容——该扩展会在 Agent 模式下注册 analyze_robots_txt |
| Claude Code | claude mcp add scrape-le -- npx -y scrape-le-mcp |
| Cursor、Windsurf 和其他工具 | 将其指向 npx scrape-le-mcp |
analyze_robots_txt(content, path, agent?, maxResults?)
给定 robots.txt 内容和一个路径,它会报告规则是否允许抓取该路径:如果有适用的组,则使用名称与 agent 匹配的组;否则使用通用(User-agent: *)规则,并在回答中的 agent 字段说明使用了哪个组。此外还会返回抓取延迟、禁止访问的模式以及站点地图。
服务接收内容并返回数据——它不会读取文件,也不会自行发起网络请求。它以 scrape-le-mcp 的名称发布在 npm 上,并以 io.github.nolindnaidoo/scrape-le 的名称发布在 MCP 注册表中。
手动配置 — 适用于任何带有 MCP 配置文件的宿主
大多数宿主读取 JSON 配置。添加一条配置:
{
"mcpServers": {
"scrape-le": {
"command": "npx",
"args": ["-y", "scrape-le-mcp"]
}
}
}
-y 会跳过首次运行时的安装提示。如果不想跟踪新版本,可以固定版本——[email protected]。
不想每次启动都通过 npx 运行?可以安装一次,然后指向二进制文件:
npm install -g scrape-le-mcp
{
"mcpServers": {
"scrape-le": { "command": "scrape-le-mcp" }
}
}
它通过 stdio 使用 MCP 通信,无需环境变量、API 密钥或自行配置。将它接入其他内容之前,可以先进行检查:
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | npx -y scrape-le-mcp
该命令会打印工具列表并退出——如果看到 analyze_robots_txt,说明服务正常运行。
命令行工具
同一项检查既可以在终端中运行,也可以在 Agent 循环中运行:本仓库 crate/ 中的 Rust 命令行工具与扩展共享一套签名语料库——crate/signatures/ 和 crate/fixtures/——因此,如果两者对某个 URL 的判断不一致,CI 就会失败。
scrape-le https://example.com/search # summary on stderr, JSON on stdout when piped
scrape-le --input urls.txt # a batch, streamed as it completes
scrape-le mcp # the same check over MCP on stdio
可从 npm 安装(scrape-le),也可从 crates.io 安装(scrape-le)。两种方式安装的都是同一个 scrape-le 命令。
npm install -g scrape-le # or run it once: npx scrape-le
cargo install scrape-le
退出码就是判断结果:0 表示允许 · 1 表示确实不允许 · 2 表示问题格式错误。
检测
| 检测项 | 工作原理 |
|---|---|
| 反机器人服务商 | 根据响应标头、脚本来源、DOM 元素和 window 全局变量,识别 Cloudflare(包括 Turnstile 验证)、reCAPTCHA、hCaptcha、DataDome 和 PerimeterX |
| 速率限制 | 检查 X-RateLimit-* / RateLimit-* / Retry-After 响应标头,以及 HTTP 429 |
| robots.txt | 获取 <origin>/robots.txt,并根据 RFC 9309 语义检查其对你的 URL 的规则——如果设置了 scrape-le.robotsTxt.agent 且该名称出现在分组中,则使用相应分组;否则使用 User-agent: *。报告会说明匹配的是哪个分组;支持按组匹配 Agent、Allow/Disallow 最长匹配、* 通配符、$ 锚点、crawl-delay 和站点地图 |
| 身份验证 | HTTP 401/403、登录表单(密码和用户名字段)、页面文本中的身份验证关键词,以及最终 URL 中的身份验证路径片段 |
如实说明其局限性:这些特征只是根据公开集成模式进行尽力识别——检测到验证组件意味着页面可能会发起验证,并不表示一定会;检测结果正常也不能证明网站允许抓取。如果 scrape-le.robotsTxt.agent 为空,则只检查 User-agent: * 分组。页面加载后最多等待 5 秒,直到网络空闲,因此页面级检测可能会漏掉此后才渲染的内容。
命令
| 命令 | 说明 |
|---|---|
Scrape-LE: Check URL Scrapeability | 提示输入 URL 并执行完整检查 |
Scrape-LE: Check Selected URL | 检查当前选区中的 URL(也可通过右键菜单使用) |
Scrape-LE: Setup Browser | 安装或验证 Chromium 浏览器 |
Scrape-LE: Open Settings | 打开 Scrape-LE 设置 |
Scrape-LE: Help & Troubleshooting | 内置文档 |
默认情况下,没有命令绑定快捷键。你可以在编辑器的键盘快捷方式中为任意命令设置快捷键。
设置
| 设置项 | 默认值 | 说明 |
|---|---|---|
scrape-le.browser.timeout | 30000 | 页面加载超时时间,单位为 ms(5000–120000) |
scrape-le.browser.viewport.width | 1280 | 视口宽度 |
scrape-le.browser.viewport.height | 720 | 视口高度 |
scrape-le.browser.userAgent | "" | 自定义 User-Agent(为空 = Chromium 默认值) |
scrape-le.retry.userAgents | false | 检查被拦截或失败时,使用常见 User-Agent 重试,并报告哪个有效 |
scrape-le.screenshot.enabled | true | 每次检查时保存整页截图 |
scrape-le.screenshot.path | .vscode/scrape-le | 截图目录(相对于工作区或绝对路径) |
scrape-le.screenshot.format | png | png 或 jpeg |
scrape-le.screenshot.quality | 90 | JPEG 质量,范围为 0–100(对 png 无效) |
scrape-le.checkConsoleErrors | true | 加载时捕获控制台和页面错误 |
scrape-le.detections.antiBot | true | 反机器人服务商检测 |
scrape-le.detections.rateLimit | true | 速率限制检测 |
scrape-le.detections.robotsTxt | true | 获取并检查 robots.txt |
scrape-le.robotsTxt.agent | "" | 检查爬虫 robots.txt 时使用的 Agent,例如 Googlebot 或 MyBot/1.0;为空,或未出现在任何分组中时,使用 User-agent: * 规则 |
scrape-le.detections.authentication | true | 身份验证墙检测 |
scrape-le.notificationsLevel | important | all = 所有通知,important = 警告和错误,silent = 仅错误 |
scrape-le.statusBar.enabled | true | 显示状态栏项 |
语言
除英语外支持 12 种语言:
德语 · 西班牙语 · 法语 · 印度尼西亚语 · 意大利语 · 日语 · 韩语 · 葡萄牙语(巴西)· 俄语 · 乌克兰语 · 越南语 · 简体中文
两部分内容均已翻译——清单(命令标题、设置名称和说明)以及扩展运行期间显示的所有内容(通知、状态栏、快速选择项和提示词)。扩展会遵循 VS Code 的显示语言,因此会与编辑器当前设置的语言一致;无需单独设置。
隐私与安全
- 网络访问是该功能的组成部分,且范围有限。 每次检查只会访问两项内容:你输入的 URL(在无头 Chromium 中加载,该浏览器会像其他浏览器一样获取页面自身的资源)和该源的
/robots.txt。不会向其他任何地方发送数据——没有遥测,也没有分析数据。 - 屏幕截图保存在本地,写入工作区内配置的路径。
- MCP 服务完全不会发起网络请求——与扩展不同,这是有意为之。
fetchRobotsTxt会根据任意源构建 URL,在 Agent 循环中,这会成为一种 SSRF 原语:提供 URL 的调用方是模型,而不是你。该服务分析你已获取的 robots.txt 内容,并且有测试断言没有工具接受url参数。 - 错误通知会隐藏主目录路径和类似凭据的片段。
- 请尊重你检查的网站:可抓取性报告只是信息,并非许可。
- 评分提示最多出现两次。 第 3 次成功使用时,扩展会询问你是否愿意评分;如果你选择了 Later 或将其关闭,则会在第 20 次时再询问一次。选择 Don't Ask Again 后便不会再询问。将
notificationsLevel设为important或silent会关闭此功能。计数保存在 VS Code 的扩展存储中,不会向任何地方发送数据;点击 Rate 会在浏览器中打开你安装扩展时使用的市场页面——VS Code Marketplace 或 Open VSX。
文档
| 内容 | 位置 |
|---|---|
| 工具可以说什么——范围、输出约定、拒绝事项、非目标 | crate/SPEC.md |
| 扩展的构建与内部结构——架构、不变量、工具链、发布 | AGENTS.md |
| CLI 的构建与内部结构 | crate/AGENTS.md |
| 变更内容 | CHANGELOG.md · crate/CHANGELOG.md |
| 此工具的页面,以及其他 15 个工具 | letools.dev/tools/scrape-le |
性能
| 输入 | 大小 | 命中数 | 耗时 | 速率 | 扫描速度 |
|---|---|---|---|---|---|
| 标头签名扫描 | 2.83 MB | 20,000 | 7.24 ms | 2,762,876/sec | 390.5 MB/s |
| robots.txt 路径匹配 | 3.32 MB | 60,000 | 14.41 ms | 4,164,654/sec | 230.4 MB/s |
在 Apple M5 Pro、24 GB 内存、Node 24.3.0 上预热后运行 7 次所得的中位数。输入由
scripts/benchmark.ts 生成,而非签入仓库,因此上述大小与实际测量值
完全一致。运行 bun run benchmark 即可复现。
这些数据因机器而异,不会在 CI 中进行断言——以基准测试作为构建门槛, 只能告诉你运行器当时有多忙。
测试
| 指标 | 覆盖率 |
|---|---|
| 语句 | 76.08% |
| 分支 | 68.02% |
| 函数 | 82.75% |
| 行 | 78.97% |
共有 40 个文件中的 527 个测试用例,另有一个在真实 VS Code 扩展宿主中运行的集成测试套件,以及一个将构建好的 .vsix 安装到干净配置中的端到端测试。
数据由 scripts/coverage-readme.js 从实际运行生成,来源为 coverage/coverage-summary.json 和
coverage/test-results.json;如果本节内容发生偏差,CI 会失败。运行 bun run test:coverage 即可复现;用例数以 vitest 输出为准。
LE 系列的更多工具
为每个模型眼前的工作打造的 16 款单一用途工具。每款都附带一个 Rust CLI 和一个 MCP 服务。一页尽览:letools.dev
提取
- String-LE — 提取代码库中的所有字符串,方便人工阅读
- Numbers-LE — 提取代码库中所有硬编码数字,方便人工检查
- Units-LE — 提取所有带单位的数量并统一格式,遇到含义不明确的数量时会按名称拒绝处理
- Dates-LE — 提取所有日期和时间戳,并给出每个日期和时间戳解析出的确切时刻
- IDs-LE — 提取所有 UUID、ULID、NanoID、ObjectId 和 Snowflake,并解码其中的时间
- IPs-LE — 提取所有 IP 地址、CIDR 网段和 MAC 地址,统一格式并按范围分类
- URLs-LE — 提取代码库中的所有 URL,并给出协议和确切位置
- Paths-LE — 提取代码库中的所有文件路径,并说明它们是否仍指向实际内容
- Colors-LE — 提取代码库中的所有颜色,并指出哪些颜色不在你的调色板中
检查
- Regex-LE — 查找代码库中的所有正则表达式,并报告哪些可能导致灾难性回溯
- Versions-LE — 查找某个依赖项在仓库的各个清单文件中受到不同约束的位置
- i18n-LE — 识别项目使用的 i18n 库,然后依据该库的规则审查其目录
- Scrape-LE — 在编写抓取器之前检查网页能否抓取,并说明何时无法判断
防护
- Secrets-LE — 查找代码库中的硬编码凭据,绝不在报告中打印凭据
- EnvSync-LE — 比较目录树中的 dotenv 文件,并指出哪些文件缺少哪些键
- Unicode-LE — 查找那些隐藏含义的 Unicode 字符——双向控制字符、不可见字符、同形异义字符、混合文字系统
每款工具都独立运行:没有共享的 crate,也没有发布的核心库。若有两款工具得出相同结论,那是因为这个答案经得起两次验证。
联系 — nolindnaidoo.com · GitHub · LinkedIn
nolindnaidoo 的其他项目
Rust — pixelcoords 和 pixelactions 构成一个工作循环:pixelcoords 回答 位置,pixelactions 在那里执行操作。它们有各自的工具、各自的风格——不属于 LE 系列。
- pixelcoords — 冻结屏幕,标记区域,获取像素级精确的坐标和裁剪图像 pixelcoords.dev · crates.io · docs.rs
- pixelactions — 使用经过人工验证的坐标执行交互,并确认操作已生效 pixelactions.dev · crates.io · docs.rs
许可证
MIT © nolindnaidoo
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。