問題
首先回顧前兩篇selenium系列selenium爬蟲使用了代理為什么還是被服務器判定為機器人?以及selenium爬蟲使用代理情況下不設置這幾個參數,代理就白加了,正確的關閉webrtc以及設置成代理的時區和地理位置,可以很好的幫我們的瀏覽器偽裝成正兒八經的正常瀏覽器,猶如濾鏡可以把王大媽變身成風靡萬千宅男的喬碧蘿。但是,這還不夠,風控系統有各種方式可以將你揪出來。所以應粉絲的要求,今天動筆了:
怎么如德芙般絲滑地去掉selenium煩人的webdriver痕跡?
原因
原因很簡單,我們使用selenium+chromedriver啟動chrome的時候,會在chrome的navigator以及document對象里注入一些屬性,如果web服務器返回的js代碼里有對這些屬性的檢測,那我們就會被識別為機器人在訪問。
解決方案
解決方案邏輯上很簡單,就是selenium額外加了什么我們去除掉什么。
我們先上沒有去掉webdriver的selenium代碼
from selenium import webdriver chrome_options = webdriver.ChromeOptions() chrome_options.add_experimental_option( "excludeSwitches", ["enable-automation"]) chrome_options.add_experimental_option('useAutomationExtension', False) chrome_options.add_argument('lang=zh-CN,zh,zh-TW,en-US,en') chrome_options.add_argument( 'user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36') driver = webdriver.Chrome( "./chromedriver", chrome_options=chrome_options) driver.get("https://bot.sannysoft.com/")
測試結果截圖:
我們可以看到,webdriver被檢測出來了,也就是說服務器知道你使用了selenium訪問其網站。
我們上去掉webdriver的代碼的selenium代碼
from selenium import webdriver chrome_options = webdriver.ChromeOptions() chrome_options.add_experimental_option( "excludeSwitches", ["enable-automation"]) chrome_options.add_experimental_option('useAutomationExtension', False) chrome_options.add_argument('lang=zh-CN,zh,zh-TW,en-US,en') chrome_options.add_argument( 'user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36') chrome_options.add_argument("disable-blink-features=AutomationControlled")#就是這一行告訴chrome去掉了webdriver痕跡 driver = webdriver.Chrome( "./chromedriver", chrome_options=chrome_options) driver.get("https://bot.sannysoft.com/")
測試結果截圖:
我們可以看到通過在chrome啟動的時候加一個disable-blink-features=AutomationControlled的flag就可以實現降維打擊,移除掉webdriver的痕跡,媽媽再也不用擔心你加班了……
如果你們認為做到以上:關閉webrtc、設置瀏覽器時區和地理位置、去掉webdriver就高枕無憂了嗎?
No,這還不夠,服務器還能揪出你,你只能給老板發送以下短信。
然后繼續加班。 想知道更多的反檢測方式,咱們下期見!
圖片源自:手游