练习 By.CSS_SELECTOR 定位方法的核心实操与效果验证
本页面提供 By.CSS_SELECTOR 定位方法的完整练习场景。页面包含练习要求描述卡(方法概念 + Selenium 示例 + 练习清单)和定位后操作效果展示区域,在输入框输入内容、点击按钮、勾选选择框时,效果展示区会实时显示对应卡片。
比 XPath 更简洁、执行速度更快;浏览器原生解析,支持 #id、.class、属性匹配、组合符(> + ~ 空格)、伪类(:nth-child / :checked / :disabled / :not)等;不支持文本内容匹配和向上父级轴定位。
.login-btn 只能定位登录按钮这 1 个;.danger-btn 只能定位"删除 / 清空"这组危险操作按钮 —— 拿得准。.btn 页面上所有 30 个按钮都有 —— 定位多个元素,分不清谁是谁。.nav-item.active(同时满足两个 class)比单独用 .nav-item(一堆)或 .active(可能别处也有)都更准。css_btn_login_1 这种动态数字 → [id^='css_btn_login'] 前缀匹配;.html 结尾 → a[href$='.html'] 后缀匹配;class 含 btn 子串 → [class*='btn'] 子串匹配;#task_list li:nth-child(odd);取第 3 个 → li:nth-child(3);input[name='notify']:checked;置灰禁用的按钮 → button:disabled;#sidebar .menu-item(后代),.card > .title(直接子级),.label + .input(紧邻下一个兄弟)。text() 文本内容匹配,不支持 parent:: 向上父级轴定位,索引从 1 开始(与 XPath 一致但不同于 JS 的 0 基)。
from selenium import webdriver from selenium.webdriver.common.by import By form = driver.find_element(By.CSS_SELECTOR, "#sec-by-css .register-form") # 组合定位:id + class + 后代 even_tasks = driver.find_elements(By.CSS_SELECTOR, "#css_task_list li:nth-child(even)") # 偶数位任务 notify_checks = driver.find_elements(By.CSS_SELECTOR, "#sec-by-css input[name='css_notify']:checked") # 已勾选通知
:checked)→ 点标签切换 .active → 点「保存设置」观察效果区输出;再点「重置设置」验证默认值恢复(:checked 只剩系统公告、标签只剩自动化测试):nth-child(odd) 取奇数位、li[data-priority='urgent'] 取紧急项、.done 取已完成项;最后打开浏览器 F12 控制台,输入 $$('.css-tag.active').length 回车,对比 Selenium 脚本里 len(driver.find_elements(By.CSS_SELECTOR, ".css-tag.active")) 的值是否一致(底层都是 querySelectorAll,应该完全相同)操作步骤:
① 填写昵称 / 年龄 / 个性签名文本框 → find_element(By.CSS_SELECTOR, "#css_form_settings input[name='css_nickname']")
② 勾选/取消 4 个通知复选框 → find_elements(By.CSS_SELECTOR, "input[name='css_notify']:checked")(:checked 伪类取已勾选项)
③ 点 5 个兴趣标签切换选中态 → find_elements(By.CSS_SELECTOR, ".css-tag.active")(.active 类表示已选中)
④ 点「保存设置」观察效果区输出
⑤ 点「重置设置」验证默认值恢复(:checked 只剩系统公告、.active 只剩自动化测试)
操作步骤:
① 点击任意 li 切换完成态(出现 .done 类 + 删除线)
② 练习 3 个选择器写法:
#css_task_list li:nth-child(odd) 取奇数位任务
#css_task_list li[data-priority='urgent'] 取紧急任务
#css_task_list li.done 取已完成任务
③ 打开浏览器 F12 控制台,输入 $$('#css_task_list li.done').length 回车,对比 Selenium 脚本里 len(driver.find_elements(By.CSS_SELECTOR, "#css_task_list li.done")) 是否一致
当前尚无操作记录
请尝试:① 设置表单填写→勾选通知→选标签→保存 ② 重置设置 ③ 任务清单点击 6 条切换完成态