selenium繞過爬蟲特征檢測


以下轉自:

Python + selenium 如何繞過爬蟲特征檢測?

在信息時代,數據變得越來越重要。然而並不是每一家公司都是騰訊、百度、知乎、字節跳動等,在日常業務中就可以產生大量的內容或用戶數據。很多人在互聯網獲取數據時,都是使用爬蟲獲取,而爬蟲也是一種最經濟實惠的獲取數據手段。

但爬蟲需要遵守 robot 協議,並且在不損害目標服務器的情況下進行。然而,很多爬蟲卻不理會 robot 協議,並且不對爬取頻率進行限制,高並發的爬蟲嚴重占用了服務器的資源,並會影響真正用戶的體驗。所以,現在很多公司都專門的反爬團隊,爬與反爬之間,不斷博弈,技術不斷升級,從某種意義上,這也是促進了行業的進步。

很多爬蟲新手常常抱怨自己寫的爬蟲 demo 獲取的內容和自己手動打開瀏覽器的不一樣。這種往往是連 user agent 沒有設置、請求頻率都沒有控制,第一時間就被檢測到時非用戶訪問,不把你放進蜜罐才怪呢。

爬蟲技術,是一種非常綜合的技術。不是你學會 request,學會用 bs 解析 html 並保存內容就學會了,你只會這些,也就只能爬取一些小站或者 demo 頁面。爬蟲的難點往往在於如何繞過爬蟲識別,即反反爬蟲。

如果你需要爬取如知乎、淘寶,往往需要借助 selenium 工具。我在 2011 年的時候就接觸過 selenium,那時用 selenium + cucumber + ruby 來做自動化測試,那時的 selenium 也沒有現在那么完善。

那么該如何繞過爬蟲識別呢?

selenium webdriver 有哪些爬蟲特征,我不復制黏貼了,網上很多文章都有了。而為了方便,可以直接打開這個頁面去檢測:Antibot

如下圖所示,左邊是正常打開的頁面,右邊是用 selenium webdriver 打開的頁面。紅線框里面的內容就是爬蟲特征。當然,如果你使用 headless 模式,會有更加多的爬蟲特征被檢測出來。

以下一步步消除這些特征。

 

1. “Chrome 正受到自動測試軟件的控制。”

selenium 提供了接口去消除這個,你只需要在你的代碼里面加入:

options.add_experimental_option('excludeSwitches', ['enable-automation'])

 

2. WebDriver (New) present (failed)

這個可以通過禁用 blink 特征。Blink 是 Chromium 的渲染引擎,V8 也是基於 Blink 開發的 JavaScript 引擎,具體原理我沒有搞明白,猜測是 selenium 使用了一些 Blink 的特征,而原來 Chrome 是沒有的。

options.add_argument('--disable-blink-features=AutomationControlled')

 

3. “webDriver”: true, “webDriverValue”: true

關於這點,可以看上圖左右兩邊,不管我是手動打開,還是用腳本打開,webdriver 都已經被標記為 true。我猜測是因為我曾經使用 selenium 打開這個爬蟲特征檢測網站,它已經記錄了我的瀏覽器指紋,所以現在不管我是用 selenium 打開還是手動打開,都已經被標記為 true。所以,如果你曾經用腳本打開過某些網站,那么你很大概率都已經被對方記錄了瀏覽器指紋,從而把你標記為疑似爬蟲訪問,而不敢你是不是真實訪問。

那么思路就是隱藏瀏覽器指紋了。

Python 的 pyppeteer 可以用來隱藏瀏覽器指紋,但這個類庫從 2018 年就已經沒更新了,但谷歌團隊維護的 puppeteer/puppeteer 卻一直在更新。因此,國外有個叫 berstend 的開發者,寫了一個 puppeteer-extra 插件來提取隱藏瀏覽器指紋特征的 js 腳本 stealth.min.js,那么我們用 selenium 打開頁面之前,運行這個腳本,就可以成功隱藏瀏覽器指紋了。

如果你的環境已經安裝了 nodejs,那么直接運行下面命令,就會在你當前的目錄生成 stealth.min.js 文件了。

npx extract-stealth-evasions

想了解具體過程的朋友,可以查看:berstend/puppeteer-extra

最后,在 python 里面,加入下面代碼:

with open('./js/stealth.min.js') as f:
    js = f.read()

browser.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
    "source": js
})

運行后,瀏覽器指紋特征也被隱藏了。

 

參考資料:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM