一、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()是關閉當前窗口。當只有一個窗口時,兩者結果是一樣的。