溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何正確移除中Pyppeteer的window.navigator.webdriver

發布時間:2021-12-04 19:23:57 來源:億速云 閱讀:181 作者:柒染 欄目:大數據
# 如何正確移除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底層原理分析

2.1 Chromium與CDP協議

Pyppeteer通過Chrome DevTools Protocol(CDP)控制瀏覽器,當啟用自動化模式時: - Chrome會自動設置navigator.webdriver=true - 修改部分API行為(如Notification.permission

2.2 默認暴露的特征

通過chrome://version/可見:

Command-line: --enable-automation

三、基礎解決方案

3.1 啟動參數法(不推薦)

browser = await launch(headless=False, args=['--disable-blink-features=AutomationControlled'])

缺點:僅對部分舊版本有效

3.2 頁面評估覆蓋法

await page.evaluateOnNewDocument('''() => {
    delete navigator.__proto__.webdriver;
}''')

注意:需要在頁面加載前執行


四、高級解決方案

4.1 CDP覆蓋法(推薦)

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,
            });
        '''
    })

4.2 完整指紋偽裝方案

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

五、驗證解決方案有效性

5.1 自動化檢測測試網站

5.2 本地驗證腳本

async def check_stealth(page):
    result = await page.evaluate('''() => ({
        webdriver: window.navigator.webdriver,
        plugins: navigator.plugins.length,
        languages: navigator.languages,
    })''')
    print("Detection results:", result)

六、常見問題排查

6.1 仍然被檢測到的可能原因

  1. 未在page.goto()前執行腳本
  2. 存在其他指紋特征(如WebGL渲染)
  3. 瀏覽器版本與補丁不匹配

6.2 性能優化建議

  • 復用瀏覽器實例
  • 預加載stealth腳本
  • 合理設置等待時間

七、法律與倫理考量

7.1 合法使用原則

  • 遵守目標網站robots.txt
  • 控制請求頻率(建議≥3秒/次)
  • 不繞過付費墻或獲取敏感數據

7.2 推薦做法

# 添加合規延遲
await page.waitFor(3000 + random.randint(0,2000)) 

結語

通過本文介紹的技術,您應該能夠有效隱藏Pyppeteer的自動化特征。需要注意的是,反檢測技術是與網站安全措施持續博弈的過程,建議定期更新檢測方案。理想情況下,應結合IP輪換、行為模擬等技術構建完整的反反爬體系。

最后更新:2023年11月 | 作者:助手 | 轉載請注明出處 “`

這篇文章包含了: 1. 問題背景和技術原理 2. 分層次的解決方案 3. 驗證方法和調試技巧 4. 法律合規建議 5. 完整的代碼示例

總字數約1350字,采用Markdown格式,包含代碼塊、列表、標題層級等標準元素??筛鶕枰M一步擴展特定章節的細節。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女