八大定位
今天我们来学一学,selenium有名的八大定位方式;都有哪八个呢,下面我先列出来;之后再一个一个的实践
- id,通过id定位元素
- name,通过name定位
- class_name,通过class类名定位
- tag_name,通过标签名称
- link_text,通过链接文本
- partial_link_text,通过部分链接文本
- xpath,通过xpth定位元素
- css_selector,通过css选择器
以上就是著名的八大定位,下面就让我们一个一个的看,具体是怎么个一回事
ID
最快速、可靠的定位方式;当元素有唯一id时候
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By# broswer = webdriver.Chrome()
serve_path = r'D:\Code_Study\driver\chromedriver-win64\chromedriver.exe'
service = Service(serve_path)
browser = webdriver.Chrome(service=service)
# 访问网站
browser.get('https://www.selenium.dev/selenium/web/locators_tests/locators.html')
# + id,通过id定位元素,可以看到是一个输入框
element = browser.find_element(By.ID, 'lname')
element.send_keys('selenium')
time.sleep(5)
print(element.tag_name) # input
name
element = browser.find_element(By.NAME, 'wd')
element.send_keys('selenium')
time.sleep(5)
print(element.tag_name) # input
class_name
适合通过class名定位,但是需要注意class不是唯一的,可能会有多个
# 先通过name定位输入框,输入东西后;点击百度首页按钮
element = browser.find_element(By.NAME, 'wd')
element.send_keys('selenium')
time.sleep(5)
element = browser.find_element(By.CLASS_NAME, 'toindex')
element.click()
time.sleep(5)
tag_name
通过HTML的标签名定位,一般需要结合其他条件
# 可以看到先通过定位左上角的id;后面再使用find_elements;找到a标签的列表集合
# 最后再循环遍历出来,每一个标签的href链接
# 注意:find_elements只有当找到的元素多个的时候,才可以使用;
# 可以直接后面加下标使用;前提是要知道所在位置
elements = browser.find_element(By.ID, 's-top-left').find_elements(By.TAG_NAME, 'a')
for element in elements:print(element.get_attribute('href'))
time.sleep(5)
link_text
用于定位超链接文本(完全匹配)
# 可以看到,点击了新闻的跳转
element = (browser.find_element(By.LINK_TEXT, '新闻').click())
time.sleep(5)
partial_link_text
超链接文本的部分匹配
# 可以看到,跳转到了hao123页面
element = (browser.find_element(By.PARTIAL_LINK_TEXT, 'hao').click())
time.sleep(5)
xpath
最灵活的定位方式,适合复杂场景;xpath的内容,后面会单独讲一篇文章了;
element = browser.find_element(By.XPATH, '//*[@id="kw"]')
element.send_keys('selenium')
time.sleep(5)
print(element.tag_name) # input
css_selector
通过css选择器来进行定位,常用的有以下几种
#kw
;意思是使用了id选择器.toindex
;意思是class选择器input[name="wd"]
;属性选择器;意思是选择name="wd"的input标签
# #kw;可以看到,也是定位到了输入框
# element = browser.find_element(By.CSS_SELECTOR, '#kw')
# element = browser.find_element(By.CSS_SELECTOR, '.s_ipt')
# element = browser.find_element(By.CSS_SELECTOR, 'input[name="wd"]')element.send_keys('selenium')
time.sleep(5)
print(element.tag_name) # input
好了,八大定位都实践完毕了;但是其中出现了一些新的知识点;比如xpath,它的内容都需要单独讲一下
还有下面这个有没有s
的区别
find_element和find_elements的区别详解
在 Selenium 中,find_element
和 find_elements
是两种主要的元素定位方法,它们有以下关键区别:
核心区别对比
特性 | find_element |
find_elements |
---|---|---|
返回值类型 | 返回单个 WebElement 对象 | 返回 WebElement 对象的列表 |
未找到元素时行为 | 抛出 NoSuchElementException 异常 |
返回空列表 [] |
使用场景 | 确定唯一存在的元素 | 查找多个相同特征的元素 |
方法后缀 | 单数形式 (element) | 复数形式 (elements) |
何时使用哪种方法?
使用 find_element
当:
- 你确定页面上只有一个匹配元素
- 元素是唯一标识的(如通过ID)
- 如果元素不存在应该立即报错
使用 find_elements
当:
- 需要获取多个相似元素(如所有表格行、所有图片)
- 需要检查元素是否存在而不引发异常
- 处理动态内容时更安全
八大定位讲完了,下一篇就讲一下Element的常见属性和方法