selenium元素定位

? ?當我們可以打開瀏覽器后我們如果想要進行web測試我們自然要對網頁的一些功能進行單獨拿出來進行測試,但是我們要怎么才能拿到我們想要的元素,并且對其進行操作呢。

? ? 我們就以百度主頁的輸入框為例,如果我們想要王輸入框中輸入一些內容我們就需要通過html定位到輸入框的位置。

? ? 通常我們最常用也是最方便的一種方式就是通過id進行元素定位,下面我們來進行實現一些案例,假設我們想要輸入“測試”,我們可以通過下述用例方式:

通過ID定位:

?

import timefrom selenium import webdriver
from selenium.webdriver.common.by import By#打開瀏覽器
driver = webdriver.Chrome()
# driver.implicitly_wait(2)
#進入百度主頁
driver.get("https://www.baidu.com")
#通過id定位輸入框位置
element = driver.find_element(By.ID,'kw')
#輸入元素
element.send_keys("測試")
#Exception managing chrome: error decoding response body
time.sleep(2)
#關閉瀏覽器
driver.close()

? ? ?這里我們通過driver.find_element()這個方法來通過By.ID通過id這個屬性來確定html的位置,當然我們還有其他的方法確定html的位置,查找到html的位置后會返回一個對象WebElement我們通常命名為element是WebElement的實例,這個類是Selenium用來表示html的核心對象,通過這個對象我們可以對網頁上的元素進行各類操作。

? ? ? ?由于我們已經通過ID查找到了html的具體位置,通過send_keys()將想要的內容傳入輸入框。當然我們再輸入“測試”后單擊進行搜索,我們仍然可以通過id定位按鈕的html位置然后進行click()之后就和我們正常用的搜索相同了。?

? 但是需要特別注意的是雖然一般情況下ID是唯一的但是也會出現“意外”,也會有些代碼不遵守這種默認的規則,此時我們就需要利用其他的方式完成我們的目標。

通過By.NAME定位:

? ? 在百度輸入框中我們也可以看到name這個屬性,我們也可以通過name完成上述操作,輸入“測試”。

?


import timefrom selenium import webdriver
from selenium.webdriver.common.by import By#打開瀏覽器
driver = webdriver.Chrome()
# driver.implicitly_wait(2)
#進入百度主頁
driver.get("https://www.baidu.com")
#通過id定位輸入框位置
# element = driver.find_element(By.ID,'kw')
#輸入元素
element = driver.find_element(By.NAME,'wd')element.send_keys("測試")
#Exception managing chrome: error decoding response body
time.sleep(2)
#關閉瀏覽器
driver.close()

?由此可見我們通過name屬性仍然完成了上述操作。

通過TAG_NAME定位:

? 這種定位方式是通過標簽進行定位,我們可以通過這種定位獲取到對應標簽下的所有信息并且我們可以將這些信息進行打印,假如我們要獲取到div標簽下的所有信息,例如:

??

import timefrom selenium import webdriver
from selenium.webdriver.common.by import By
from sqlalchemy.sql.base import elements#打開瀏覽器
driver = webdriver.Chrome()
#進入百度主頁
driver.get("https://www.baidu.com")elements = driver.find_element(By.TAG_NAME,'div')
for element in elements:print(element)#關閉瀏覽器
driver.close()

? 理論上來說。通過這種方式,我們可以獲取到div標簽上的所有信息,但是如果我們運行這段代碼我們會發現不會輸出任何內容,這是因為我們訪問某個網頁時,如果數據還未加載此時我們就使用TAG_NAME定位,由于此時還沒有數據,因此返回值可能是none。但是這種解決的方式也非常簡單,沒時間加載數據那我們就給它時間,我們此處可以使用time.sleep()設置等待的時間,但是我們要注意的是多長時間才算長呢?如果時間過長會造成資源的浪費,時間太短數據加載不完全,因此Selenium給我們提供了一種方式(等待元素),讓我們能解決這個問題,driver.implicitly_wait()方法,這種方式可以設置全局的隱式等待時間,當查找元素時,如果元素未被找到,會不斷地在指定時間進行查找,直到超時或元素被找到。

? 等待元素的使用也非常簡單,只需要在進入頁面后加入這個方法就行,如果熟練使用了之后我們每一次進行web測試都會默認添加implicitly_wait()方法。

? 如果是正常運行的話通過這種方式獲取的結果應為:

通過By.CLASS_NAME定位:

? 在這里統統class_NAME進行定位置時我們需要特別注意,class_name屬性進行定位適用于類名唯一的元素。使用方法同上述方法基本相同。

import timefrom selenium import webdriver
from selenium.webdriver.common.by import By
from sqlalchemy.sql.base import elements#打開瀏覽器
driver = webdriver.Chrome()
#進入百度主頁
driver.get("https://www.baidu.com")
driver.implicitly_wait(2)
element = driver.find_element(By.CLASS_NAME,'s_ipt')
element.send_keys("測試")
time.sleep(2)
#關閉瀏覽器
driver.close()

? 我們也可以通過這種方式,進行輸入框的輸入。?

通過By.LINK_TEXT定位:

? ?這種定位僅支持<a>標簽并且文本內容必須完全一致,包括大小寫和空格,即使其他標簽包含相同的文本,也不會進行匹配,例如:

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
import time# 初始化瀏覽器
driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(10)  # 設置隱式等待時間try:# 步驟 1: 打開百度首頁driver.get("https://www.baidu.com")print("成功打開百度首頁")# 步驟 2: 使用 By.LINK_TEXT 定位"新聞"鏈接news_link = driver.find_element(By.LINK_TEXT, "新聞")# 驗證鏈接文本和 href 屬性                                    用于獲取html的屬性值print(f"找到鏈接: 文本='{news_link.text}', href='{news_link.get_attribute('href')}'")# 步驟 3: 點擊"新聞"鏈接news_link.click()print("點擊'新聞'鏈接")# 步驟 4: 等待并驗證頁面標題WebDriverWait(driver, 10).until(EC.title_contains("百度新聞"))current_title = driver.title()print(f"當前頁面標題: {current_title}")print("驗證結果: 頁面成功跳轉到百度新聞")# 步驟 5: 截圖保存(可選)driver.save_screenshot("baidu_news.png")print("截圖已保存為: baidu_news.png")except Exception as e:print(f"測試失敗: {e}")# 出錯時截圖driver.save_screenshot("error.png")
finally:# 等待 3 秒以便查看結果time.sleep(3)# 關閉瀏覽器driver.quit()print("測試完成,瀏覽器已關閉")

? 通過這種方式我們就可以通過文本內容獲取到<a>標簽中的一些屬性如超鏈接等。?

?

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

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

相關文章

2025第十五屆上海生物發酵展:江蘇健達干燥盛裝赴會

2025 年 8 月 7 - 9 日&#xff0c;上海新國際博覽中心將迎來一場生物發酵行業的盛會 —— 第 15 屆上海國際生物發酵產品與技術裝備展覽會&#xff08;BIOCHINA 2025&#xff09;。作為國內干燥設備領域的領軍企業&#xff0c;江蘇健達干燥工程有限公司受邀盛裝參展&#xff0…

【效率工具】單機游戲修改方案:輕量管理器+全能平臺組合

大家好&#xff01;今天我要給大家介紹兩款超級實用的軟件&#xff0c;專門為喜歡玩單機游戲的小伙伴們準備。 一、風靈月影管理器 不想滿網翻修改器&#xff1f;這個 27M 的小工具直接幫你一鍵搞定&#xff0c;這款軟件是由B站UP鴉無量 開發。 收錄上千款游戲補丁&#xff0c;…

七天學會SpringCloud分布式微服務——01——基礎概念

重點是復習體系&#xff0c;從今天6.24開始&#xff0c;確保轉化為自己的東西心平氣和&#xff0c;腳踏實地學習的是尚硅谷微服務 1、從單體架構到集群架構再到分布式架構 單體架構 就是 所有的功能&#xff08;服務&#xff09;模塊 都部署在同一臺服務器&#xff08;一臺服…

三分鐘學會利用deepseek將復雜信息轉換成可視化圖表

數據可視化是傳達復雜信息的重要手段。通過將數據轉化為直觀的圖表、圖形和交互式界面,我們可以更高效地理解信息、發現趨勢并做出決策。對于普通人來說,要將數據可視化可謂千難萬難。但在AI工具飛速發展的今天,這個過程將會變得非常簡單。今天分享的內容就是如何使用生成式…

PDF處理控件Spire.PDF系列教程:Python中快速提取PDF文本、表格、圖像及文檔信息

在 Python 中讀取 PDF 文檔是實現文檔自動化、內容分析和數據提取的基礎操作之一。無論你處理的是合同、報告、發票&#xff0c;還是科研論文&#xff0c;能夠通過代碼訪問 PDF 內容&#xff0c;不僅能節省時間&#xff0c;還能帶來更高效的處理流程。 要在 Python 中準確提取…

微軟人工智能證書AI-102 | 如何快速通過?

微軟 AI-102 考試&#xff0c;全稱 “Designing and Implementing a Microsoft Azure AI Solution”&#xff0c;是微軟推出的用于驗證考生在 Azure 平臺上設計和實施 AI 解決方案核心能力的認證考試。以下是具體介紹&#xff1a; 考試描述&#xff1a; 考試主要衡量考生實施計…

github使用指南

1、生成SSH密鑰對 ssh-keygen -t ed25519 -C "你的github郵箱"然后根據提示保存路徑&#xff0c;設置密碼 2、將公鑰添加到github cat ~/.ssh/id_ed25519.pub復制輸出內容。 在gihub中點擊New SSH Key&#xff0c;添加密鑰 3、配置git使用SSH地址 git remote se…

AD22以上的基礎操作

1.檢測創建的原理圖器件庫 2.原理圖頁加大 Size&#xff1a;常規和自定義 推薦可視化柵格100mil 快捷鍵VG 3.原理圖器件器件號排序 自動排序&#xff1a;快捷鍵TAA 先解鎖 4.BOM(Bill of Material)物料表導出 description描述&#xff1a;類似精度。 導出各種類型bom表 5…

FastAPI技術深度解析與實戰指南

導讀&#xff1a;在Python Web開發領域經歷了Django和Flask多年統治后&#xff0c;FastAPI的崛起正在重新定義API開發的技術標準。這篇深度技術解析將為開發者揭示FastAPI如何通過獨特的架構設計解決傳統框架的核心痛點。 傳統Python Web框架在面對高并發場景時暴露出明顯的性能…

Python 可迭代的對象、迭代器 和生成器(何時使用生成器表達式)

何時使用生成器表達式 在示例 10-16 中&#xff0c;為了實現 Vector 類&#xff0c;我用了幾個生成器表達 式&#xff0c;eq、hash、abs、angle、angles、format、add 和 __mul__ 方法中各有一個生成器表達式。在這些方法中使用列表推 導也行&#xff0c;不過立即返回的列表要…

復習和預習(C++)答案解析

填空題答案及解釋 在 for 循環實現累加時&#xff0c;通常在循環上方初始化累加器變量&#xff0c;如 int m ______。 答案&#xff1a;0 解釋&#xff1a;累加器需從 0 開始&#xff0c;才能正確累積后續值的總和。 switch 語句根據表達式的值與各個______后的常量表達式進行…

uniapp處理后端返回的html字符串

前言&#xff1a;采用v-html方法處理 1.處理前 <html><head><meta http‐equiv"Content‐Type" content"text/html; charsetUTF-8"></head><body><form ?<input type"submit" value"立刻提交"…

如何在 Ubuntu 上通過終端或在 VirtualBox 中安裝 GCC

無論你是正在編譯 C 程序,還是在 Linux 上從源代碼構建軟件,GNU 編譯器集合(GCC)都是每位 Linux 開發者需要的工具之一,因為它能夠編譯 C、C++,甚至 Fortran、Ada 等其他語言。但如果你想知道如何在 Ubuntu 上安裝 GCC 并設置它來編譯代碼,別擔心——你來對地方了。 本…

Mac python3.12 執行pip/pip3異常externally-managed-environment

環境&#xff1a;Mac、Python3.12.x版本&#xff08;3.12.5&#xff09; 問題&#xff1a;執行pip install xyz 后出現異常&#xff1a; error: externally-managed-environment This environment is externally managed ╰─> To install Python packages system-wide,…

最后的生還者2:重制版 免安 中文離線運行版+整合包

最后的生還者2&#xff1a;重制版 1.4.10515.0636 免安 中文離線運行版整合包 最低配置: 需要 64 位處理器和操作系統 操作系統: Windows 10/11 64-bit (version 1909 or higher) 處理器: Intel Core i3-8100, AMD Ryzen 3 1300X 內存: 16 GB RAM 顯卡: NVIDIA GeForce GTX 16…

【Arm】DS如何應用腳本文件實現調試

1、 文檔目標 在現代嵌入式開發中&#xff0c;調試工具的選擇和使用對開發效率和產品質量有著至關重要的影響。Arm Development Studio&#xff08;簡稱ArmDS&#xff09;作為一款功能強大的集成開發環境&#xff08;IDE&#xff09;&#xff0c;專為基于ARM架構的處理器設計&…

如何通過ETL進行數據抽取工作

數據抽取作為數據集成過程中的核心環節&#xff0c;抽取速度直接決定了整個數據生命周期的質量與效率。在數字化轉型加速的當下&#xff0c;企業需要從結構化數據庫、非結構化文檔、實時流數據、外部API接口等異構數據源中提取有價值的信息&#xff0c;這一過程要面臨數據格式多…

隨機存儲器有哪些,只讀存儲器又有哪些

一、隨機存儲器&#xff08;RAM&#xff0c;易失性&#xff0c;斷電數據丟失&#xff09; 1. 靜態RAM&#xff08;SRAM&#xff09; 特點&#xff1a;用觸發器存儲數據&#xff0c;無需刷新&#xff0c;速度極快&#xff08;納秒級&#xff09;&#xff0c;但容量小、成本高。…

PIC單片機MPLAB編譯報錯的一些問題及解決方法

PIC18單片機MPLAB編譯出錯的一些問題的解決方法 Couldnt locate build tool. Check tool locations. Unknowm processor&#xff1a;18FXXXXX’ Halting build on first failure as requested. Error [1027] unable to locate stddef.h Error - could not find file c018i.o. …

JavaSE基礎復習

1.數據類型&#xff1a; 1&#xff09;整數類型&#xff1a;byte、short、int、long 2&#xff09;浮點型&#xff1a;double、float 3&#xff09;字符型&#xff1a;char 4&#xff09;布爾類型&#xff1a;Boolean 5&#xff09;引用數據類型&#xff1a;Date、Array、…