1. 程式人生 > 其它 >Selenium被檢測為爬蟲,怎麼遮蔽和繞過

Selenium被檢測為爬蟲,怎麼遮蔽和繞過

Selenium 操作被遮蔽

使用selenium自動化網頁時,有一定的概率會被目標網站識別,一旦被檢測到,目標網站會攔截該客戶端做出的網頁操作。

比如淘寶和大眾點評的登入頁,當手工開啟瀏覽器,輸入使用者名稱和密碼時,是能正常進入首頁的,但是如果是通過selenium開啟, 會直接提示驗證失敗,點選框體重試。

本文介紹一種辦法,不需要修改瀏覽器屬性,不需要注入JavaScript指令碼,也能輕鬆繞過網站檢測。

Selenium為何會被檢測

每一個瀏覽器訪問網站時,都會帶上特定的指紋特徵,網站會解析這些特徵,從而判斷這次訪問是不是自動化程式。

一個最廣為人知的特徵是window.navigator.webdriver

,該特徵直接標明此瀏覽器是webdriver程式。當一個瀏覽器通過selenium啟動後,在開發者工具中輸入這個屬性,會發現被標為 true, 而手工開啟的瀏覽器是 false。

實際上,瀏覽器被檢測為webdriver程式的特徵並不止這一個,這意味著,就算你通過修改屬性,也不一定能繞過網站的檢測。

我們可以通過 sannysoft 來檢測瀏覽器指紋,如果瀏覽器是通過selenium等自動化程式開啟的,訪問這個網址後會有很多特徵暴露這些指紋,這些特徵的值和手工開啟後的值是不一樣的,因此可以很輕易被別人檢測出來。

有人也試圖不用selenium,換成puppeter和playwright這樣的自動化工具,但是結局都是一樣的。

Selenium避免被檢測方法

瀏覽器在啟動時就會帶上指紋特徵,如果使用自動化程式啟動時已經被標記,那為什麼不直接用手工啟動,然後用Selenium連線已經啟動的瀏覽器呢?

那手工開啟瀏覽器要做什麼操作才能讓Selenium連線呢?Selenium又是怎樣連線手工開啟的瀏覽器呢?

程式設計師 https://www.dianjilingqu.com/

1、開啟瀏覽器時新增以下引數:

--remote-debugging-port=9222 --user-data-dir="C:\selenium\ChromeProfile"

2、selenium中設定瀏覽器選項,通過上面設定的 9222埠連線瀏覽器:

from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
driver = webdriver.Chrome(options=chrome_options)

通過 subprocess 執行瀏覽器

當然,做自動化程式一般不會手工點選圖示來開啟瀏覽器,我們可以用命令列啟動瀏覽器,然後再用 selenium 連線。

import subprocess
cmd = '"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" ' \
'--remote-debugging-port=9222 ' \
'--user-data-dir="C:\selenium\ChromeProfile"'

subprocess.run(cmd)