🎯 一款可定制、具备反检测功能的云浏览器,由自主研发的 Chromium驱动,专为网页爬虫AI 代理设计。👉立即试用
返回博客

Python的未被检测指纹浏览器:浏览器使用,Crawl4AI,Scrapling

Sophia Martinez
Sophia Martinez

Specialist in Anti-Bot Strategies

08-Jul-2026

TL;DR:

  • 本地无头浏览器在运行时、指纹和出口IP三个方面同时泄露其自动化特征。 navigator.webdrivertrue,指纹带有无头默认值,且每个请求都从您的自有地址退出——反机器人系统同时评分这三个指标。
  • Browser Use、Crawl4AI 和 Scrapling 都支持 Chrome DevTools 协议,因此它们可以驱动远程浏览器,而不是本地浏览器。 每个工具接受 cdp_url(或 browser_ws_endpoint);指向 Scrapeless,自动化在服务器端运行。
  • Scrapeless Scraping Browser 是一个反检测云浏览器:真实的 Chromium、一致的每会话指纹,以及来自195多个国家的住宅出口。 webdriver 的泄露已经消失,出口IP读取干净,无需维护隐秘补丁。
  • 集成仅需每个工具的一行代码——连接 URL。 您只需更改浏览器的来源,而无需更改爬虫的编写方式。
  • 相同的 WebSocket 端点包含每个选项作为查询参数——tokensessionTTLproxyCountryfingerprintprofileId——因此地理定位和配置文件重用仅是 URL 的更改,而不是代码的重写。
  • 免费开始。 新的 Scrapeless 账户包括免费的 Scraping Browser 运行时——请在 app.scrapeless.com 注册。

介绍:三款 Python 爬虫,一个未被检测的浏览器

反机器人系统不再仅查看单一信号。现代挑战同时评分浏览器的运行时、其呈现的指纹,以及它到达时的网络路径——这些都在一次传递中完成。本地无头 Chromium 在这三方面都失败:它通过 navigator.webdriver 属性宣布自动化,配备无头默认的字体和画布行为,并且它从数据中心或家庭IP退出,这些IP已经为声誉服务所知。

Python 有三种流行的驱动浏览器的方法——Browser Use 风格的 LLM 代理、Crawl4AI 的网络爬虫,以及 Scrapling 的提取器——每个在本地运行时都继承了这三个轴的问题。本地浏览器的隐秘补丁意味着要手动追踪 Chrome 版本和反机器人更新,永无止境。

有一条更短的路径。这三款工具都通过 Chrome DevTools 协议连接到浏览器,而 CDP 不在乎该浏览器是在 localhost 还是在云端。本指南将这三款工具都连接到 Scrapeless Scraping Browser,因此运行时、指纹和出口IP在服务器端处理,您的爬虫代码保持不变。


什么泄露了您的指纹

浏览器指纹是一组页面可以在未登录的情况下读取的信号:用户代理、WebDriver 标志、画布和 WebGL 渲染、已安装的字体、时区、语言和屏幕指标。自动化框架以可预测的方式干扰这些信号——W3C WebDriver 规范要求符合规范的驱动程序设置 navigator.webdriver,这恰好是检测脚本首先读取的信号。

在本地修复这点意味着要覆盖每个信号,使其看起来一致和人性化,然后随着 Chromium 和检测器的变化保持这些覆盖。这是云浏览器所消除的维护跑步机:Scrapeless 每个会话提供一个一致的指纹,使得信号彼此一致,并与真实的 Chrome 配置文件相符。

为什么选择 Scrapeless Scraping Browser

Scrapeless Scraping Browser 是一个可定制的、反检测的云浏览器,专为网络爬虫和 AI 代理设计。因为它支持 Chrome DevTools 协议,任何支持 CDP 的 Python 工具都可以无缝连接。对于本指南中的三款工具,它提供了:

  • 真实的自开发 Chromium,可以准确执行 JavaScript,确保单页应用和挑战中断能够解决。
  • 一致的每会话指纹——没有 navigator.webdriver 泄露,没有无头默认值的泄漏。
  • 来自 195 多个国家的住宅出口,每个会话可以通过单一的 proxyCountry 值选择。
  • 通过可重用的配置文件实现会话持久性,因此 cookies 和登录状态在多次运行中得以保存。
  • 一个连接接口——每个功能都是在同一个 WebSocket 端点上的查询参数。

app.scrapeless.com 的免费计划中获取您的 API 密钥。


先决条件

  • Python 3.11 或更新版本(Browser Use 需要 3.11+;Crawl4AI 和 Scrapling 支持 3.10+)
  • 一个 Scrapeless 账户和 API 密钥——请在 app.scrapeless.com 注册
  • 您要连接的工具:browser-usecrawl4aiscrapling
  • 对终端和 async Python 具有基本的熟悉度

以下代码经过验证,与每个库的当前 API 兼容(Browser(cdp_url=...)BrowserConfig(browser_mode="cdp", cdp_url=...)DynamicSession(cdp_url=...))。要进行端到端的运行,需要一个实时的 Scrapeless 会话,而 Browser Use 示例还需要一个用于其语言模型的 OpenAI API 密钥——请提供您自己的密钥以执行每个示例。

完整的连接细节可以在 Scraping Browser 文档 中找到。


共享模式:一个 CDP URL

下面的每个集成都归结为相同的思路。Scrapeless 是一个可以通过 wss://browser.scrapeless.com/api/v2/browser 访问的 CDP 浏览器,其选项作为查询参数传递。只需构建一次该 URL,传递给工具的连接参数,然后按编写的方式运行您的抓取器。

python Copy
from urllib.parse import urlencode

params = {
    "token": "your_api_token_here",   # 来自 app.scrapeless.com
    "sessionTTL": 900,                 # 会话保持活跃的秒数
    "proxyCountry": "ANY",             # 或者是 "US"、"DE"、"JP" 等 ISO 代码
}
cdp_url = f"wss://browser.scrapeless.com/api/v2/browser?{urlencode(params)}"

这些参数在所有三种工具中是一致的:

参数 说明
token 您的 Scrapeless API 密钥(必需)
sessionTTL 会话生命周期
sessionName 会话的标签
proxyCountry ISO 国家代码或 ANY
fingerprint URL 编码的 JSON 指纹对象
profileId 在多个运行中重用一个持久的配置文件

Browser Use:在干净的浏览器上运行的 LLM 代理

Browser Use 使用语言模型驱动浏览器。其 Browser 对象接受一个 cdp_url,因此唯一需要改变的是构建 Scrapeless URL 并传递它——Agent、其任务和其 LLM 保持不变。

注意:此示例需要一个实时的 Scrapeless 会话以及用于 agent.run() 的 OpenAI API 密钥。提供这两个以执行它。

python Copy
import asyncio, os
from urllib.parse import urlencode
from dotenv import load_dotenv
from browser_use import Agent, Browser, ChatOpenAI

def scrapeless_browser() -> Browser:
    params = {
        "token": os.environ["SCRAPELESS_API_KEY"],
        "sessionTTL": 900,
        "proxyCountry": "ANY",
    }
    ws = f"wss://browser.scrapeless.com/api/v2/browser?{urlencode(params)}"
    return Browser(cdp_url=ws)

async def main():
    load_dotenv()
    browser = scrapeless_browser()
    await browser.start()
    agent = Agent(
        task="访问 Google,搜索'Scrapeless',打开第一个结果并返回其标题",
        llm=ChatOpenAI(model="gpt-4o"),
        browser=browser,
    )
    print(await agent.run())
    await browser.kill()

asyncio.run(main())

代理现在可以在云浏览器上进行推理和点击,具有干净的指纹和住宅出口。您可以通过 Scrapeless 仪表板观看实时会话。

在免费计划中获取您的 API 密钥:app.scrapeless.com

Crawl4AI:将浏览器模式设置为 CDP

Crawl4AI 提供原生的 CDP 支持,因此不需要额外安装。在 BrowserConfig 中设置 browser_mode="cdp" 并将 Scrapeless URL 作为 cdp_url 传递。请注意,Crawl4AI 的集成将 sessionTTL 表示为 毫秒

注意:此示例需要一个实时的 Scrapeless 会话以针对真实目标执行。添加您的 API 密钥以运行它。

python Copy
import asyncio
from urllib.parse import urlencode
from crawl4ai import AsyncWebCrawler, BrowserConfig, CrawlerRunConfig

async def main():
    params = {
        "token": "your_api_token_here",
        "sessionName": "Proxy Demo",
        "sessionTTL": 1000,       # 毫秒
        "proxyCountry": "ANY",
    }
    cdp_url = f"wss://browser.scrapeless.com/api/v2/browser?{urlencode(params)}"

    async with AsyncWebCrawler(
        config=BrowserConfig(headless=False, browser_mode="cdp", cdp_url=cdp_url)
    ) as crawler:
        result = await crawler.arun(
            url="https://www.scrapeless.com/en",
            config=CrawlerRunConfig(wait_for="css:.content", scan_full_page=True),
        )
        print(f"状态码: {result.status_code}")
        print(f"标题: {result.metadata['title']}")

asyncio.run(main())

要发送自定义指纹,请将指纹对象进行 JSON 编码,URL 编码,并将其作为 fingerprint 参数传递——浏览器随后在整个会话中始终提供该用户代理、平台、屏幕和本地化。

Scrapling:基于云浏览器的 DynamicSession

Scrapling 为您提供基于浏览器会话的快速、自适应解析。其 DynamicSession 需要一个 cdp_url,Scrapling 的集成将 sessionTTL 作为 秒的字符串 传递。会话会自动处理 reCAPTCHA、Cloudflare Turnstile 和 AWS WAF 挑战,作为渲染的一部分。

注:此示例需要一个活跃的 Scrapeless 会话才能执行。添加您的 API 密钥以运行此示例。

python Copy
import os
from urllib.parse import urlencode
from dotenv import load_dotenv
from scrapling.fetchers import DynamicSession

load_dotenv()
config = {
    "token": os.environ["SCRAPELESS_API_KEY"],
    "sessionName": "scrapling-session",
    "sessionTTL": "300",           # 以字符串形式表示的秒数
    "proxyCountry": "ANY",
    "sessionRecording": "false",
}
ws = f"wss://browser.scrapeless.com/api/v2/browser?{urlencode(config)}"

with DynamicSession(cdp_url=ws, disable_resources=True) as s:
    page = s.fetch("https://httpbin.org/headers", network_idle=True)
    print(f"内容长度: {len(page.body)}")
    print(page.json())

Scrapeless 在一个干净的浏览器上渲染页面;Scrapling 用其选择器解析返回的 DOM。分工正是重点——您保持 Scrapling 的提取 API,只需更换底层浏览器。


您将获得的回馈

在所有三个工具中,它们在重要的方式上行为一致:

  • navigator.webdriver 信号缺失 — 云浏览器不宣布自动化,因此第一次检测检查看起来像真实的 Chrome。
  • 出口 IP 匹配 proxyCountry — 地理限制页面和价格根据本地访客所见进行解析;ANY 让 Scrapeless 自行选择。
  • JavaScript 完全执行 — 客户端渲染的列表和挑战中介在您读取 DOM 之前就已连接。
  • sessionTTL 单位因工具而异 — 对于 Browser Use 和 Scrapling 为秒,Crawl4AI 为毫秒。匹配工具的自有约定,而不是共享常数。
  • 字段可能缺失 — 将任何解析值视为可为空,因为页面结构和条件部分因目标而异。

结论:选择工具,保持浏览器

这三个工具覆盖不同的工作——一个 LLM 代理、一个爬虫和一个自适应解析器——但它们共享一个反检测浏览器。无论您选择哪个,集成都是一个单一的连接 URL:使用您的 token 和选项构建 wss://browser.scrapeless.com/api/v2/browser,将其交给工具的 cdp_url,让 Scrapeless 负责运行时、指纹和住宅出口。

有关为抓取程序选择出口路径的更多信息,请参见 VPS 和代理之间的区别,并比较 Scrapeless 定价页面 上的计划。将 proxyCountry 固定到住宅区域,匹配每个工具的 sessionTTL 单位,并将缺失字段视为可为空。


准备好构建您的无检测抓取管道了吗?

加入我们的社区,领取免费计划并与开发者交流,他们正在将 Python 抓取器连接到云浏览器:Discord · Telegram

app.scrapeless.com 注册以获取免费的抓取浏览器运行时,并将 Browser Use、Crawl4AI 或 Scrapling 指向您的目标无法指纹识别的云浏览器。


常见问题

问:我必须重写我的抓取程序才能使用 Scrapeless 吗?
不必。所有三个工具已经通过 CDP 连接到浏览器。您只需更改连接目标——cdp_url 或 WebSocket 端点——并保持您的代理、爬虫或解析器代码不变。

问:为什么不直接运行本地无头浏览器?
本地浏览器在您自己的 IP 上运行,通过 navigator.webdriver 宣布自动化,并需要您在 Chromium 和反机器人系统更改时维护隐身补丁。云浏览器提供一致的指纹和住宅出口,无需维护。

问:我需要单独的代理吗?
不需要。住宅出口内置于会话中——将 proxyCountry 设置为某个区域或 ANY。无需配置单独的代理。

问:sessionTTL 是以秒还是毫秒为单位?
这取决于工具的集成:对于 Browser Use 和 Scrapling 为秒(Scrapling 以字符串形式传递),对于 Crawl4AI 为毫秒。使用每个工具的自有约定。

问:它处理 Cloudflare 和 CAPTCHA 吗?
云浏览器处理常见挑战类型——Cloudflare 媒介、Cloudflare Turnstile、reCAPTCHA 和 AWS WAF——作为在干净的住宅 IP 上渲染的一部分。将 proxyCountry 固定到住宅区域以获得最佳效果。

问:我应该使用这三个工具中的哪一个?
用于自主决定步骤的LLM驱动代理的浏览器,Crawl4AI用于结构化爬取和内容提取,以及Scrapling用于快速适应性解析已获取页面。它们共享相同的Scrapeless浏览器,因此您可以在不更改连接方式的情况下进行切换。

在Scrapeless,我们仅访问公开可用的数据,并严格遵循适用的法律、法规和网站隐私政策。本博客中的内容仅供演示之用,不涉及任何非法或侵权活动。我们对使用本博客或第三方链接中的信息不做任何保证,并免除所有责任。在进行任何抓取活动之前,请咨询您的法律顾问,并审查目标网站的服务条款或获取必要的许可。

最受欢迎的文章

目录