Playwright 被广泛应用于数据采集、自动化测试、RPA、社媒运营、账号批量管理等场景。但越来越多开发者发现,脚本上线后经常遇到 Cloudflare、人机验证等问题,其根本原因并不是 Playwright 不够强,而是网站已经具备完善的 Bot Detection(机器人检测)能力。本文将详细介绍 Playwright 为什么容易被检测以及目前有效的反检测方案。

一、为什么使用Playwright容易被检测?

很多开发者都有类似的经历:Playwright 脚本在本地运行一切正常,部署到生产环境后却频繁遇到 Cloudflare 验证、人机验证码、403 Forbidden、账号登录失败等问题。

很多人第一反应是 "Playwright 被检测了",但实际上,大多数网站并不会专门识别你是否使用了 Playwright。

网站真正检测的是浏览器环境、网络环境和用户行为。 Playwright 只是负责控制浏览器,如果它启动的浏览器环境与真实用户存在明显差异,就更容易触发网站的机器人检测机制。

1.Playwright默认浏览器环境与真人用户存在差异

Playwright 默认启动的 Chromium 浏览器,虽然和普通 Chrome 使用的是同一内核,但默认配置中仍然保留了一些自动化特征,这些特征足以让网站判断当前访问者更像一个脚本,而不是一个真实用户。

比较典型的检测点包括:

  • Headless(无头模式)运行特征

  • navigator.webdriver 属性

  • 自动化相关 JavaScript API

  • 浏览器默认启动参数(Launch Arguments)

  • 浏览器插件、扩展等环境信息异常

根据 WebDriver 标准,当浏览器由自动化工具控制时,navigator.webdriver 通常会返回 true

许多网站会在页面加载初期执行一段 JavaScript 检测:

if (navigator.webdriver) {
    // 判定为自动化浏览器
}

因此,早期很多反检测方案都会优先隐藏这个属性。不过需要注意的是,现在已经很少有网站只依赖 navigator.webdriver 一个检测点。

2.网络环境异常

即使浏览器环境已经足够接近真实用户,如果网络环境存在明显异常,同样可能触发网站风控。

这是因为网站通常不会只分析浏览器,还会同时评估访问请求来自什么网络。

常见的检测维度包括:

  • 数据中心 IP很多云服务器 IP 段已经被公开标记,容易被识别为自动化流量。

  • 代理信誉代理 IP 是否曾经被大量用于爬虫、垃圾注册或恶意请求。

  • ASN(自治系统编号)IP 属于家庭宽带、移动网络还是云服务商。

  • DNS 信息DNS 配置是否与 IP 地区一致。

  • IP 历史记录IP 是否频繁切换国家、是否存在异常访问历史。

如果你的 Playwright 脚本频繁更换低质量代理,或者大量使用数据中心 IP,即使浏览器指纹已经进行了伪装,也可能因为网络环境异常而被网站判定为高风险流量。

因此,在自动化项目中,代理 IP 与浏览器环境同样重要。稳定、信誉良好的住宅代理或 ISP 代理,通常比廉价数据中心代理更适合长期运行自动化脚本。

3.登录行为和操作轨迹不像真人

除了浏览器环境和网络环境,网站还会检测用户行为。现代机器人检测系统不仅关注"你是谁",还会分析"你是怎么操作的"。

一个真人用户的行为通常是不规律的,例如点击前会有短暂停留、输入文字速度存在波动,偶尔还会修改内容等;而很多自动化脚本的行为则非常规律,每一步操作之间都严格按照固定时间执行。

对于现代网站来说,仅仅隐藏 navigator.webdriver 或修改浏览器指纹已经不足以绕过检测。 自动化脚本不仅要"看起来像真人使用的浏览器",整个操作过程也需要尽可能接近真实用户的行为模式,才能有效降低被识别为机器人的风险。

二、使用Playwright防止被网站检测的方法

了解网站的检测逻辑后,反检测的思路也就变得清晰了:尽可能让自动化浏览器在浏览器环境、网络环境和用户行为上接近真实用户。

目前比较常见的 Playwright 反检测方案主要有两类:一类是通过修改浏览器暴露的信息,隐藏自动化特征;另一类则是直接构建更加真实、独立的浏览器环境。下面分别介绍。

方法一:使用Playwright Stealth插件

Playwright Stealth 是大多数开发者接触反检测时最先尝试的方案之一。它的思路并不是修改 Playwright 本身,而是在浏览器启动后,对 JavaScript 层暴露出来的一些自动化特征进行"修补",让浏览器看起来更接近普通用户使用的 Chrome。

安装:

pip install playwright-stealth

用法:

from playwright.sync_api import sync_playwright
from playwright_stealth import stealth_sync

with sync_playwright() as p:
    browser = p.chromium.launch(headless=True)
    page = browser.new_page()

    stealth_sync(page)

    page.goto("https://bot.sannysoft.com/")
    page.screenshot(path="after.png", full_page=True)
    browser.close()

启用 Playwright Stealth 后,之前 bot.sannysoft.com 标红的几项通常会转绿。

优点

Stealth 插件也会对对象进行一定程度的模拟,使返回结果更符合普通 Chrome 浏览器。因此,对于一些检测规则相对简单的网站,Playwright Stealth 可以明显降低自动化特征,提高脚本运行成功率。

局限性

正如前文提到,越来越多的网站开始采用综合风控策略,将浏览器指纹、设备环境、IP 信誉、Cookie、行为轨迹等多个维度结合起来进行判断。

即使 Stealth 已经成功隐藏了自动化属性,如果:

  • 多个账号长期共用同一个浏览器环境

  • Canvas、WebGL 等浏览器指纹完全一致

  • Cookie 和 Local Storage 混用

  • 所有脚本都在同一个代理 IP 下进行

网站仍然可能将这些访问识别为来自同一设备或同一自动化程序。

因此,对于需要长期运行 Playwright 自动化脚本、批量管理账号、社媒运营或数据采集等场景,仅依赖 Stealth 插件往往难以应对越来越严格的机器人检测。

方法二:构建稳定的运行环境

很多开发者优化 Playwright 时,只关注浏览器指纹,却忽略了网络环境同样会影响检测结果。网站通常会结合 IP 信誉、网络类型、地理位置、访问频率等因素判断访问是否异常。

常见问题包括:

  • 使用共享数据中心 IP,大量用户共用导致信誉较低;
  • IP 地区与账号信息、浏览器语言不匹配;
  • 频繁切换 IP,导致访问环境不稳定。

因此,在生产环境运行 Playwright 时,需要保持稳定、一致的访问环境:

  • 长期账号任务建议绑定固定 IP,减少环境变化;
  • 数据采集场景可使用动态住宅代理降低单 IP 压力;
  • 登录管理、账号运营等场景更适合静态住宅或 ISP 代理,保持会话稳定。

例如,IPFoxy提供静态住宅代理、ISP 住宅代理和动态住宅代理,可根据不同自动化场景选择合适 IP 类型,其代理资源纯净独享且具备IP轮换能力,通过稳定的代理环境结合浏览器指纹优化,可以降低因网络异常导致的风控触发。

方法三:优化自动化脚本行为

而用户行为最终取决于自动化脚本的设计,包括等待策略、鼠标轨迹、滚动方式、点击节奏以及整体任务流程。

如果脚本始终以固定节奏执行操作,即使浏览器环境足够真实,也可能因为行为模式过于机械而触发风控。

因此,在编写 Playwright 自动化脚本时,还应尽量模拟真实用户的操作习惯,例如:

  • 避免固定时间间隔执行操作,根据实际场景加入一定随机性,例如在合理范围内动态调整等待时间。

  • 鼠标移动尽量采用带轨迹的移动方式,而不是直接跳转到目标坐标。

  • 根据页面内容调整停留时间,而不是所有页面都停留相同的时长。

  • 避免连续快速点击、滚动或填写表单,不要在几百毫秒内完成真人需要数秒才能完成的操作。

  • 控制单个会话中的操作数量,避免一次会话执行大量重复任务。

总结

Playwright 反检测不能依赖单一方法,需要同时优化浏览器指纹、网络环境和操作行为。通过减少自动化特征、保持稳定 IP 环境、模拟真实用户操作,可以降低触发 Bot Detection 的概率,提升自动化任务长期运行的稳定性。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐