# 如何正確移除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格式,包含代碼塊、列表、標題層級等標準元素??筛鶕枰M一步擴展特定章節的細節。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。