如何在未被检测的指纹浏览器上运行Crawl4AI
Advanced Data Extraction Specialist
TL;DR:
- Crawl4AI 已经支持 Chrome DevTools Protocol,因此将其指向 Scrapeless 只需两行代码更改。 设置
browser_mode="cdp"和cdp_url为 Scrapeless 的 WebSocket 端点,所有的arun()爬虫将在云浏览器上运行,而非本地 Chromium。 - 本地 Crawl4AI 浏览器在三个方面泄露自动化信息:
navigator.webdriver标志、无头默认指纹和您自己的出口 IP。反机器人系统会同时检测这三项信息。 - Scrapeless Scraping Browser 在服务器端回答这三项问题 — 实际自开发的 Chromium、一致的每会话指纹,没有
webdriver迹象,且在195多个国家的住宅网络出口。 - 您的爬虫逻辑保持不变。 提取策略、
CrawlerRunConfig、分块和 markdown 输出的行为与本地完全相同;只有浏览器源发生变化。 - 验证过的实时结果: 在 Scrapeless 云浏览器上进行的 Crawl4AI 爬虫返回了 HTTP 200 和超过 11,000 个字符的干净 markdown,另一个检查显示
navigator.webdriver在美国住宅 IP 下为false。 - 免费开始。 新的 Scrapeless 账户包括免费的 Scraping Browser 运行时 — 请在 app.scrapeless.com 注册。
介绍:为 Crawl4AI 提供一个可以读取干净的浏览器
Crawl4AI 通过 Playwright 驱动真实的 Chromium,将页面转换为适合 LLM 的 markdown。将其与您自己机器上的浏览器一起运行,每次爬虫都会继承那些使自动化变得显而易见的信号:它通过 the navigator.webdriver 属性 公布自己,使用无头默认字体和画布行为,并从声誉服务已经识别的 IP 中退出。
您可以在本地修补每一个问题,然后随着 Chromium 和检测器的升级持续修补。还有更短的路径。Crawl4AI 可以通过其 cdp_url 设置连接到任何支持 Chrome DevTools Protocol 的浏览器,而 Scrapeless Scraping Browser 就是通过一个 WebSocket URL 到达的 CDP 端点。将 Crawl4AI 指向它,指纹、行为表面和出口 IP 都转移到服务器端 — 爬虫代码保持不变。
您可以用它做什么
- 爬取反机器人保护的页面 — 云浏览器在渲染期间清除挑战,因此
arun()返回内容而不是中间页。 - 本地化爬虫 — 固定
proxyCountry使页面呈现出该市场访客所看到的样子。 - 发送一致的指纹 — 传递一个
fingerprint对象,让用户代理、平台、屏幕和时区在多个运行中保持一致。 - 重用登录状态 — 传递
profileId使得 cookies 和本地存储在爬虫之间持久。 - 扩展超出您的笔记本电脑 — 会话在云中运行,因此 URL 批次不受限于本地 Chromium。
- 保持提取过程不变 — CSS/XPath 策略、LLM 提取和 markdown 生成的行为完全相同。
为什么选择 Scrapeless Scraping Browser
Scrapeless Scraping Browser 是一个可定制的、抗检测的云浏览器,专为网络爬虫和 AI 代理设计。对于 Crawl4AI 特别来说,它提供了:
- 真正自开发的 Chromium,精确运行页面 JavaScript,确保在
arun()读取之前附加客户端渲染的内容。 - 一致的每会话指纹 — 无
navigator.webdriver迹象,无头默认设置没有信息泄露。 - 在195多个国家的住宅出口,每次会话选择一个
proxyCountry值。 - 通过
profileId保持会话持久性,使得经过身份验证的爬虫保持其状态。 - 单一连接接口 — 每个选项都是同一 WebSocket 端点上的查询参数。
在免费的计划中获取您的 API 密钥,访问 app.scrapeless.com。
先决条件
- Python 3.10 或更高版本,需含
asyncio - 安装 Crawl4AI (
pip install crawl4ai) - 一个 Scrapeless 账户及 API 令牌 — 请在 app.scrapeless.com 注册
下面的示例已经通过实际的 Scrapeless 会话验证。完整的连接细节请参见 Crawl4AI 集成文档。
安装
Crawl4AI 自带 Playwright/CDP 支持,因此该集成不需要额外的浏览器包。
bash
pip install crawl4ai python-dotenv
export SCRAPELESS_TOKEN=your_api_token_here # 免费密钥请访问 https://app.scrapeless.com
配置连接
Scrapeless 端点是 wss://browser.scrapeless.com/api/v2/browser,每个选项都是一个查询参数。构建 URL 一次并传递给 BrowserConfig。
python
import os
from urllib.parse import urlencode
def scrapeless_cdp_url() -> str:
params = {
"token": os.environ["SCRAPELESS_TOKEN"],
"sessionName": "Crawl4AI",
"sessionTTL": 180000, # 毫秒
"proxyCountry": "US",
}
return f"wss://browser.scrapeless.com/api/v2/browser?{urlencode(params)}"
基本的云浏览器爬取
设置 browser_mode="cdp" 并传递 cdp_url。其他一切——爬虫生命周期、CrawlerRunConfig、Markdown 结果——都是标准的 Crawl4AI。
python
import asyncio
import os
from urllib.parse import urlencode
from crawl4ai import AsyncWebCrawler, BrowserConfig, CrawlerRunConfig
def scrapeless_cdp_url() -> str:
params = {
"token": os.environ["SCRAPELESS_TOKEN"],
"sessionName": "Crawl4AI",
"sessionTTL": 180000, # 毫秒
"proxyCountry": "US",
}
return f"wss://browser.scrapeless.com/api/v2/browser?{urlencode(params)}"
async def main() -> None:
async with AsyncWebCrawler(
config=BrowserConfig(
headless=True,
browser_mode="cdp",
cdp_url=scrapeless_cdp_url(),
)
) as crawler:
result = await crawler.arun(
url="https://www.scrapeless.com/en",
config=CrawlerRunConfig(wait_for="css:body", scan_full_page=True),
)
print("status:", result.status_code)
print("title:", result.metadata.get("title"))
print("markdown chars:", len(result.markdown.raw_markdown))
asyncio.run(main())
此爬取的实时运行返回了 status: 200,页面标题为 Effortless Web Scraping Toolkit - Scrapeless,以及超过 11,000 个字符的干净 Markdown——这是 Crawl4AI 在本地产生的相同结果对象,通过云浏览器获取。
在免费计划中获取您的 API 密钥:app.scrapeless.com
发送一致的指纹
fingerprint 对象保持浏览器的广告身份一致——用户代理、平台、屏幕、语言和时区都一致,这是反机器人评分检查的内容。将其 JSON 编码,然后作为一个查询参数传递。W3C WebDriver 规范要求符合标准的自动化设置 webdriver 标志;云浏览器不携带它,因此一致的指纹没有与之相矛盾的证据。
python
import json
from urllib.parse import quote, urlencode
def fingerprint_cdp_url() -> str:
fingerprint = {
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
"platform": "Windows",
"screen": {"width": 1920, "height": 1080},
"localization": {"languages": ["en-US", "en"], "timezone": "America/New_York"},
}
params = {
"token": os.environ["SCRAPELESS_TOKEN"],
"sessionTTL": 180000,
"fingerprint": quote(json.dumps(fingerprint)),
}
return f"wss://browser.scrapeless.com/api/v2/browser?{urlencode(params)}"
将爬取路由通过选择的区域
将 proxyCountry 更改为 ISO 国家代码以选择住宅出口;在验证期间对 IP 回显端点的检查确认退出 IP 为美国住宅地址,navigator.webdriver 读取为 false。
python
params = {
"token": os.environ["SCRAPELESS_TOKEN"],
"sessionTTL": 180000,
"proxyCountry": "DE", # 或 "US", "JP", "ANY"
}
当本地 Chromium 停止时
在自己的 Chromium 上运行 Crawl4AI 适合开放的、未受保护的页面。问题出现在目标对浏览器评分的地方:一个从未将其内容附加到无头默认的客户端渲染的应用程序、一个在数据中心 IP 上停滞的挑战中间页,或者一个希望在访问过程中保持稳定身份的登录墙。每一个都是指纹、行为或 IP 问题——正是云浏览器处理服务器端的三类问题。将浏览器转移给 Scrapeless,将这些情况交给管理会话,而您的 arun() 调用和提取策略保持不变。
您获得的回馈
结果是标准的 Crawl4AI 对象——status_code、metadata、markdown、links、media 和您配置的任何结构化提取。从在云浏览器上运行的一些真实观察:
navigator.webdriver不存在,因此网站运行的第一个检查像真实的 Chrome 一样读取。- 这里的
sessionTTL以毫秒为单位——Crawl4AI 的 CDP 模式直接传递该值,因此180000是三分钟,而不是 180。 - 出口 IP 与
proxyCountry匹配 — 地理限制页面会如本地访问者所见。 wait_for仍然主导准备状态 — 使用 CSS 条件(css:body,内容选择器),确保arun()在客户端渲染附加后读取页面,而不是在之前。
结论:相同的爬虫,更干净的浏览器
Crawl4AI 决定提取内容;Scrapeless 决定浏览器在网站上的表现。集成有两个设置 — browser_mode="cdp" 和 cdp_url — 其余的流程保持不变。将 proxyCountry 固定在一个住宅区域,传递一致的 fingerprint,并重用 profileId 进行认证爬取。有关如何将另一个 Python 爬虫库接入同一云浏览器,请参见 Scrapling 生产爬虫指南,并在 Scrapeless 定价页面 比较计划。
准备好构建您的 AI 驱动爬取管道了吗?
加入我们的社区以获取免费计划,并与构建 Crawl4AI 管道的开发者联系: Discord · Telegram。
在 app.scrapeless.com 注册以获取免费的爬取浏览器运行时,并将 Crawl4AI 的 cdp_url 指向目标无法指纹识别的云浏览器。
常见问题
问:我需要更改我的 Crawl4AI 提取代码吗?
不需要。您只需更改浏览器的创建方式 — browser_mode="cdp" 加上 cdp_url — 爬虫生命周期、CrawlerRunConfig、提取策略和 markdown 输出保持完全不变。
问:为什么不直接在本地 Chromium 上运行 Crawl4AI?
本地 Chromium 在您的 IP 上运行,通过 navigator.webdriver 宣告自动化,并需要您维护隐蔽补丁。云浏览器是一个管理会话,带有捆绑的住宅出口和一致的指纹 — 相同的爬虫 API,无需维护。
问:我需要代理吗?
不需要。住宅出口是内置的 — 将 proxyCountry 设置为一个地区或 ANY。无需配置单独的代理。
问:sessionTTL 是以秒还是毫秒为单位?
在 Crawl4AI 的 CDP 模式中,值以毫秒的形式传递,因此 180000 意味着三分钟。时间设置要足够长以覆盖完整的爬取。
问:使用 Crawl4AI 进行网页爬取合法吗?
访问公开可用的数据通常是被允许的,但各地区和网站的规则各不相同。请查看目标网站的服务条款,遵守 robots 指令,并咨询法律顾问以处理敏感事务。
在Scrapeless,我们仅访问公开可用的数据,并严格遵循适用的法律、法规和网站隐私政策。本博客中的内容仅供演示之用,不涉及任何非法或侵权活动。我们对使用本博客或第三方链接中的信息不做任何保证,并免除所有责任。在进行任何抓取活动之前,请咨询您的法律顾问,并审查目标网站的服务条款或获取必要的许可。



