selenium 參數設置
selenium啟動chrome基本上與真實環境類似,但有一些變量還是不一樣,需要注意。
有些網站通過這些參數識別爬蟲。
window.navigator.webdriver
值為undefined是正常的瀏覽器,返回true說明用的是Selenium模擬瀏覽器。
這里給出一個檢測Selenium的js代碼例子
webdriver = window.navigator.webdriver;
if(webdriver){ console.log('Selenium模擬瀏覽器')
} else { console.log('正常瀏覽器')}
解決辦法:
第一種:使用mitmproxy用中間人的方式截取服務器發送來的js,修改js里面函數的參值方式發送給服務器。相當於在browser和server之間做一層中介的攔截。不過此方法要對js非常熟悉。
第二種:通過selenium,設置Chromedriver的啟動參數。
在啟動Chromedriver之前,為Chrome開啟實驗性功能參數excludeSwitches,它的值為['enable-automation'],完整代碼如下:
from selenium.webdriver import Chrome
from selenium.webdriver import ChromeOptions
option = ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation'])
driver = Chrome(options=option)
此時啟動的Chrome窗口,在右上角會彈出一個提示,不用管它,不要點擊停用按鈕。
再次查詢window.navigator.webdriver,可以發現這個值已經自動變成undefined。並且無論打開新網頁,開啟新窗口還是點擊鏈接進入其他頁面,都不會讓它變成true。