Skip to main content

Command Palette

Search for a command to run...

如何让 Playwright 通过浏览器指纹检测

Published
2 min read

1. 为什么传统的爬虫方式失效了?

  • 反爬虫的进化: 以前靠 UA 检查和 IP 频率限制;现在是“多维特征识别”。

  • 什么是浏览器指纹: 即使你换了 IP、清了 Cookie,网站依然能识别出“你还是你”。因为它收集了你浏览器的硬件、软件、系统设置等数百个细微特征,合成了一个唯一的 ID。

  • 现状: 像 Cloudflare 或 Akamai 这种巨头,能通过指纹在毫秒内判定你是一个 Playwright 自动化脚本,而非真实用户。

2. 浏览器指纹(Browser Fingerprinting)是什么?

  • 静态指纹:

    • User-Agent, Platform, Languages.

    • Screen Resolution, Color Depth.

    • Hardware: CPU cores, Device Memory.

  • 动态/硬件特征指纹:

    • Canvas Fingerprinting: 利用渲染差异识别显卡驱动和系统。

    • WebGL: 显卡具体型号及渲染参数。

    • AudioContext: 声卡处理音频信号的细微差异。

  • Web API 特征:

    • navigator.webdriver 标志位。

    • Permissions API 状态。

    • Fonts(系统安装字体列表)。

  • 网络层指纹:

    • TLS/JA3 指纹(握手阶段的特征)。

    • HTTP/2 头部顺序。

一些指纹/bot 检测网站
  1. https://bot.sannysoft.com/

  2. https://abrahamjuliot.github.io/creepjs/

  3. https://fingerprint.com/products/bot-detection/

  4. https://iphey.com/

  5. https://www.scrapingcourse.com/antibot-challenge

3. 简单介绍 Playwright(以 Selenium 为背景板)

特性SeleniumPlaywright
发布年份2004 (老牌标准)2020 (现代新星)
架构WebDriver (HTTP JSON 协议)WebSocket (长连接)
速度较慢 (需等待 HTTP 往返)极快 (更少的通信开销 + 并行上下文)
稳定性易产生 Flaky Tests (需要手动写等待)极高 (内置自动等待 Auto-wait)
浏览器支持所有主流浏览器 + IEChromium, Firefox, WebKit (Safari) (不支持 IE)
移动端通过 Appium 支持真机仅支持移动端浏览器模拟
安装配置需配置 Driver (虽有改进但仍较繁琐)一键安装 (自动下载对应的浏览器二进制文件)
功能特性基础自动化内置录制、Trace Viewer、网络拦截、API 测试

4. 增强 Playwright

  • 无头模式的陷阱: 传统的 headless: true 会修改 UA 并禁用大量 Web API。

  • 对策:使用 stealth 插件: playwright-stealth 几乎是行业标准。它通过动态注入脚本,在网页加载前重写 navigator.webdriver、伪造 chrome.runtime、并修复那些暴露自动化的 JS 变量。

  • 一致性是关键:

    • 如果你用了代理 IP(如美国 IP),但时区(Timezone)和地理位置(Geolocation)却是北京,这种“不一致”是高权重风险指标。

    • 方案: 必须同步设置 context 里的 locale, timezoneIdgeolocation

  • 对抗硬件指纹(噪声技术):

    • 不要尝试抹除,要尝试干扰。 通过在 Canvas 渲染结果中随机加入 1-2 像素的扰动(Noise),让每次生成的指纹都唯一且看起来像真实硬件生成的。
  • 网络指纹(TLS/JA3):

    • 痛点: 网站能在 TCP 握手阶段识别出你是 Node.js 发起的请求。

    • 高级方案: 如果 stealth 插件失效,可能需要配合 curl-impersonate 思想的代理,或者使用专门修改过浏览器内核的“指纹浏览器”(如 Adspower, Browserless)作为 Playwright 的连接端。

5. 模拟真实设备 —— 应对针对设备的限制

可以使用 https://github.com/apify/fingerprint-suite 来生成真实设备的指纹,

import { chromium } from 'playwright';
import { newInjectedContext } from 'fingerprint-injector';

(async () => {
    const browser = await chromium.launch({ headless: false });
    const context = await newInjectedContext(browser, {
        // Constraints for the generated fingerprint (optional)
        fingerprintOptions: {
            devices: ['mobile'],
            operatingSystems: ['ios'],
        },
        // Playwright's newContext() options (optional, random example for illustration)
        newContextOptions: {
            geolocation: {
                latitude: 51.50853,
                longitude: -0.12574,
            },
        },
    });

    const page = await context.newPage();
    // ... your code using `page` here
})();

6. IP Proxy - 动态住宅代理(Residential Proxies)—— 应对针对地区的限制

可以使用代理服务,来获取各地的纯净 IP,如:

使用 proxy 参数来设置代理,以下例子通过 username 来指定目标代理区域,具体请查看代理服务的说明文档。

const browser = await chromium.launch({
    headless: true,
    proxy: {
        server: "http://us2.cliproxy.io:3010",
        username: "xxxx-region-JP-st-Tokyo-city-Chofu",
        password: "xxxx"
    }
});

7. 进一步的大杀器

  • Anti-detect browser,基于 Firefox https://github.com/daijro/camoufox ,可以实现更深层的定制操作

  • AI 识别行为模式将成为主流,指纹伪装将进入“大模型时代”。

8. 参考资料