selenium庫的使用

來都來了給我點個贊收藏一下再走唄🌹🌹🌹🌹🌹

目錄

一、下載需要用到的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()

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/212910.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/212910.shtml
英文地址,請注明出處:http://en.pswp.cn/news/212910.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

一文掌握Ascend C孿生調試

1 What&#xff0c;什么是孿生調試 Ascend C提供孿生調試方法&#xff0c;即CPU域模擬NPU域的行為&#xff0c;相同的算子代碼可以在CPU域調試精度&#xff0c;NPU域調試性能。孿生調試的整體方案如下&#xff1a;開發者通過調用Ascend C類庫編寫Ascend C算子kernel側源碼&am…

Spring boot 發送郵箱

一、簡介 Spring 提供了非常好用的 JavaMailSender 接口實現郵件發送。在 SpringBoot 的 Starter 模塊中也為此提供了自動化配置。下面通過實例看看如何在 SpringBoot 中使用 JavaMailSender 發送郵件。 org.springframework.mail 是Spring Framework對郵件支持的基礎包&#x…

云計算大屏,可視化云計算分析平臺(云實時數據大屏PSD源文件)

大屏組件可以讓UI設計師的工作更加便捷&#xff0c;使其更高效快速的完成設計任務。現分享可視化云分析系統、可視化云計算分析平臺、云實時數據大屏的大屏Photoshop源文件&#xff0c;開箱即用&#xff01; 若需 更多行業 相關的大屏&#xff0c;請移步小7的另一篇文章&#…

mapstruct個人學習記錄

mapstruct核心技術學習 簡介入門案例maven依賴 IDEA插件單一對象轉換測試結果 mapping屬性Spring注入的方式測試 集合的映射set類型的映射測試map類型的映射測試 MapMappingkeyDateFormatvalueDateFormat 枚舉映射基礎入門 簡介 在工作中&#xff0c;我們經常要進行各種對象之…

非標識性參數—手機運營商

2.2 非標識性參數 2.2.1 手機運營商 IMSI&#xff1a; 國際移動用戶識別碼&#xff0c;共有15位&#xff0c;儲存在SIM卡中&#xff0c;由MCC、MNC&#xff0c;MSIN組成。 MCC&#xff1a; (國家)移動國家號碼&#xff0c;由3位數字組成&#xff0c;唯一的識別移動客戶所屬的…

【rabbitMQ】rabbitMQ用戶,虛擬機地址(添加,修改,刪除操作)

rabbitMQ的下載&#xff0c;安裝和配置 https://blog.csdn.net/m0_67930426/article/details/134892759?spm1001.2014.3001.5502 rabbitMQ控制臺模擬收發消息 https://blog.csdn.net/m0_67930426/article/details/134904365?spm1001.2014.3001.5502 目錄 用戶 添加用戶…

MyBatis 四大核心組件之 StatementHandler 源碼解析

&#x1f680; 作者主頁&#xff1a; 有來技術 &#x1f525; 開源項目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 倉庫主頁&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 歡迎點贊…

CPU設計——Triumphcore——MP_work版本

該版本用作系統寄存器的實現&#xff0c;M/S/U狀態的實現與切換&#xff0c;以及load/store的虛實地址轉換 設計指標 2023.12.8 2023.12.9 不實現mideleg和medeleg&#xff0c;因此一旦出現異常&#xff0c;直接切換至M態&#xff0c; 調試記錄 到存儲區中取PTE要額外至少…

airserver mac 7.27官方破解版2024最新安裝激活圖文教程

airserver mac 7.27官方破解版是一款好用的airplay投屏工具&#xff0c;可以輕松將ios熒幕鏡像&#xff08;airplay&#xff09;至mac上&#xff0c;在mac平臺上實現視頻、音頻、幻燈片等文件資源的接收及投放演示操作&#xff0c;解決iphone或ipad的屏幕錄像問題&#xff0c;滿…

SpringBootAdmin設置郵件通知

如果你想要在Spring Boot Admin中配置郵件通知&#xff0c;可以按照以下步驟進行操作&#xff1a; 添加郵件通知的依賴 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId> </dep…

Linux C/C++ 從內存轉儲中恢復64位ELF可執行文件

ELF&#xff08;Executable and Linking Format&#xff09;是一種對象文件的格式&#xff0c;它主要用于定義ELF&#xff08;Executable and Linking Format&#xff09;是一種對象文件的格式&#xff0c;它主要用于定義不同類型的對象文件中的內容以及它們的存儲方式。一個EL…

作業調度算法(含詳細計算過程)和進程調度算法淺析

一.作業調度 作業調度算法需要知道以下公式 周轉時間完成時間 - 到達時間 帶權周轉時間周轉時間/運行時間 注&#xff1a;帶權周轉時間越大&#xff0c;作業&#xff08;或進程&#xff09;越短&#xff1b;帶權周轉時間越小&#xff0c;作業&#xff08;或進程&#xff09;越…

[git] 遠程刪除分支

[git] 遠程刪除分支 1. git刪除遠程分支 git push origin --delete [branch_name]2. 刪除本地分支區別 git branch -d 會在刪除前檢查merge狀態&#xff08;其與上游分支或者與head&#xff09;。git branch -D 是git branch --delete --force的簡寫&#xff0c;它會直接刪除…

Redis生產實戰-Redis集群故障探測以及降級方案設計

Redis 集群故障探測 在生產環境中&#xff0c;如果 Redis 集群崩潰了&#xff0c;那么會導致大量的請求打到數據庫中&#xff0c;會導致整個系統都崩潰&#xff0c;所以系統需要可以識別緩存故障&#xff0c;限流保護數據庫&#xff0c;并且啟動接口的降級機制 降級方案設計 …

《C++20設計模式》---原型模式學習筆記代碼

C20設計模式 第 4 章 原型模式學習筆記筆記代碼 第 4 章 原型模式 學習筆記 筆記代碼 #include<iostream> #include<string>// #define VALUE_OF_ADDRESS // PP_4_2_1 (no define: PP_4_2_2) namespace PP_4_2 {class Address{public:std::string street;std::st…

《C++20設計模式》學習筆記---原型模式

C20設計模式 第 4 章 原型模式4.1 對象構建4.2 普通拷貝4.3 通過拷貝構造函數進行拷貝4.4 “虛”構造函數4.5 序列化4.6 原型工廠4.7 總結4.8 代碼 第 4 章 原型模式 考慮一下我們日常使用的東西&#xff0c;比如汽車或手機。它們并不是從零開始設計的&#xff0c;相反&#x…

超過 50% 的內部攻擊使用特權提升漏洞

特權提升漏洞是企業內部人員在網絡上進行未經授權的活動時最常見的漏洞&#xff0c;無論是出于惡意目的還是以危險的方式下載有風險的工具。 Crowdstrike 根據 2021 年 1 月至 2023 年 4 月期間收集的數據發布的一份報告顯示&#xff0c;內部威脅正在上升&#xff0c;而利用權…

基于SSM的劇本殺預約系統的設計與實現

末尾獲取源碼 開發語言&#xff1a;Java Java開發工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 數據庫&#xff1a;MySQL5.7和Navicat管理工具結合 服務器&#xff1a;Tomcat8.5 開發軟件&#xff1a;IDEA / Eclipse 是否Maven項目&#xff1a;是 目錄…

【第三屆】:“玄鐵杯”RISC-V應用創新大賽(基于yolov5和OpenCv算法 — 智能警戒哨兵)

文章目錄 前言 一、智能警戒哨兵是什么&#xff1f; 二、方案流程圖 三、硬件方案 四、軟件方案 五、演示視頻鏈接 總結 前言 最近參加了第三屆“玄鐵杯”RISC-V應用創新大賽&#xff0c;我的創意題目是基于 yolov5和OpenCv算法 — 智能警戒哨兵 先介紹一下比賽&#xf…

docker容器配置MySQL與遠程連接設置(純步驟)

以下為ubuntu20.04環境&#xff0c;默認已安裝docker&#xff0c;沒安裝的網上隨便找個教程就好了 拉去mysql鏡像 docker pull mysql這樣是默認拉取最新的版本latest 這樣是指定版本拉取 docker pull mysql:5.7查看已安裝的mysql鏡像 docker images通過鏡像生成容器 docke…