Python之Selenium 框架
Selenium 是一個用於測試 Web 應用程式的框架,該框架測試直接在瀏覽器中執行,就像真實使用者操作一樣。它支援多種平臺:Windows、Linux、Mac,支援多種語言:Python、Perl、PHP、C# 等,支援多種瀏覽器:Chrome、IE、Firefox、Safari 等。
1 安裝
1)安裝 Selenium
pip install selenium
2)安裝 WebDriver
主要瀏覽器 WebDriver 地址如下:
Chrome:
Firefox:
IE:
本文以 Chrome 為例,本機為 Windows 系統,WebDriver 使用版本 78.0.3904.11,Chrome 瀏覽器版本為 78.0.3880.4 驅動程式下載好後解壓,將 chromedriver.exe 放到 Python 安裝目錄下即可。
2 操作瀏覽器
2.1 開啟瀏覽器
1)普通方式
以開啟去 163 郵箱為例,使用 Chrome 瀏覽器
from selenium import webdriver
browser = webdriver.Chrome()
browser.get(')
使用 Firefox 瀏覽器
from selenium import webdriver
browser = webdriver.Firefox()
browser.get(')
使用 IE 瀏覽器
from selenium import webdriver
browser = webdriver.Ie()
browser.get(')
2)載入配置方式
以 Chrome 為例,在 Chrome 瀏覽器位址列輸入 chrome://version/ 開啟,如圖所示:
我們可以看到個人資料路徑這一項,取到路徑:C:\Users\admin\AppData\Local\Google\Chrome\User Data,取到 User Data 使用自己設定的配置,取到 Default 使用預設配置。看下示例:
from selenium import webdriver
option = webdriver.ChromeOptions()
# 自己的資料目錄(需要將複製的路徑中的 \ 替換成 / 或進行轉義 \\)
# option.add_argument('--user-data-dir=C:/Users/admin/AppData/Local/Google/Chrome/User Data')
option.add_argument('--user-data-dir=C:\\Users\\admin\\AppData\\Local\\Google\\Chrome\\User Data')
browser = webdriver.Chrome(chrome_options=option)
browser.get(')
# 關閉
browser.quit()
如果執行時報錯沒有開啟指定頁面,可先將瀏覽器關閉再執行。
3)Headless 方式
前兩種方式都是有瀏覽器介面的方式,Headless 模式是 Chrome 瀏覽器的無介面形態,可以在不開啟瀏覽器的前提下,使用所有 Chrome 支援的特性執行我們的程式。這種方式更加方便測試 Web 應用、獲得網站的截圖、做爬蟲抓取資訊等。看下示例:
from selenium import webdriver
chrome_options = webdriver.ChromeOptions()
# 使用 headless 無介面瀏覽器模式
chrome_options.add_argument('--headless')
# 禁用 gpu 加速
chrome_options.add_argument('--disable-gpu')
# 啟動瀏覽器,獲取網頁原始碼
browser = webdriver.Chrome(chrome_options=chrome_options)
url = '
browser.get(url)
print('browser text = ',browser.page_source)
browser.quit()
2.2 設定瀏覽器視窗
最大化顯示
browser.maximize_window()
最小化顯示
browser.minimize_window()
自定義大小
# 寬 500,高 800
browser.set_window_size(500,800)
2.3 前進後退
前進
browser.forward()
後退
browser.back()
3 元素定位
當我們想要操作一個元素時,首先需要找到它,Selenium 提供了多種元素定位方式,我們以 Chrome 瀏覽器 Headless 方式為例。看下示例:
from selenium import webdriver
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
browser = webdriver.Chrome(chrome_options=chrome_options)
url = '
browser.get(url)
data = browser.page_source
假設訪問地址 ,返回 data 為如下內容。
index
1)根據 id 定位
browser.find_element_by_id('fid')
2)根據 name 定位
# 返回第一個元素
browser.find_element_by_name('fname')
# 返回所有元素
browser.find_elements_by_name('fname')
3)根據 class 定位
# 返回第一個元素
browser.find_element_by_class_name('fname')
# 返回所有元素
browser.find_elements_by_class_name('fname')
4)根據標籤名定位
# 返回第一個元素
browser.find_element_by_tag_name('input')
# 返回所有元素
browser.find_elements_by_tag_name('input')
5)使用 CSS 定位
# 返回第一個元素
browser.find_element_by_css_selector('.fname')
# 返回所有元素
browser.find_elements_by_css_selector('.fname')
6)使用連結文字定位超連結
# 返回第一個元素
browser.find_element_by_link_text('index')
# 返回所有元素
browser.find_elements_by_link_text('index')
# 返回第一個元素
browser.find_element_by_partial_link_text('index')
# 返回所有元素
browser.find_elements_by_partial_link_text('index')
7)使用 xpath 定位
# 返回第一個元素
browser.find_elements_by_xpath("//input[@id='fid']")
# 返回所有元素
browser.find_elements_by_xpath("//input[@name='fname']")
4 等待事件
Web 應用大多都使用 AJAX 技術進行載入,瀏覽器載入一個頁面時,頁面內的元素可能會在不同的時間載入,這會加大定位元素的困難程度,因為元素不在 DOM 裡,會丟擲 ElementNotVisibleException 異常,使用 Waits,我們就可以解決這個問題。 無錫做人流多少錢
Selenium WebDriver 提供了顯式和隱式兩種 Waits 方式,顯式的 Waits 會讓 WebDriver 在更深一步的執行前等待一個確定的條件觸發,隱式的 Waits 則會讓 WebDriver 試圖定位元素的時候對 DOM 進行指定次數的輪詢。
4.1 顯示等待
WebDriverWait 配合該類的 until() 和 until_not() 方法,就能夠根據判斷條件而進行靈活地等待了。它主要流程是:程式每隔 x 秒檢查一下,如果條件成立了,則執行下一步操作,否則繼續等待,直到超過設定的最長時間,然後丟擲 TimeoutException 異常。先看一下方法:
__init__(driver, timeout, poll_frequency=POLL_FREQUENCY, ignored_exceptions=None)
driver: 傳入 WebDriver 例項;
timeout: 超時時間,單位為秒;
poll_frequency: 呼叫 until 或 until_not 中方法的間隔時間,預設是 0.5 秒;
ignored_exceptions: 忽略的異常,如果在呼叫 until 或 until_not 的過程中丟擲這個元組中的異常,則不中斷程式碼,繼續等待,如果丟擲的是這個元組外的異常,則中斷程式碼,丟擲異常。預設只有 NoSuchElementException。
until(method, message='')
method: 在等待期間,每隔一段時間(init 中的 poll_frequency)呼叫這個方法,直到返回值不是 False;
message: 如果超時,丟擲 TimeoutException,將 message 傳入異常。
until_not(method, message='')
until 方法是當某條件成立則繼續執行,until_not 方法與之相反,它是當某條件不成立則繼續執行,引數與 until 方法相同。
以去 163 郵箱為例,看一下示例:
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(')
try:
# 超時時間為 5 秒
data = WebDriverWait(browser,5).until(
EC.presence_of_element_located((By.ID,'lbNormal'))
)
print(data)
finally:
browser.quit()
示例中程式碼會等待 5 秒,如果 5 秒內找到元素則立即返回,否則會丟擲 TimeoutException 異常,WebDriverWait 預設每 0.5 秒呼叫一下 ExpectedCondition 直到它返回成功為止。
4.2 隱式等待
當我們要找一個或者一些不能立即可用的元素的時候,隱式 Waits 會告訴 WebDriver 輪詢 DOM 指定的次數,預設設定是 0 次,一旦設定,WebDriver 物件例項的整個生命週期的隱式呼叫也就設定好了。看一下方法:
implicitly_wait(time_to_wait)
隱式等待是設定了一個最長等待時間 time_to_wait,如果在規定時間內網頁載入完成,則執行下一步,否則一直等到時間截止,然後執行下一步。看到了這裡,我們會感覺有點像 time.sleep(),它們的區別是:time.sleep() 必須等待指定時間後才能繼續執行, time_to_wait 是在指定的時間範圍載入完成即執行,time_to_wait 比 time.sleep() 更靈活一些。
看下示例:
from selenium import webdriver
browser = webdriver.Chrome()
browser.implicitly_wait(5)
browser.get(')
data = browser.find_element_by_id('lbNormal')
print(data)
browser.quit()
5 登入 163 郵箱
最後,我們用 Selenium 來做個登入 163 郵箱的實戰例子。
5.1 方式一
我們透過地址 登入,如圖所示:
從圖中我們發現直接進了 163 郵箱使用者名稱、密碼登入頁,我們直接輸入使用者名稱、密碼,點選登入按鈕即可。示例如下:
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('')
browser.switch_to.frame(browser.find_element_by_xpath('//iframe[starts-with(@id,"x-URS")]'))
browser.implicitly_wait(2)
# 自己的使用者名稱
browser.find_element_by_xpath('//input[@name="email"]').send_keys('xxx')
# 自己的密碼
browser.find_element_by_xpath('//input[@name="password"]').send_keys('xxx')
browser.find_element_by_xpath('//*[@id="dologin"]').click()
browser.implicitly_wait(2)
print(browser.page_source)
browser.implicitly_wait(2)
# 關閉
browser.quit()
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69945560/viewspace-2659874/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- selenium-webdriver(python) (十六) --unittest 框架WebPython框架
- Selenium Part1:框架搭建與selenium框架介紹框架
- Python爬蟲基礎之seleniumPython爬蟲
- 基於Selenium + Python的web自動化框架PythonWeb框架
- Python之selenium:selenium庫的簡介、安裝、使用方法之詳細攻略Python
- (上)python3 selenium3 從框架實現學習selenium讓你事半功倍Python框架
- selenium自動化測試框架之PO設計模式框架設計模式
- Python爬蟲之Selenium庫的基本使用Python爬蟲
- python 包之 selenium 自動化使用教程Python
- Python爬蟲之selenium庫使用詳解Python爬蟲
- Python Selenium自動化測試框架 元素等待機制Python框架
- Python之Flask框架一PythonFlask框架
- Python之ORM框架SQLAlchemyPythonORM框架SQL
- python BDD 框架之lettucePython框架
- Python之Web框架DjangoPythonWeb框架Django
- python 之 pytest框架Python框架
- 基於Selenium+Python的web自動化測試框架PythonWeb框架
- 學會Python+Selenium,分分鐘搭建Web自動化框架!PythonWeb框架
- titans Selenium 自動化框架框架
- [selenium]-PageObject框架以及Ivy部署Object框架
- python selenium DemoPython
- 自動化測試框架Selenium的使用——安裝Selenium框架
- selenium-測試框架搭建(十三)框架
- 利用Selenium搭建Nunit測試框架框架
- Selenium自動化測試框架框架
- Python Selenium簡介Python
- Python 中 selenium 庫Python
- Python Selenium 常用方法Python
- Python Selenium使用IEPython
- Selenium2 (python)Python
- Python主流Web框架之TornadoPythonWeb框架
- python+selenium切換彈框的iframe框架失敗處理方法Python框架
- 基於 python--selenium 與 requests 的 web ui/ 介面混合測試框架PythonWebUI框架
- selenium 測試框架中使用grid框架
- Python安裝selenium模組Python
- Python Selenium如何操作CookiesPythonCookie
- python selenium 速查筆記Python筆記
- 自動化測試框架Selenium入門框架