selenium被反爬後的幾個方案,主要針對window.navigator.webdriver特徵被檢測

https://www.cnblogs.com/superhin 這個人的博客給了我啓發。

1. 使用開發者模式

chrome_option = webdriver.ChromeOptions()
chrome_option.add_experimental_option('excludeSwitches', ['enable-automation'])
webdriver = webdriver.Chrome(options=chrome_option)

使用開發者模式簡單快捷,但是缺點也很明顯,僅僅在首次登陸時候window.navigator.webdriver檢測不到,登陸以後當有新的表單提交時候,就會被檢測到。之後被反爬後滑塊驗證碼一般都通過不了。

2. 中間攔截js

使用mitmproxy用中間人的方式截取服務器發送來的js,修改js裏面函數的參值方式發送給服務器。相當於在browser和server之間做一層中間件的攔截。不過此方法要對js非常熟悉的人才好實施。但是效率高啊,網上教程也很多。

3. 修改webdriver

修改chromedriver中與webdriver相關的特徵,重新編譯chromedriver生成.exe,但是源碼找不着。。。。。。。退而求其次,Selenium執行cdp命令調用chrome瀏覽器的開發者工具,給window.navigator對象定義一個webdriver屬性,並且設置爲undefined,以繞過js的檢測。

webdriver = webdriver.Chrome()

webdriver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
  "source": """
    Object.defineProperty(navigator, 'webdriver', {
      get: () => undefined
    })
  """

})

另附上個人博客地址:
http://dazuili.cn/blog/29

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章