Selenium 是 Web 自动化的利器,但在操作网页时,我们经常会遇到元素未加载、表单控件多样等情况。今天,我们来详细讲解以下几个重点:
-
隐性等待(Implicit Wait)
-
单选框(Radio Button)操作
-
多选框(Checkbox)操作
-
下拉框(Select)操作
1️⃣ 隐性等待(Implicit Wait)
在 Selenium 中,元素可能需要时间加载,直接操作可能报错。隐性等待就是告诉浏览器:
等一等,最多等 X 秒,如果元素出现就继续执行。
python
from selenium import webdriver
from selenium.webdriver.common.by import By
# 初始化浏览器
driver = webdriver.Chrome()
driver.get("http://localhost/ecommerce.html")
# 设置隐性等待(全局)
driver.implicitly_wait(10) # 最多等待10秒
# 寻找元素
login_btn = driver.find_element(By.ID, "login-submit")
login_btn.click()
特点:
-
设置一次,整个
driver生命周期有效 -
等待时间内元素一旦出现就立即执行
-
简单易用,但不适合复杂条件
2️⃣ 单选框(Radio Button)操作
单选框通常用来选择一个固定选项。例如:选择用户角色 管理员 或 普通用户。
python
# 假设 HTML:
# <input type="radio" name="role" value="admin">
# <input type="radio" name="role" value="user">
radio_buttons = driver.find_elements(By.NAME, "role")
for rb in radio_buttons:
if rb.get_attribute("value") == "admin":
rb.click() # 选中管理员
Tips:
-
get_attribute("checked")可以判断当前是否被选中 -
name属性通常相同,value 用于区分选项
3️⃣ 多选框(Checkbox)操作
多选框可以同时选择多个选项。例如:商品管理页面中选中多行用户。
python
# 假设 HTML:
# <input type="checkbox" class="user-select" data-id="u123">
checkboxes = driver.find_elements(By.CLASS_NAME, "user-select")
# 选中全部
for cb in checkboxes:
if not cb.is_selected():
cb.click()
# 取消选中
for cb in checkboxes:
if cb.is_selected():
cb.click()
注意事项:
-
is_selected()判断当前状态 -
多选框可以同时选择多个选项
4️⃣ 下拉框(Select)操作
HTML 的 <select> 元素可以通过 Select 类操作。
python
from selenium.webdriver.support.ui import Select
# 假设 HTML:
# <select id="user-role">
# <option value="admin">管理员</option>
# <option value="user">普通用户</option>
# </select>
select = Select(driver.find_element(By.ID, "user-role"))
# 根据 value 选择
select.select_by_value("admin")
# 根据可见文本选择
select.select_by_visible_text("普通用户")
# 根据索引选择(从0开始)
select.select_by_index(0)
Tips:
-
单选下拉和多选下拉都适用
-
多选下拉可以
select.select_by_value("xxx")多次