在现代网络环境中,许多网站都具备检测自动化工具(如爬虫)的能力,这给自动化测试和爬虫带来了挑战。Playwright 是一个强大的自动化库,它支持多种浏览器,并提供了绕过这些检测的方法。本文将解析一段使用 Playwright 和 Stealth 模式绕过网站检测的代码。
Playwright 是一个由 Microsoft 开发的自动化库,用于自动化跨浏览器的 Web 测试。它支持 Chrome、Firefox、Safari 和 Edge 等主流浏览器,并提供了一系列功能,如截图、PDF生成、性能监控等。
Stealth 模式是一种用于绕过网站检测的技术。它通过修改浏览器的属性和行为,使自动化工具看起来更像人类用户。这包括修改 navigator.webdriver
属性、navigator.languages
属性和 navigator.plugins
属性等。
让我们来分析一下这段代码的主要部分:
browser = p.chromium.launch(headless=False, args=[
'--disable-gpu',
'--disable-software-rasterize',
'--disable-blink-features=AutomationControlled'
])
这段代码使用 Playwright 启动了一个 Chromium 浏览器实例。headless=False
表示浏览器将以可见模式启动,方便调试。args
参数用于传递额外的命令行参数,这里禁用了 GPU、软件光栅化和自动化控制特性,以减少被检测到的可能性。
context = browser.new_context(
user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36'
)
这里创建了一个新的浏览器上下文,并设置了用户代理。用户代理是一个字符串,用于标识浏览器和操作系统。设置一个常见的用户代理可以减少被检测到的可能性。
context.add_init_script("""
delete navigator.__proto__.webdriver;
window.navigator.webdriver = false;
Object.defineProperty(navigator, 'languages', {
get: () => ['en-US', 'en']
});