选择元素的基本方法
掌握 8 种基础元素定位方法
理解
find_element和find_elements的区别能根据场景选择最优的定位方式
核心讲解
操作元素的前提是找到元素,Selenium 提供了多种定位方式,优先级从高到低:id > name > css > xpath。
(1)单个元素与多个元素find_element():查找第一个匹配的元素,找不到报错find_elements():查找所有匹配的元素,返回列表,找不到返回空列表
表格
定位方式 | 语法 | 适用场景 |
|---|---|---|
id 定位 |
| 元素有唯一 id,最快最稳定,优先用 |
name 定位 |
| 表单元素有 name 属性 |
class 定位 |
| 元素有 class 属性,注意只能传一个类名 |
标签定位 |
| 按标签名批量查找,很少单独用 |
链接文本 |
| 精准匹配 a 标签的全部文字 |
部分链接 |
| 模糊匹配 a 标签的部分文字 |
CSS 选择器 |
| 语法简洁,速度快,复杂定位首选 |
XPath 选择器 |
| 功能最强,任何场景都能定位 |
优先用唯一属性:id、name
没有唯一属性时,优先用 CSS 选择器
复杂层级、文字定位用 XPath
绝对不要用自动生成的动态 id
代码示例
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
driver.maximize_window()
# 1. id定位:定位搜索输入框
input_box = driver.find_element(By.ID, "kw")
print("输入框标签:", input_box.tag_name)
# 2. name定位
input_box2 = driver.find_element(By.NAME, "wd")
# 3. class定位
search_btn = driver.find_element(By.CLASS_NAME, "s_btn")
# 4. 链接文本定位
news_link = driver.find_element(By.LINK_TEXT, "新闻")
# 5. 部分链接文本
map_link = driver.find_element(By.PARTIAL_LINK_TEXT, "地")
# 6. 标签名定位
links = driver.find_elements(By.TAG_NAME, "a")
print("页面a标签数量:", len(links))
# 7. CSS选择器
logo = driver.find_element(By.CSS_SELECTOR, "#lg img")
# 8. XPath定位
more_link = driver.find_element(By.XPATH, "//a[text()='更多']")
driver.quit()
常见误区
定位不到元素直接报错:元素还没加载出来、在 iframe 里、定位器写错,都会报错
class 定位传多个类名:
By.CLASS_NAME只能传一个类名,多类名要用 CSS 选择器find_elements 取单个元素:返回的是列表,要加索引
[0]才能操作动态属性定位:带数字的动态 id、随机 class,定位了下次也会变
课后练习
在百度首页用至少 4 种不同方式定位搜索按钮
定位页面所有的导航链接,打印每个链接的文本
思考:为什么 id 定位是最优选择?什么场景下不能用?

