Selenium-網路資料採集工具庫-初學篇
阿新 • • 發佈:2018-12-15
目錄
庫介紹
Selenium是一個強大的網路資料採集工具(http://www.seleniumhq.org/),最初是為網站自動化測試而開發,同時也它們也可以執行在瀏覽器上。在Python中應用功能主要如下:
- 讓瀏覽器自動載入頁面
- 獲取瀏覽器網頁載入的資料
- 頁面截圖
- 判斷網站上某些動作是否發生
專案環境
作業系統:win10
python版本:3.6
解析器:pycharm2018
Selenium文件:
使用流程
一、下載並安裝selenium庫
2、通過三方管理器pip下載:
$ pip install selenium
二、下載第三方瀏覽器驅動
Selenium自己不帶瀏覽器,需要與第三方瀏覽器結合使用。
1、通過PhantomJS讓程式在後臺執行(下載地址:http://phantomjs.org/download.html)它會把網頁載入到記憶體並執行頁面上的JavaScript,但不會展示網頁的圖形介面。可以處理cookie,JavaScript,header等,現在Selenium庫已經不支援PhantomJS。
2、選擇在瀏覽器Chrome/Firefox上執行Selenium:
三、案例
(一)Ajax網頁測試
from selenium import webdriver import time # 用瀏覽器執行selenium,需要將下載的chromedriver.exe儲存在對應python工程下或指定其他地址 driver = webdriver.Chrome() # chromedriver這裡放在工程目錄下 # 開啟網頁 driver.get('http://pythonscraping.com/pages/javascript/ajaxDemo.html') # Ajax測試,由於測試網頁有ajax載入2秒,所以這裡暫停執行3秒 time.sleep(3) print(driver.find_element_by_id('content').text) # 關閉網頁 driver.close()
(二)檢測網頁載入成功後再執行
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 建立webdriver driver = webdriver.Chrome() # 開啟網頁 driver.get('http://pythonscraping.com/pages/javascript/ajaxDemo.html') # 檢測網頁執行。是否出現某個元素後執行 try: # driver等待10秒,直到網頁出現元素標籤ID名為loadedButton elements = WebDriverWait(driver, 10).until(EC.presence_of_element_located(locator=(By.ID, 'loadedButton'))) finally: # 抓取content元素中的文字 print(driver.find_element_by_id('content').text) # 關閉網頁 driver.close()
說明:
- 一般通過WebDriverWait類和expected_conditions類來實現隱式的等待。
- locator定位器物件,用來定位網頁元素
- 一般定位:ID/CLASS_NAME/CSS_SELECTOR/LINK_TEXT/PARTIAL_LINK_TEXT/NAME/TAG_NAME/XPATH
(三)處理重定向
from selenium import webdriver
import time
from selenium.common.exceptions import StaleElementReferenceException
def waitForLoad(driver):
elem = driver.find_element_by_tag_name('html')
count = 0
while True:
count += 1
if count > 20:
print('Timing out after 10 seconds and returning')
return
time.sleep(.5)
try:
elem == driver.find_element_by_tag_name('html')
except StaleElementReferenceException as e:
print(e)
return
# 建立webdriver
driver = webdriver.Chrome()
# 開啟網頁
driver.get('http://pythonscraping.com/pages/javascript/redirectDemo1.html')
# 檢測網頁執行。是否出現某個元素後執行
try:
waitForLoad(driver)
finally:
print(driver.page_source)
# 關閉網頁
driver.close()
說明:可以通過異常類StaleElementReferenceException,來實現監控網頁變化的效果。當driver無法捕捉到html元素標籤,則觸發異常,等同於網頁已經實現重定向。