CSS 表达式 (上)
理解 CSS 选择器的优势与定位原理
掌握基础 CSS 选择器语法
能用 CSS 选择器定位常见页面元素
核心讲解
CSS 选择器原本是网页样式的选择器,Selenium 借用它来定位元素,特点是速度快、语法简洁、跨浏览器兼容,是仅次于 id 的首选定位方式。
(1)基础选择器表格
选择器 | 语法 | 说明 |
|---|---|---|
ID 选择器 |
| 匹配指定 id 的元素,最快 |
类选择器 |
| 匹配指定 class 的元素 |
标签选择器 |
| 匹配所有该标签的元素 |
属性选择器 |
| 匹配指定属性和值的元素 |
表格
选择器 | 语法 | 说明 |
|---|---|---|
后代选择器 |
| 空格分隔,匹配父元素下所有后代 |
子选择器 |
| 只匹配直接子元素,不包含孙子 |
并集选择器 |
| 同时匹配多个选择器 |
可以把标签、类、属性组合起来,精确定位,比如 input#kw.s_ipt[name="wd"]
代码示例
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选择器
input1 = driver.find_element(By.CSS_SELECTOR, "#kw")
# 2. 类选择器
btn = driver.find_element(By.CSS_SELECTOR, ".s_btn")
# 3. 标签选择器
all_input = driver.find_elements(By.CSS_SELECTOR, "input")
# 4. 属性选择器
input2 = driver.find_element(By.CSS_SELECTOR, "[name='wd']")
# 模糊属性匹配
link = driver.find_element(By.CSS_SELECTOR, "[href^='http://news']") # 开头匹配
# 5. 后代选择器:form下的input
form_input = driver.find_element(By.CSS_SELECTOR, "#form input")
# 6. 子选择器:直接子元素
logo_img = driver.find_element(By.CSS_SELECTOR, "#lg > img")
# 7. 组合定位
exact_input = driver.find_element(By.CSS_SELECTOR, "input.s_ipt#kw[name='wd']")
# 8. 并集选择器:同时匹配多个
elements = driver.find_elements(By.CSS_SELECTOR, "#kw, #su")
print("定位成功,元素数量:", len(elements))
driver.quit()
常见误区
class 多值用空格分隔:元素有多个 class 时,CSS 选择器用
.连接,不是空格属性值引号问题:属性值有特殊字符时要加引号,一般建议都加
后代和子选择器混淆:后代是所有层级,子选择器只有一层
选择器写太长:层级太多的选择器脆弱,页面一变就失效,尽量简短
课后练习
用 CSS 选择器定位表单中的所有输入框
用属性选择器定位所有 href 包含 "baidu" 的链接
对比 ID 定位和 CSS 定位的执行速度差异

