一、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')