爬蟲(三)通過Selenium + Headless Chrome爬取動態網頁


一、Selenium

Selenium是一個用於Web應用程序測試的工具,它可以在各種瀏覽器中運行,包括Chrome,Safari,Firefox 等主流界面式瀏覽器。

 

我們可以直接用pip install selenium來進行安裝。

 

中文翻譯文檔:https://selenium-python-zh.readthedocs.io/en/latest/index.html

官方文檔:https://selenium-python.readthedocs.io/

二、Headless Chrome

Headless Chrome是Chrome瀏覽器提供的無界面形態,可以在不打開瀏覽器的前提下,使用所有 Chrome 支持的特性運行你的程序。相比於現代瀏覽器,Headless Chrome 更加方便測試 web 應用,獲得網站的截圖,做爬蟲抓取信息等。相比於出道較早的 PhantomJS,SlimerJS 等,Headless Chrome 則更加貼近瀏覽器環境。

 

我們可以在http://chromedriver.chromium.org/(此網站需要翻牆)或者http://chromedriver.storage.googleapis.com/index.html下載對應Chrome瀏覽器版本的chrome driver。

 

需要注意的是mac和linux環境要求chrome版本是59+,而windows版本的chrome要求是60+。下載成后把chromedriver.exe復制到Python安裝路徑下的Scripts目錄中。

 

更詳細的資料可以查看Headless Chrome官方文檔

 

三、使用Selenium + Headless Chrome

實例一:初步使用

from selenium import webdriver

chrome_options = webdriver.ChromeOptions()
#設置無界面模式
chrome_options.add_argument("--headless")
#禁用gpu
chrome_options.add_argument("--disable-gpu")
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get('https://www.baidu.com/')
print('打開瀏覽器')
print(driver.title)
driver.find_element_by_id('kw').send_keys('測試')
print('關閉')
driver.quit()
print('測試完成')

實例二:模擬在淘寶上搜索

from selenium import webdriver

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--disable-gpu")
browser = webdriver.Chrome(options=chrome_options)

browser.get("http://www.taobao.com")
input_str = browser.find_element_by_id('q')
#在搜索欄輸入字符
input_str.send_keys("襯衣")
#等待一秒
browser.implicitly_wait(1)
#清空搜索欄
input_str.clear()
input_str.send_keys("褲子")
#尋找搜索按鈕
button = browser.find_element_by_xpath('//*[@id="J_TSearchForm"]/div[1]/button')
button.click()
#退出
browser.quit()

實例三:爬取包含Ajax的動態網頁數據

from selenium import webdriver

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--disable-gpu")
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get("http://pythonscraping.com/pages/javascript/ajaxDemo.html")
# driver.page_source
driver.implicitly_wait(3)
print(driver.find_element_by_id("content").text)
driver.close()

注意driver.quit()是退出驅動並關閉所有窗口,而driver.close()是關閉當前窗口。當只有一個窗口時,兩者結果是一樣的。

 


免責聲明!

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



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