一、無頭模式
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
