一、Selenium八大元素定位新方法
儘管Selenium定位元素的八大方法已經較為完善,但是每種定位方式都有其優缺點,使用時需要根據實際情況選擇。同時,Selenium也經常會推出新的元素定位方法,如Selenium 4.0中新增了Relative定位方法。
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import Select
# Relative定位方法
article = driver.find_element(By.CSS_SELECTOR, 'article:nth-child(1)')
title = article.find_element(By.CSS_SELECTOR, 'h2')
二、Selenium元素定位方法
Selenium提供了八種元素定位方法,它們分別是:
- ID
- Name
- Class Name
- Tag Name
- Link Text
- Partial Link Text
- XPath
- CSS Selector
# 以ID定位為例
from selenium.webdriver.common.by import By
element = driver.find_element(By.ID, 'element-id')
三、Selenium八大定位方法
下面,我們將會對Selenium八大定位方法逐一進行介紹:
- 1. ID定位
ID定位是一種最基本的定位方法,通過元素ID查找元素。
from selenium.webdriver.common.by import By
element = driver.find_element(By.ID, 'element-id')
Name定位是通過元素名稱查找元素。
from selenium.webdriver.common.by import By
element = driver.find_element(By.NAME, 'element-name')
Class Name定位是通過元素class屬性查找元素。
from selenium.webdriver.common.by import By
elements = driver.find_elements(By.CLASS_NAME, 'element-class')
Tag Name定位是通過HTML標籤名查找元素,可以查找到同類元素的集合。
from selenium.webdriver.common.by import By
elements = driver.find_elements(By.TAG_NAME, 'element-tag')
Link Text定位是通過鏈接文本查找鏈接元素。
from selenium.webdriver.common.by import By
element = driver.find_element(By.LINK_TEXT, 'element-link-text')
Partial Link Text定位是通過鏈接部分文本查找鏈接元素。
from selenium.webdriver.common.by import By
element = driver.find_element(By.PARTIAL_LINK_TEXT, 'partial-link-text')
XPath定位是通過XPath表達式查找元素,XPath是一種XML路徑語言。
from selenium.webdriver.common.by import By
element = driver.find_element(By.XPATH, 'element-xpath')
CSS Selector定位是通過CSS選擇器查找元素。
from selenium.webdriver.common.by import By
element = driver.find_element(By.CSS_SELECTOR, 'element-css-selector')
四、Selenium定位隱藏元素
有些網頁中的元素可能被隱藏或者用了一些特殊的樣式,可以使用JavaScript或者CSS樣式覆蓋來使其顯示出來,例如:
element = driver.execute_script("return document.querySelector('#id').innerHTML")
五、Selenium元素定位有哪些
使用Selenium可以定位到以下類型的元素:
- 文本框/輸入框
- 按鈕
- 單選框/多選框
- 下拉框
- 超鏈接
- 圖片
- 表格
- iframe/frameset
六、Selenium動態元素定位方法
如果頁面中的元素是動態的,即其位置或者屬性值不斷變化,可以使用Selenium動態元素定位方法,如:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'element-id')))
七、Selenium定位元素的方法
以下是一些常用的Selenium定位元素的方法:
- 1. find_element():查找單個元素
element = driver.find_element(By.ID, 'element-id')
elements = driver.find_elements(By.TAG_NAME, 'element-tag')
element = driver.find_element_by_xpath('element-xpath')
element = driver.find_element_by_css_selector('element-css-selector')
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'element-id')))
from selenium.webdriver.common.action_chains import ActionChains
element = driver.find_element(By.ID, 'element-id')
ActionChains(driver).move_to_element(element).perform()
element = driver.find_element(By.ID, 'element-id')
element.send_keys('input-text')
element = driver.find_element(By.ID, 'element-id')
element.click()
八、不屬於Selenium八大定位方式
以下是一些不屬於Selenium八大定位方式的方式:
- 1. By.JS定位
使用JavaScript代碼定位元素。
element = driver.execute_script("return document.querySelector('#id')")
使用Link Text字符串的部分文本進行匹配定位。
elements = driver.find_elements(By.XPATH, "//*[contains(text(),'partial-link-text')]")
通過父節點和子節點的關係查找元素。
element = driver.find_element(By.XPATH, '//form/div/input')
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/238901.html