您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 如何正确移除Pyppeteer中的window.navigator.webdriver
## 引言
在现代Web自动化测试和爬虫开发中,Pyppeteer作为Python版的Puppeteer,因其强大的无头浏览器控制能力而广受欢迎。然而,许多网站会通过检测`window.navigator.webdriver`属性来识别自动化脚本。本文将深入探讨如何有效移除这一特征,使您的Pyppeteer脚本更难被检测。
---
## 一、为什么需要移除webdriver属性
### 1.1 反爬虫机制的工作原理
现代网站常通过以下方式检测自动化工具:
- 检查`navigator.webdriver`属性(Chrome 79+默认设为true)
- 检测浏览器指纹特征
- 监控异常用户行为模式
### 1.2 典型检测场景
```javascript
if(navigator.webdriver){
console.log("Bot detected!");
// 触发反爬措施
}
Pyppeteer通过Chrome DevTools Protocol(CDP)控制浏览器,当启用自动化模式时:
- Chrome会自动设置navigator.webdriver=true
- 修改部分API行为(如Notification.permission
)
通过chrome://version/
可见:
Command-line: --enable-automation
browser = await launch(headless=False, args=['--disable-blink-features=AutomationControlled'])
缺点:仅对部分旧版本有效
await page.evaluateOnNewDocument('''() => {
delete navigator.__proto__.webdriver;
}''')
注意:需要在页面加载前执行
async def stealth_mode(page):
await page.evaluateOnNewDocument('''() => {
const originalQuery = window.navigator.permissions.query;
window.navigator.permissions.query = (parameters) => (
parameters.name === 'notifications' ?
Promise.resolve({ state: Notification.permission }) :
originalQuery(parameters)
);
Object.defineProperty(navigator, 'webdriver', {
get: () => false,
});
}''')
# 移除自动化标志
await page._client.send('Page.addScriptToEvaluateOnNewDocument', {
'source': '''
Object.defineProperty(navigator, 'webdriver', {
get: () => undefined,
});
'''
})
from pyppeteer import launch
import random
async def create_stealth_browser():
browser = await launch(headless=True, args=[
'--no-sandbox',
'--disable-setuid-sandbox',
'--disable-infobars',
'--window-position=0,0',
f'--user-agent={generate_random_ua()}',
'--disable-web-security'
])
page = await browser.newPage()
await stealth_mode(page) # 调用前面的函数
# 设置视窗大小随机化
await page.setViewport({
'width': random.randint(1200, 1920),
'height': random.randint(800, 1080)
})
return browser, page
async def check_stealth(page):
result = await page.evaluate('''() => ({
webdriver: window.navigator.webdriver,
plugins: navigator.plugins.length,
languages: navigator.languages,
})''')
print("Detection results:", result)
page.goto()
前执行脚本robots.txt
# 添加合规延迟
await page.waitFor(3000 + random.randint(0,2000))
通过本文介绍的技术,您应该能够有效隐藏Pyppeteer的自动化特征。需要注意的是,反检测技术是与网站安全措施持续博弈的过程,建议定期更新检测方案。理想情况下,应结合IP轮换、行为模拟等技术构建完整的反反爬体系。
最后更新:2023年11月 | 作者:助手 | 转载请注明出处 “`
这篇文章包含了: 1. 问题背景和技术原理 2. 分层次的解决方案 3. 验证方法和调试技巧 4. 法律合规建议 5. 完整的代码示例
总字数约1350字,采用Markdown格式,包含代码块、列表、标题层级等标准元素。可根据需要进一步扩展特定章节的细节。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。