更新内容
你熟悉这个流程:打开 DevTools,刷新页面,在几十个 request 中翻找,直到找到包含目标价格的那个,右键点击 Copy as cURL。然后繁琐的工作才刚开始:剔除仅在 Chrome 内部生效的 header,针对你自己的客户端重写请求,并验证在脱离浏览器环境后它是否仍能正常响应。
现已开启测试的 FourA Chrome 扩展将这些操作简化为几次点击。它在 Network 标签旁增加了一个 FourA 标签,用于列出页面的所有 request,定位包含页面可见文本的具体请求,并将其直接复制为针对 Single、Proxy Finder 或 Browser 的现成调用代码,支持 cURL、Python、Node 或 MCP。该扩展还包含一个弹出窗口,可让 Chrome 自身通过你的某个 proxy 端口用户进行代理访问。
该扩展尚未上架 Chrome Web Store。你可以在 Dashboard 的 Tools 页面下载,并在开发者模式下加载(要求 Chrome 116 或更高版本)。扩展本身完全免费;经由隧道的流量会计入你套餐的 proxy 配额,从 DevTools 发起的调用则按正常的 API 费率计费。
工作原理
在目标抓取页面上打开 DevTools,切换至 FourA 标签。刷新页面后,该标签会以类似 Network 的方式列出各类 request,默认隐藏广告和分析请求,并提供 This site only 开关仅保留当前站点的请求。在 Find in responses 中输入价格、产品名称或任何页面可见文本,它就会直接标记出 response 包含该内容的 request。通常在这个环节,你会发现该页面其实是由某个可以直接调用的 JSON endpoint 渲染而成的。
选中该 request,在 FourA call 下选择对应的引擎,然后复制。以下是在某商城页面抓取 JSON request 生成的 cURL 示例(已做脱敏截断处理,实际复制的内容会包含页面发送的完整 header):
curl https://api.foura.ai/api/single \
-H 'X-API-Key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"method": "GET",
"url": "https://shop.example.com/api/products?category=coffee&page=2",
"headers": [
["accept", "application/json"],
["referer", "https://shop.example.com/coffee"],
["accept-language", "en-GB,en;q=0.9"]
],
"browser": "Chrome",
"os": "macOS",
"unblocker": true
}'
该调用中有三处是刻意设计的。Headers 以键值对列表的形式传递,保持页面发送时的顺序,这正是 Single 接收的格式。Chrome 为自身连接写入的那些 headers(host、content-length、accept-encoding、connection 等)已被丢弃,因为复制它们会破坏后续发起调用的任何客户端。此外,browser 加上 os 会请求与您当前使用的 Chrome 相匹配的 browser profile。这里特意省略了版本号:该调用将获取我们支持的最新版本,而不是因为请求了未支持的版本而被拒绝。
MCP 格式包含工具名称(foura_single)及紧随其后的相同 JSON,可直接供接入我们 MCP server 的 agent 使用。
接下来是两个按钮。Open in the playground 会将调用加载到 Dashboard Playground 中,如果是您的 key,则会自动选中。Run through FourA 会发送该请求并将 "The browser got" 与 "FourA got" 并排对比,以便在编写任何代码之前确认我们的响应是否与页面的响应一致。
Impact
手动操作的流程已有详尽记录。ScrapingBee 的教程 仅从 Chrome 中提取 cURL 就需要五个步骤,并且指出复制的内容包含浏览器发送的所有 header 和 cookie。这是大多数爬虫工程师的起点。但这仅完成了半个任务,因为复制的内容只能证明该 request 可以从您的浏览器成功发出,无法保证其他环境。
FourA 标签页在一个界面中解决了这两部分工作。您可以通过返回的内容而不是靠猜测 URL 来定位 request,获得符合 API 预期格式的调用,并且只需点击一次即可验证从我们这边发起是否依然有效。在那些数据通过看似毫无意义的 URL 进行传输的页面上,这种方式的收益最为明显。
我们目前还没有关于节省时间的具体数据。这仍处于测试阶段,最真实的衡量标准是您的下一个项目。
For Power Users
将引擎切换至 Proxy Finder,面板会封装相同的 request 并提供 Exit country 选项:
{
"request": {
"method": "GET",
"url": "https://shop.example.com/api/products?category=coffee&page=2",
"headers": [["accept", "application/json"]],
"unblocker": true
},
"exitCountries": ["DE"]
}
exitCountries 是严格的白名单。request 绝不会降级回退到其他国家,提供服务的国家会作为 exitCountry 返回。这是一项套餐功能,因此未配置国家定向的套餐会直接返回拒绝说明。
Browser 的结构有所不同,因为它打开的是页面而不是直接发送 request。它将 headers 接收为对象,把页面的 Cookie header 转换为限定在 host 范围内的 cookie 列表,并忽略 user-agent 和 client-hint headers,因为引擎会自行发送(开启 profile 选项时,它会改用当前窗口的 User-Agent)。它仅支持重放不带 body 的 GET。搜索表单中的 POST 属于 Single,其中 JSON body 会作为对象传递,其他类型则作为页面发送的原始字符串传递。
右键点击任意 request 即可获取相同的复制操作,以及 Copy URL 和 Copy response。运行所需的 API key 位于标签页的 Settings 中,在 Chrome 关闭前一直有效,除非勾选 Keep the key on this computer。
郑重提醒一次。携带 cookie 复制的调用会重放你当前登录的会话。请将其视同密码,切勿泄露到工单、聊天或公开仓库中。
弹出窗口端也值得一提。它测量的是目标网站通过隧道实际看到的地址,而不是直接读取你的本地设置,当该地址与你自身地址相同时会显示 Not routed。当图标变红并带有数字时,表示 proxy 在最后一分钟内拒绝了该数量的连接,弹出窗口会说明原因。其 Location 页面背后的 username options 与 proxy 端口文档中记录的完全一致。
What's Next
在正式定稿前,该扩展仍处于 beta 阶段,需从 Dashboard 安装,我们目前未设定上架 Chrome Web Store 的时间表。Chrome 是其唯一构建并经过测试的浏览器。setup guide 介绍了当前发布的内容;后续的改进将取决于你在实际任务中使用 FourA 标签页时的反馈。
因此,下次页面阻碍你的解析器时,请在分析 HTML 之前先打开 DevTools。最高效的采集方式,往往就是直接调用页面已经发出的 request。