Selenium在Pyhton應用

目錄

1. selenium的基本原理

2.?selenium環境的搭建步驟

3. 元素的定位和操作

4.元素的基本屬性方法

5.瀏覽器的操作方法

6.三種等待

強制等待

顯示等待

隱式等待

7. 鍵盤與鼠標的操作

?鼠標懸停用

拖拽操作

8.?下拉框元素定位

9.頁面滾動操作

10. 頁面截圖操作


Selenium是一個用于Web應用程序測試的工具,它提供了一套完整的工具來編寫自動化Web應用程序的測試。Selenium測試腳本,并且可以模擬用戶與瀏覽器的交互

1. selenium的基本原理

  1. WebDriver

    • WebDriver是Selenium的核心組件,它是一個接口,用于編寫客戶端程序來控制瀏覽器。

    • WebDriver可以啟動瀏覽器實例,發送命令給瀏覽器,接收瀏覽器的響應。

    • WebDriver支持多種瀏覽器,包括Chrome、Firefox、Internet Explorer、Safari等。

  2. 定位元素

    • 通過各種策略(如id、name、class name、css selector、xpath等)定位頁面上的元素。

    • 可以對定位單個元素或元素集合進行操作。

  3. 操作

    • 可以模擬用戶操作,如點擊、輸入文本、拖拽等。

    • 可以獲取和設置元素的屬性和值。

  4. 等待

    • 隱式等待(Implicit Wait):WebDriver會在執行命令時自動等待元素可操作。

    • 顯式等待(Explicit Wait):通過編寫代碼顯式等待特定條件成立。

  5. 測試腳本

    • 用支持數據驅動測試,從外部文件或數據庫讀取測試數據。

    • 支持并發執行測試,可以同時運行多個測試腳本。

  6. 結果驗證

    • 可以驗證頁面元素的狀態,檢查是否符合預期。

    • 支持斷言(Assertions),驗證測試結果是否符合預期。

2.?selenium環境的搭建步驟

環境安裝??pip install selenium

瀏覽器選擇:支持多種瀏覽器

匹配規則:驅動版本與瀏覽器版本前三位必須一致,版本不匹配將導致代碼無法運行

各版本驅動下載:?chromedriver瀏覽器驅動各版本下載(...113、114、115、116、117、118、119、120、121、122、123、124、125、126、127、128、129、130、131、132、133、134、135、136、137、138、139、140)(原創) - Z哎呀 - 博客園

將下載驅動導入代碼包中

import timefrom selenium import webdriverdriver = webdriver.Chrome()driver.get("https://www.baidu.com/")#頁面最大化
driver.maximize_window()time.sleep(3)
#關閉驅動對象
driver.quit()

3. 元素的定位和操作

  • ID定位:通過元素的id屬性(最常用)
  • name定位:通過元素的name屬性
  • class定位:通過元素的class屬性(注意class可能有多個值)
  • 標簽定位:通過標簽名(不推薦,難以保證唯一性)
  • link_text:精準匹配超鏈接文本
  • partial_link_text:模糊匹配超鏈接文本
  • CSS選擇器:通過CSS表達式定位
  • XPath:通過XML路徑表達式定位
import timefrom selenium import webdriver
from selenium.webdriver.common.by import Bydriver = webdriver.Chrome()driver.get("https://www.baidu.com/")#頁面最大化
driver.maximize_window()#driver.find_element(By.ID,"kw").send_keys("李")#定位標簽超鏈接的方式
#driver.find_element(By.LINK_TEXT,"新聞").click()
#模糊定位
#driver.find_element(By.PARTIAL_LINK_TEXT,"新").click()#Xpath定位
driver.find_element(By.XPATH,'//*[@id="kw"]').send_keys("cxk")time.sleep(3)
#關閉驅動對象
driver.quit()

4.元素的基本屬性方法

5.瀏覽器的操作方法

#設置瀏覽器的分辨率(寬高)
driver.set_window_size(600,600)
#設置瀏覽器的相對位置
driver.set_window_position(100,600)
#瀏覽器的刷新
driver.refresh()
#瀏覽器的前進
driver.forward()
#瀏覽器的回退
driver.back()
#關閉瀏覽器的整個頁面
driver.quit()
#關閉瀏覽器的當前頁面
driver.close()
#頁面標題
print(driver.title)
#頁面當前網址
print(driver.current_url)

6.三種等待

強制等待

顯示等待

導入模塊

  1. 導入 WebDriverWait 類

    • WebDriverWait 類用于顯式等待(Explicit Wait),它允許你指定一個條件,當該條件滿足時繼續執行腳本。這有助于處理頁面加載或元素出現時的延遲問題。

  2. 導入 expected_conditions 模塊

    • expected_conditions 模塊包含一組預定義的條件,這些條件用于與 WebDriverWait 一起使用。這些條件定義了各種等待條件,如元素是否可見、是否可點擊等。

from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

在設定時間內,不間斷的時間點去定位元素

一旦元素被加載出來,就會被定位到元素,然后執行操作

如果在有效時間內沒有定位到元素,那么程序會報錯: 超時錯誤TimeoutException

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ECdriver = webdriver.Chrome()driver.get("https://www.baidu.com/")#頁面最大化
driver.maximize_window()#Xpath定位
driver.find_element(By.XPATH,'//*[@id="kw"]').send_keys("cxk")
driver.find_element(By.XPATH,'//*[@id="su"]').click()el1 = WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.XPATH, '//*[@id="s_tab_inner"]/a[2]/span')))
el1.click()time.sleep(3)
#關閉驅動對象
driver.quit()

隱式等待

driver.implicitly_wait(3)
driver.find_element(By.XPATH,'//*[@id="s_tab_inner"]/a[2]/span')

元素第一次被定位的時候如果能夠定位到,那么不會觸發隱式等待,如果定位不到才會觸發隱式等待的有效時間

可是設置隱式等待的有效時長,如果在有效時長里定位元素,那么不會報錯,反之會報錯提示,沒有找到鈣元素的異常: NoSuchElementException

7. 鍵盤與鼠標的操作

需要從webdriver包中導入Keys類

from selenium.webdriver.common.keys import Keys

輸入"美女"文本:element1.send_keys("美女")
全選內容:element1.send_keys(Keys.CONTROL + 'a')
復制內容:element1.send_keys(Keys.CONTROL + 'c')
刪除內容:element1.send_keys(Keys.BACKSPACE)
輸入"帥哥"文本:element1.send_keys("帥哥")
再次全選:element1.send_keys(Keys.CONTROL + 'a')
粘貼內容:element1.send_keys(Keys.CONTROL + 'v')
清空內容:element1.clear()

常用鼠標操作方法

從selenium.webdriver導入ActionChains類,該類提供多種鼠標操作方法

  • 右擊操作:使用context_click()方法,傳入目標元素參數
  • 雙擊操作:使用double_click()方法,傳入目標元素參

?鼠標懸停用

element = driver.find_element_by_id("element_id")  # 定位元素
ActionChains(driver).move_to_element(element).perform()  # 鼠標懸用到元素上

拖拽操作

從selenium.webdriver導入ActionChains類,該類提供多種鼠標操作方法

source = driver.find_element_by_id("source_id")  # 源元素
target = driver.find_element_by_id("target_id")  # 目標元素
ActionChains(driver).drag_and_drop(source, target).perform()  # 從源元素拖拽到目標元素

8.?下拉框元素定位

  • 首先需要創建Select類對象
  • 通過webdriver.support.select導入Select類
  • 傳遞要定位的下拉框元素對象(可通過xpath獲取)
  • 索引定位:select_by_index(),下標從0開始
  • 文本定位:select_by_visible_text(),通過選項顯示文本
  • 值定位:select_by_value(),通過選項的value屬性值

9.頁面滾動操作

通過JavaScript腳本執行滾動操作

  • 第一個參數控制左右滾動
  • 第二個參數控制上下滾動
  • 執行方法:driver.execute_script(js腳本)

10. 頁面截圖操作

方法:driver.get_screenshot_as_file()

僅支持PNG格式

11. 警告框

獲取警告框元素

通過find_element和XPath定位警告框觸發元素,對定位到的元素執行click()操作

  • 使用switch_to.alert切入警告框
  • 獲取文本:通過alert對象的text屬性獲取提示信息
關閉警告框的方法

使用accept()方法模擬點擊確定按鈕

使用dismiss()方法模擬點擊取消按鈕

即使警告框界面上沒有顯示取消按鈕,調用dismiss()方法仍可取消

輸入型警告框處理

對于需要輸入內容的警告框,使用send_keys()方法

12.?頁面切換

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

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

相關文章

【Docker】Redis基礎命令在Docker中的使用

文章目錄一 Redis 容器化部署指南1 獲取 Redis 鏡像2 服務啟動2.1 首次啟動新容器2.2 重啟已有容器3 服務驗證4 連接 Redis5 數據持久化方案5.1 使用 Docker 卷5.2 啟用 AOF 持久化6 容器管理6.1 停止容器6.2 刪除容器7 數據清理7.1 清空 Redis 數據7.2 完全移除7.3 刪除數據卷…

ubuntu 2024 安裝拼音輸入法

1. 卸載ibussudo apt remove ibus2. install fcitx5核心組件sudo apt install fcitx5 fcitx5-chinese-addons fcitx5-material-color3. 安裝中文語言支持sudo apt install language-pack-zh-hans4. 設置默認輸入法im-config -n fcitx55. 配置環境變量sudo vim ~/.bashrc粘貼&am…

語言模型的多個agent

是的,語言模型 在某些情況下確實可以通過多個 agent(代理)來共同協作完成任務。這種設計通常用于復雜任務或需要多步驟處理的場景,具體的流程如下: 1. 什么是 Agent? Agent(代理) 是…

CSS--:root指定變量,其他元素引用

原文網址:CSS--:root指定變量,其他元素引用-CSDN博客 簡介 本文介紹CSS中使用變量的方法。 場景描述 CSS可以使用變量,比如:指定整個網頁的主體顏色作為變量,其他的元素去使用這個顏色。這樣在修改顏色時&#xff…

秋招筆記-8.7

今天先來補充一下關于Unity和UE的一些問題,后續開始深挖項目:Unity關于fixed update和update:同一幀中物理更新優先執行?關于協程:協程是基于迭代器實現的,而迭代器是基于狀態機實現的。協程的本質是編譯器…

DAY 26 函數專題1:函數定義與參數

浙大疏錦行知識點回顧: 函數的定義變量作用域:局部變量和全局變量函數的參數類型:位置參數、默認參數、不定參數傳遞參數的手段:關鍵詞參數傳遞參數的順序:同時出現三種參數類型時 作業 #作業1 import math def calcul…

跨學科視域下的深層語義分析與人類底層邏輯一致性探索

摘要本文章旨在系統性地探討一個前沿的交叉學科研究課題:如何通過深層語義分析,探索并建模人類認知中普遍存在的底層邏輯一致性。此研究橫跨自然語言處理(NLP)、知識圖譜(KG)、認知科學、腦神經科學、系統科…

Flink CDC如何保障數據的一致性?

Flink CDC 通過 Checkpoint 機制、冪等性設計 和 事務一致性協議 保障數據同步的一致性。以下是具體實現方式和關鍵配置:1. Checkpoint 機制(核心保障)作用:定期保存同步狀態(包括 Binlog 位置和全量快照進度&#xff…

上傳文件至華為云OBS

1 創建華為云Bucket1.1 創建Bucket1.2 獲取Bucket的Endpoint1.3 獲取訪問憑證注:每個訪問密鑰僅能下載一次,為了賬號安全性,建議您定期更換并妥善保存訪問密鑰。不再使用的訪問密鑰,建議停用和刪除。2 創建Sprint Boot工程創建一個…

使用驅動移除內核回調,

https://br-sn.github.io/Removing-Kernel-Callbacks-Using-Signed-Drivers/ 原創 大藍 RJ45實驗室 使用簽名驅動移除內核回調-安全KER - 安全資訊平臺 介紹 創建該PoC的目的是了解驅動漏洞利用程序的強大功能,以及EDR如何使用內核回調以防止惡意軟件的攻擊。…

從零搭建Cloud Alibaba (下) Sentinel篇

1.Sentinel控制臺的安裝 下載地址: Releases alibaba/Sentinelx 下載后是一個jar包 進入目錄 CMD命令 java -jar "sentinel-dashboard-1.8.8 .jar" 如果發生了端口沖突則使用以下命令啟動 修改端口號為8090 java -Dserver.port8090 -jar "sen…

Numpy科學計算與數據分析:Numpy數學函數入門與實踐

Numpy數學函數實戰:探索數學運算的無限可能 學習目標 通過本課程的學習,學員將掌握Numpy中常用的數學函數,包括三角函數、指數函數和對數函數的使用方法,以及如何利用這些函數對數組進行高效的數學運算。本課程不僅會講解理論知識…

BIGO Ads是什么?BIGO廣告營銷核心玩法解析

在全球化競爭白熱化的當下,BIGO Ads憑借其覆蓋150國家的龐大流量池和AI驅動的精準營銷能力,已成為出海企業突破增長瓶頸的利器。2025年Q1數據顯示,BIGO Ads廣告業務同比增長27%,非直播收入占比達24.9%,成為歡聚集團第二…

人工智能領域、圖歐科技、IMYAI智能助手2025年3月更新月報

2025年3月AI領域重要技術進展與平臺更新概覽 2025年3月,人工智能領域迎來一系列重要技術更新與平臺功能迭代,尤其在多模態模型、圖像生成編輯、視頻生成、大型語言模型(LLM)性能提升等方面表現活躍。以下是對關鍵進展的梳理&#…

STM32HAL 快速入門(一):點燈前的準備 —— 從軟件安裝到硬件原理

前言 大家好,這里是 Hello_Embed。嵌入式開發的 “Hello World” 是點燈 —— 通過控制單片機引腳的高低電平,讓 LED 亮滅。要實現這個功能,前期準備必不可少:從軟件安裝到硬件原理理解,每一步都很關鍵。本文就來詳細說…

Python網絡編程技術

一、網絡編程基礎概念 1.1 什么是網絡編程? 定義:程序通過網絡與其他程序進行通信的技術。核心目標:實現數據在不同主機或進程間的傳輸與交互。應用場景:Web服務、API調用、實時通信、分布式系統等。 1.2 網絡通信模型 OSI七層…

基于PHP的快遞管理系統的設計與實現

管理員:登錄:管理員可以通過用戶名和密碼登錄系統,進入管理員后臺管理界面。個人中心:管理員可以查看和編輯個人信息,如姓名、聯系方式等。用戶管理:管理員可以管理系統中的用戶信息,包括添加新…

WPF的C1FlexGrid的單元格回車換行輸入

重寫C1FlexGrid的按鍵事件PreviewKeyDown"flex_PreviewKeyUp" 定義按鍵方法private void flex_PreviewKeyUp(object sender, KeyEventArgs e){if (e.Key Key.Enter){// 獲取當前編輯的單元格var cell CfgReviewItem.Selection;if (cell.Column > 0 && …

簡單部署普羅米修斯(Promethus)與Grafana配置

環境信息:系統版本ubuntu2404k8s版本v1.22.2promethus節點IP192.168.31.210Grafana節點IP192.168.31.210node1節點IP192.168.31.214node2節點IP192.168.31.215部署Promethus(https://prometheus.io/download/) wget https://ghfast.top/https…

Redis 編譯錯誤:缺少靜態庫文件,如何解決?

目錄 一、問題背景 二、問題分析 三、解決方案:手動編譯缺失依賴 四、重新編譯 Redis 主程序 五、小結與補充建議 一、問題背景 在從源代碼編譯 Redis(如 8.0.3 版本)時,很多開發者可能會遇到如下錯誤信息: /us…