selenium自動化測試爬取動態頁面大全

  這裏之講解用法,安裝配置就不詳細講解了。我比較喜歡的瀏覽器驅動是ChromeDriver和無界面的PhantomJS。css

一:瀏覽器信息測試

1.初始化瀏覽器

  用下面的代碼初始化瀏覽器java

from selenium import webdriver

# 把瀏覽器對象賦值爲browser對象,而後就能夠進行模擬瀏覽器操做
browser = webdriver.Chrome()

2.訪問網頁

browser.get('url地址')
# 這個是打印網頁源代碼
print(browser.page_source)
browser.close() # 處理完後要關閉這個對象

二:查找結點

  咱們要想執行某個操做,好比填充表單,模擬點擊等,或者向某個輸入框輸入文字,首先要知道位置,而selenium提供了一系列的查找節點的方法,以下。python

1.單個節點

查找方法 說明
find_element_by_id 經過id來查找標籤
find_element_by_name 經過name屬性來查找標籤
find_element_by_xpath 經過xpath來查找標籤
find_element_by_link_text 經過連接的文字來查找標籤
find_element_by_partial_link_text 經過連接的關鍵字來查找標籤
find_element_by_tag_name 經過標籤名來查找標籤
find_element_by_class_name 經過class的屬性來查找標籤
find_element_by_css_selector 經過css選擇器來查找標籤

還有一種通用方法是find_element()傳兩個參數,一個是By.查找方式,一個是值,好比find_element(By.ID,id)和find_element_by_id結果一致。web

2.多個節點

  查找多個節點的時候,直接在查找單個節點的方法中加上s,如find_elements_by_name或者find_elements(By.NAME,name),列表中的每個節點都是WebElement類型。ajax

三:測試動做

1.簡單的交互

  selenium能夠驅動瀏覽器執行一些操做,就是讓瀏覽器模擬執行一些動做。下面是一些常見方法總結。windows

方法 說明
send_keys 輸入文字
clear 清空文字
click 點擊按鈕

2.特殊的交互

  有一些交互操做沒有特定的執行對象,好比鼠標拖曳,鍵盤按鍵等,這些相對複雜的動做用動做鏈的方式執行。這裏暫時用不到,先略過。瀏覽器

3.模擬運行JavaScript

  用execute_script()方法能夠模擬運行JavaScript,基本上全部複雜的動做均可以用執行JavaScript的方式來實現。cookie

四:獲取節點信息

  用 get_attribute() 方法來獲取節點的屬性。
  用 text 屬性來獲取節點的文本值。
  用 id 屬性來獲取節點id。
  用 location 屬性來獲取節點在頁面中的相對位置。
  用 tag_name 屬性來獲取標籤名稱。
  用 size 屬性來獲取節點的大小。網絡

五:切換子頁面Frame

  網頁有一種節點是iframe,也就是子Frame,至關於頁面的子頁面。網頁打開的時候,默認是在父級Frame裏面進行操做,要獲取子Frame的節點,須要用到switch_to.frame()方法進行切換。
  用switch_to.parent_frame()能夠獲取到父頁面的內容。

六,延時請求

  在selenium中,get()方法會在網頁框架加載完成後結束執行,此時若是獲取網頁源碼,可能並非瀏覽器徹底加載的頁面,若是有額外的ajax請求,網頁源代碼也不必定能成功獲取,須要延時等待必定時間,確保 動態網頁源代碼 所有加載出來。
  等待方式有兩種,一種是隱式等待,一種是顯式等待。

1.隱式等待

  隱式等待就是通常的等待,在執行測試的時候,先等待完以後,再進行接下來的步驟,用implicitly_wait(),參數是時間。

2.顯式等待

  隱式等待的效果並無那麼好,只是規定了一個固定的時間,而網頁的加載時間會受到網絡條件的影響。
  這裏有一個顯式等待的方法就是指定要查找的節點,而後指定一個最長等待時間,在規定的時間內加載出來就返回,加載不出來,則拋出異常。
示例以下:

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

browser = webdriver.Chrome()
browser.get('url地址')
# 先指定最長等待時間爲20s
wait = WebDriverWait(browser,20)
# 傳入等待條件expected_conditions,這裏的presence_of_element_located表明節點出現的意思
input = wait.until(EC.presence_of_element_located(By.ID,'a'))
# 按鈕等待條件,這裏的element_to_be_clickable表示可點擊的,10秒內能點擊,就成功
button = wait.until(EC.element_to_be_clickable(By.CSS_SELECTOR,'.btn-ss'))
print(input,button)

下面是 全部的等待條件

等待條件 說明
title_is 標題是某內容
title_contains 標題包含某內容
presence_of_all_elements_located 某個節點是否加載出來
visibility_of_element_located 某個節點是否可見
visibility_of 某個節點是否可見,傳入節點對象
presence_of_all_elements_located 全部節點加載出來
text_to_be_present_in_element 某個節點文本包含某文字
text_to_be_present_in_element_value 某個節點值包含某文字
frame_to_be_available_and_switch_to_it 加載並切換
invisibility_of_element_located 節點不可見
element_to_be_clickable 節點可點擊
staleness_of 判斷一個節點是否存在DOM,可判斷頁面是否已刷新
element_to_be_selected 節點可選擇,傳入節點對象
element_located_to_be_selected 節點可選擇,傳入定位元組
element_selection_state_to_be 傳入節點對象以及狀態,相等返回True,不然返回False
element_located_selection_state_to_be 傳入定位元組以及狀態,相等返回True,不然返回False
alert_is_present 是否出現警告

七:前進和後退

  selenium測試用back()方法後退,用forward()方法前進。

八:Cookies

  使用selenium能夠方便地對Cookies進行操做。
  用get_cookies()方法獲取全部的Cookies。
  用add_cookies()方法增長Cookies。
  用delete_all_cookies()和delete_cookies()方法刪除Cookies。

八:選項卡處理

  在訪問網頁的時候,會開啓一個個選項卡,在selenium中也能夠對選項卡進行操做。

browser.execute_script('windows.open()')
print(window_handles)
browser.switch_to_window(browser.window_handles[1])

  用execute_script方法執行JavaScript語句,這裏的window_handles獲取當前開啓的全部選項卡,返回的是選項卡的代號列表。用browser.window_handles[index]便可以跳轉到index索引對應的選項卡。

九:捕獲異常

  捕獲異常是常常要用到的方法,語句是try-except-finally,對於不一樣的錯誤,不管是網絡鏈接,代碼運行時間超時,仍是數據未找到,都十分有用。

相關文章
相關標籤/搜索