selenium 無頭模式 以及防止被檢測


一、無頭模式

from selenium import webdriver
from selenium.webdriver.chrome.options import Options # => 引入Chrome的配置
import time

# 配置
ch_options = Options()
ch_options.add_argument("--headless")  # => 為Chrome配置無頭模式

# 在啟動瀏覽器時加入配置
driver = webdriver.Chrome(options=ch_options) # => 注意這里的參數

driver.get('http://baidu.com')
driver.find_element_by_id('kw').send_keys('測試')
driver.find_element_by_id('su').click()

time.sleep(2)

# 只有截圖才能看到效果咯
driver.save_screenshot('./ch.png')

driver.quit()

 

 

二、防止被檢測

防止網站識別Selenium代碼(針對老版本)

from selenium.webdriver import Chrome
from selenium.webdriver import ChromeOptions

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

url = "fudan.bbs.kaoyan.com"  # 首頁
bro.get("http://fudan.bbs.kaoyan.com/")
bro.implicitly_wait(10)

 

新版本如下:

from selenium.webdriver import Chrome
from selenium.webdriver import ChromeOptions

options = ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-automation'])
options.add_experimental_option('useAutomationExtension', False)

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

url = "fudan.bbs.kaoyan.com"  # 首頁
bro.get("http://fudan.bbs.kaoyan.com/")
bro.implicitly_wait(10)

 

 

它是怎么做的的呢?一般情況下,我們使用Selenium打開一個網頁時,會有一個提示:Chrome正受到自動測試軟件的控制。

 

 

 

然后打開調試工具,點擊consile,輸入代碼

window.navigator.webdriver

結果如下:

 

以淘寶為首,眾多網站都針對 Selenium的js監測機制,就是上面的方法實現的。

 

那么如何解決呢?

只需要設置Chromedriver的啟動參數即可解決問題。

在啟動Chromedriver之前,為Chrome開啟實驗性功能參數excludeSwitches,它的值為['enable-automation'],代碼同上。

運行上面的代碼,就沒有Chrome正受到自動測試軟件的控制的提示了。

 

 

再次js代碼

 

 發現已經是undefined了,這樣才是一個正常的瀏覽器了。

 

 

本文參考鏈接:

https://www.cnblogs.com/wukai66/p/12773479.html

https://zhuanlan.zhihu.com/p/117506307

 


免責聲明!

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



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