使用python3.6在Ubuntu中進行了一項使用Chrome headless瀏覽器的工做, 在此記錄下遇到的問題以及解決方法.
參考 unning-selenium-with-headless-chromepython
參考 Installing ChromeDriver on Ubuntulinux
from selenium.webdriver.chrome.options import Options chrome_options = Options() chrome_options.add_argument('window-size=1920x3000') #指定瀏覽器分辨率 chrome_options.add_argument('--disable-gpu') #谷歌文檔提到須要加上這個屬性來規避bug chrome_options.add_argument('--hide-scrollbars') #隱藏滾動條, 應對一些特殊頁面 chrome_options.add_argument('blink-settings=imagesEnabled=false') #不加載圖片, 提高速度 chrome_options.add_argument('--headless') #瀏覽器不提供可視化頁面. linux下若是系統不支持可視化不加這條會啓動失敗 chrome_options.binary_location = r'/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary' #手動指定使用的瀏覽器位置
須要在打開瀏覽器後, 獲取瀏覽器的command_executor url
, 以及session_id
web
opener.command_executor._url, opener.session_id #opener爲webdriver對象
以後經過remote
方式連接chrome
from selenium import webdriver opener = webdriver.Remote(command_executor=_url,desired_capabilities={}) #_url爲上面的_url opener.close() #這時會打開一個全新的瀏覽器對象, 先把新的關掉 opener.session_id = session_id #session_id爲上面的session_id
以後對opener
的任何操做都會反映在以前的瀏覽器上.瀏覽器
--headless
這樣的瀏覽器參數from selenium.webdriver.common.desired_capabilities import DesiredCapabilities capabilities = DesiredCapabilities.CHROME capabilities.setdefault('chromeOptions', {'args':['--headless', '--disable-gpu']})
chromedriver not in PATH
初始化的時候, 傳入chromedriver絕對路徑安全
opener = webdriver.Chrome(r'/usr/local/bin/chromedriver', chrome_options=chrome_options)
opener.get_cookies()
opener.add_cookie(cookie) #須要先訪問該網站產生cookies後再進行覆寫
opener.implicitly_wait(30) #30是最長等待時間
cookie
偏向使用js函數來執行網絡
opener.execute_script('''window.open("http://baidu.com","_blank");''')
有些時候頁面在你點擊後會異步進行請求, 完成一些操做, 這時可能就會生成輸出數據的url, 只要抓到這個url就能夠跳過token驗證等安全監測, 直接得到數據.session
script = "var performance = window.performance || window.mozPerformance || window.msPerformance || window.webkitPerformance || {}; var network = performance.getEntries() || {}; return network;" performances = opener.execute_script(script)
script裏是js代碼, 通常用來進行性能檢查, 網絡請求情況, 使用selenium執行這段js就能夠得到全部的請求信息.app
おわり.