來都來了給我點個贊收藏一下再走唄🌹🌹🌹🌹🌹
目錄
一、下載需要用到的python庫selenium
二、selenium的基本使用
1.在python代碼引入庫
2.打開瀏覽器
3.元素定位
1)通過id定位
2)通過標簽name屬性定位
3)通過標簽class屬性定位
4)通過標簽tag定位
5)通過link定位標簽
6)通過元素的Xpath定位(xpath是一種在XML文檔中定位元素的語言)
4.文本輸入清除
5.獲取頁面內容
6.調整瀏覽器窗口尺寸
7.下拉列表操作
selenium庫使用
Selenium是一個用于Web應用程序測試的工具。Selenium測試直接運行在瀏覽器中,就像真正的用戶在操作一樣。支持的瀏覽器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google?Chrome,Opera,Edge等。這個工具的主要功能包括:測試與瀏覽器的兼容性——測試應用程序看是否能夠很好得工作在不同瀏覽器和操作系統之上。測試系統功能——創建回歸測試檢驗軟件功能和用戶需求。支持自動錄制動作和自動生成.Net、Java、Perl等不同語言的測試腳本。
功能:
- 框架底層使javaScript模擬真實用戶對瀏覽器進行操作。測試腳本執行時,瀏覽器自動按照腳本代碼做出點擊,輸入,打開,驗證等操作,就像真實用戶所做的一樣,從終端用戶的角度測試應用程序。
- 使瀏覽器兼容性測試自動化成為可能,盡管在不同的瀏覽器上依然有細微的差別。
- 使用簡單,可使用Java,pyhton等多種語言編寫用例腳本。
一、下載需要用到的python庫selenium
pip install selnium
下載完畢提示
2.下載你對應要使用的瀏覽器的驅動
我主要用的瀏覽器是edge,所以我提供edge的下載官網:Microsoft Edge WebDriver - Microsoft Edge Developer,可能有點慢
看自己的瀏覽器的版本可以進入設置查看瀏覽器的版本,如何下載對應版本的驅動
下載完解壓,把msedgedriver.exe文件復制到你python3的文件夾下然后再復制一份重命名為MicrosoftWebDriver.exe
二、selenium的基本使用
1.在python代碼引入庫
from selenium import webdriver
2.打開瀏覽器
browser = webdriver.Edge() //這里我的是edge所以就是用.Edge要是是Chrome 就用.Chrome browser.get("http://www.baidu.com")
3.元素定位
元素定位方法包含了2個系列:
- find_element()系列:用于定位單個的頁面元素。
- find_elements()系列:用于定位一組頁面元素,獲取到的是一組列表。
1)通過id定位
- find_element(By.ID,'XX')id定位,根據元素的id屬性值定位,最為方便且唯一,但有可能不存在,也可能動態生成。
from selenium import webdriver
from selenium.webdriver.common.by import By
import timebrowser = webdriver.Edge()
browser.get("http://www.baidu.com")
browser.find_element(By.ID,"kw").send_keys("123465")
time.sleep(200)
結果:
在網頁下面圈起來的按鈕點擊檢查查看頁面html源代碼通過左上角的東西可以選擇你要的組件的代碼
輸入框的源碼,可以得到id屬性名叫kw
2)通過標簽name屬性定位
- find_element(By.NAME,'xx')name定位,根據元素的name屬性值定位,定位到的標簽不一定是唯一的。
import time
# 導入selenium包
from selenium import webdriver
from selenium.webdriver.common.by import By
# 啟動并打開指定頁面
browser = webdriver.Edge()
browser.get("http://www.baidu.com/")
# 通過name屬性選擇文本框元素,并設置內容
browser.find_element(By.NAME,'wd').send_keys("selenium")
# 通過通過ID屬性獲取“百度一下”按鈕,并執行點擊操作
browser.find_element(By.ID,"su").click()
# 停留五秒后關閉瀏覽器
time.sleep(5)
browser.quit()
3)通過標簽class屬性定位
- find_element_by(By.CLASS_NAME,'xx')class定位,根據元素的class屬性值定位,但可能受JS影響動態變化。定位到的標簽不一定是唯一的。
import time
# 導入selenium包
from selenium import webdriver
from selenium.webdriver.common.by import By
# 啟動并打開指定頁面
browser = webdriver.Edge()
browser.get("http://www.baidu.com/")
time.sleep(2)
# 通過class屬性選擇元素
browser.find_element(By.CLASS_NAME,'s_ipt').send_keys("CSDN")
time.sleep(2)
browser.find_element(By.ID,"su").click()
# 停留三秒后關閉瀏覽器
time.sleep(3)
browser.quit()
4)通過標簽tag定位
- find_element(By.TAG_NAME,'xx')tag name定位,根據元素的標簽名定位,定位到的標簽不一定是唯一的。
import time
# 導入selenium包
from selenium import webdriver
from selenium.webdriver.common.by import By
# 啟動并打開指定頁面
browser = webdriver.Edge()
browser.get("http://www.csdn.net")
time.sleep(2)
# 選擇<button></button>標簽(搜索按鈕),執行點擊操作
browser.find_element(By.TAG_NAME, "button").click()
# 停留三秒后關閉瀏覽器
time.sleep(3)
browser.quit()
5)通過link定位標簽
- link表示包含有屬性href的標簽元素,如:https://www.csdn.net">linktext可以通過LINK_TEXT進行定位。
- find_element(By.LINK_TEXT,'XX')根據鏈接文本全匹配進行精確定位。
- find_element(By.PARTIAL_LINK_TEXT,'XX')根據鏈接文本模糊匹配進行定位。
(1)By.LINK_TEXT精確定位
import time
# 導入selenium包
from selenium import webdriver
from selenium.webdriver.common.by import By
# 啟動并打開指定頁面
browser = webdriver.Firefox()
browser.get("http://www.csdn.net")
# 選擇<a href="https://blog.csdn.net/nav/back-end">Python</a>標簽,執行點擊操作
browser.find_element(By.LINK_TEXT, "Python").click()
# 停留三秒后關閉瀏覽器
time.sleep(3)
browser.quit()
(2)By.PARTIAL_LINK_TEXT模糊定位
import time
# 導入selenium包
from selenium import webdriver
from selenium.webdriver.common.by import By
# 啟動并打開指定頁面
browser = webdriver.Firefox()
browser.get("http://www.csdn.net")
# 選擇<a href="href="https://blog.csdn.net/nav/ai">人工智能</a>標簽,執行點擊操作
browser.find_element(By.PARTIAL_LINK_TEXT, "人工").click()
# 停留五秒后關閉瀏覽器
time.sleep(3)
browser.quit()
6)通過元素的Xpath定位(xpath是一種在XML文檔中定位元素的語言)
- find_element(By.XPATH,'XX')根據元素的xpath表達式來完成定位,可以準確定位任何元素。
- 使用絕對路徑定位
指的是從網頁的HTML代碼結構的最外層一層層的寫到需要被定位的頁面元素為止。絕對路徑起始于/,每一層都被/所分割。
/html/body/div[2]/form/input[3]
注解: (1)可以用中括號選擇分支,div[2]代表的是當前層級下的第二個div標簽;
(2)一般情況下較少使用絕對路徑的方式做定位,原因在于絕對路徑的表達式一般太長,不便于后期的代碼維護,代碼的微小改變就可能導致這個路徑失效,從而無法完成元素定位。
- 使用相對路徑定位
不是從根目錄寫起,而是從網頁文本的任意目錄開始寫。
相對路徑起始于//,//所表示的含義是“任意標簽下”
//input[@id='kw'] #在當前頁面查找任意目錄下的input元素,且該元素的id屬性取值為kw 注解:
(1)在xpath里,屬性以@開頭
(2)所選取的屬性可以是任意屬性,只要其有利于標識這個元素即可
(3)推薦使用相對路徑結合屬性的這種xpath表達式,它往往更簡潔更易于維護
(4)有時候可能會出現一個屬性不足以標識某個元素,可以使用邏輯運算符and來連接多個屬性進行標識。//input[@xx='aa' and @yy='bb']
(5)有時候一個元素它本身沒有可以唯一標識它的屬性,這時我們可以找它的上層或者上上層, 然后再往下寫。//input[@xx='aa']/p
獲取元素的xpath
4.文本輸入清除
- send_keys('XXX')文本輸入。
- clear()文本清空。
import time
# 導入selenium包
from selenium import webdriver
from selenium.webdriver.common.by import By
# 啟動并打開指定頁面
browser = webdriver.Edge()
browser.get("http://www.baidu.com/")
# 通過name屬性選擇文本框元素,并設置內容
input_text=browser.find_element(By.NAME,'wd')
# 輸入文本
input_text.send_keys("selenium")
# 停留2秒
time.sleep(2)
# 清空文本
input_text.clear()
# 停留三秒后關閉瀏覽器
time.sleep(3)
browser.quit()
5.獲取頁面內容
- title頁面標題
- page_source?頁面源碼
- current_url頁面連接
- text標簽內文本
import time
# 導入selenium包
from selenium import webdriver
from selenium.webdriver.common.by import By
# 啟動并打開指定頁面
browser = webdriver.Edge()
browser.get("http://www.csdn.net")
# 獲取標題
title = browser.title
# 輸出
print(title)
# 獲取源代碼
source_code = browser.page_source
#輸出源代碼
print(source_code)
# 獲取頁面鏈接
url = browser.current_url
#輸出頁面鏈接
print(url)
# 獲取標簽內文本
text = browser.find_element(By.XPATH, '/html/body/div[1]/div/div/div/div[2]/div/div/button/span').text
print(text)
# 關閉頁面
time.sleep(3)
browser.quit()
6.調整瀏覽器窗口尺寸
- maximize_window()窗口最大化。
- minimize_window()窗口最小化。
- set_window_size(width,height)調整窗口到指定尺寸
import time
# 導入selenium包
from selenium import webdriver
from selenium.webdriver.common.by import By
# 啟動并打開指定頁面
browser = webdriver.Edge()
browser.get("http://www.csdn.net")
# 窗口最大化
browser.maximize_window()
7.下拉列表操作
- Select("XX)判斷標簽元素XX是否為下拉列表元素,是返回Select對象,不是報錯
- select_by_value("XX")通過下拉列表value屬性的值XX選擇選項
- select_by_visible_text("XX")通過下拉列表文本內容XX選擇選項
- select_by_index(N)或options[N].click()通過下拉列表索引號N選則選項,從0 開始
- options下拉列表內options標簽
from time import sleep
# 導入selenium包
from selenium import webdriver
from selenium.webdriver.common.by import By
# 導入Select類
from selenium.webdriver.support.select import Select# 啟動并打開指定頁面
browser = webdriver.Edge()
browser.get("file:///C:/Users/admin/Desktop/select.html")
# 定位下拉列表標簽,并創建下拉列表對象
select = Select(browser.find_element(By.TAG_NAME, "select"))
# 通過value屬性選擇選項 <option value="Python">Python</option>
select.select_by_value("Python")
sleep(2)
# 通過文本內容選擇選項 <option>C++</option>
select.select_by_visible_text("C++")
sleep(2)
# 通過選項索引號選擇選項
select.select_by_index(0) # 等同于 select.options[0].click()
sleep(2)
# 通過options屬性循環選取
for i in select.options:i.click()sleep(2)
# 關閉瀏覽器
sleep(3)
browser.quit()