Python 爬蟲雜記 - Chrome Headless

Chrome Headless使用

測試 Chrome 版本: 62.0.3202.89(正式版本)(64 位)
Python環(huán)境:python2.7

注: Headless模式需要59版本及以上!

Chrome的安裝與配置不在此贅述, 不過需要注意的是:

版本號與驅(qū)動的映射關(guān)系!
版本號與驅(qū)動的映射關(guān)系??!

版本號與驅(qū)動的映射關(guān)系!?。?/h3>

Chrome與Chromedriver的映射關(guān)系表:


Chromedriver下載鏈接:http://chromedriver.storage.googleapis.com/index.html

1. 使用Headless模式
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
# 無頭模式啟動
chrome_options.add_argument('--headless')
# 谷歌文檔提到需要加上這個屬性來規(guī)避bug
chrome_options.add_argument('--disable-gpu')
# 初始化實例
driver= webdriver.Chrome(chrome_options=chrome_options)
# 請求百度
driver.get("http://www.baidu.com")
2. 禁用圖片
2.1 網(wǎng)上大多數(shù)的資料給的是以下這種方式, 但是在Headless的模式下并沒有生效, 在非Headless的模式下是生效的。
prefs = {"profile.managed_default_content_settings.images": 2}
chrome_options.add_experimental_option("prefs", prefs)
2.2 以下的這種方式在Headless的模式下是生效的, 非Headless模式下也是生效的。
chrome_options.add_argument('blink-settings=imagesEnabled=false')
3. 添加代理
chrome_options.add_argument("--proxy-server=http://" + ip:port)
4. 修改User-Agent
Chrome Headless模式為什么要修改User-Agent, 來看一下同一個瀏覽器不同模式下的User-Agent:
"User-Agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/62.0.3202.89 Safari/537.36"
"User-Agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36"
# 修改User-Agent
chrome_options.add_argument('user-agent= '你想修改成的User-Agent')
5. 打開新的標(biāo)簽頁
#打開空白標(biāo)簽頁的方式有很多, 在此只演示一種
js='window.open("http://www.itdecent.cn/p/4fef4142b33f");'
driver.execute_script(js) # 通過打開新的標(biāo)簽頁, 可以節(jié)省瀏覽器打開的時間,減少資源的浪費。
6. 關(guān)閉新打開的標(biāo)簽頁
# 分兩步走
# 1.獲取標(biāo)簽頁的句柄
handlesList = driver.window_handles  # 返回一個瀏覽器中所有標(biāo)簽的句柄列表, 順序為打開窗口的順序
# 2. 切換窗口, 關(guān)閉標(biāo)簽
driver.switch_to.window(handlesList[0]) # 切換到百度標(biāo)簽
driver.close()    # 關(guān)閉標(biāo)簽,這里必須用 driver.close() ,用driver.quit()會導(dǎo)致瀏覽器關(guān)閉
7. driver使用完之后切記要driver.quit(), 不然或?qū)е聝?nèi)存爆滿
8. 其他:

切換標(biāo)簽的時候,我之前用的方法會出現(xiàn)這種狀況, 原因是該方法不支持了:

不支持的不只是這一種, 還有如下:

driver.switch_to_active_element()       ==>    driver.switch_to.active_element()            定位到當(dāng)前聚焦的元素上

driver.switch_to_alert()                ==>    driver.switch_to.alert()                     切換到alert彈窗

driver.switch_to_default_content()      ==>    driver.switch_to.default_content()           切換到最上層頁面
                                               
driver.switch_to_frame(frame_reference)  ==>   driver.switch_to.frame(frame_reference)       通過id、name、element(定位的某個元素)、索引來切換到某個frame

driver.switch_to_window()                ==>   driver.switch_to.window()                     切換到指定的標(biāo)簽頁

driver.switch_to.parent_frame()  switch_to中獨有,可以切換到上一層的frame,對于層層嵌套的frame很有用

注: 用pycharm編程的時候還是提示switch_to_window, 但此方法已經(jīng)不能用了!!

本人水平有限, 如有錯誤歡迎提出指正!如有參考, 請注明出處!!禁止抄襲,遇抄必肛!??!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 人的一生都會扮演很多角色,如果你不高興,你可以把劇本扔了。不過記住,有一份劇本是真正屬于你的,千萬別丟錯了-呂子喬
    最怕突然聽到你的消息閱讀 259評論 0 0
  • 為什么會做不到逐字閱讀了?我們每天主動或者被動的接受各種信息,大部分是無用的,QQ、朋友圈、微博、頭條還有時不時跳...
    張學(xué)安閱讀 371評論 0 0
  • 如題~ 因為不自主!
    fad5a0d798e9閱讀 240評論 0 0
  • 讀《思考致富》非常熟悉,因為在這之前閱讀了《秘密》。兩本書講述的是一個原理:心想事成! 《秘密》展示的是一種神秘感...
    顧鳴芬閱讀 647評論 0 1
  • 這張臉沒有一絲的表情,長得遠(yuǎn)談不上周正,右邊沒左邊大。隔近了看,極其陌生。 這是一張油膩膩的臉,坑坑洼洼隨處可見,...
    上校YIN閱讀 3,202評論 0 4

友情鏈接更多精彩內(nèi)容