在 Web 自动化领域,表单交互、弹窗处理和文件上传是最常见也最容易踩坑的场景。想象一下:你编写的脚本明明定位到了输入框,却无法输入文字;点击按钮后弹出的对话框让脚本瞬间 “卡壳”;好不容易找到文件上传按钮,却发现 Selenium 无法直接操作系统文件选择框…… 这些问题往往让新手头疼不已。本文将系统讲解 Selenium 在这三类场景中的解决方案,结合实战案例帮你突破瓶颈。
网页表单是用户与网站交互的核心载体,从登录页的账号密码输入,到电商平台的订单提交,都离不开表单操作。Selenium 对表单元素的处理能力直接决定了自动化脚本的实用性,以下是常见表单元素的处理技巧。
输入框是表单中最基础的元素,send_keys()方法是默认选择,但实际使用中需注意这些细节:
username_input = driver.find_element(By.ID, "username")
username_input.clear() # 清空输入框
username_input.send_keys("test_user") # 输入内容
# 移除disabled属性
driver.execute_script(
"arguments[0].removeAttribute('disabled')",
driver.find_element(By.ID, "disabled-input")
)
# 之后即可正常输入
from selenium.webdriver.common.keys import Keys
search_input = driver.find_element(By.ID, "search")
search_input.send_keys("Python书籍" + Keys.ENTER) # 输入后按回车
下拉框分为原生 select 标签和自定义下拉框(如用 div+js 实现),处理方式截然不同:
原生下拉框由
from selenium.webdriver.support.ui import Select
# 定位select元素
select_element = driver.find_element(By.ID, "city-select")
# 初始化Select对象
select = Select(select_element)
# 三种选择方式
select.select_by_index(1) # 按索引选择(从0开始)
select.select_by_value("shanghai") # 按option的value属性选择
select.select_by_visible_text("上海") # 按可见文本选择
# 取消选择(仅适用于允许多选的下拉框)
select.deselect_by_value("beijing")
# 获取所有选项
options = select.options
for option in options:
print(option.text)
现代网页常用 div+css 模拟下拉框(无 select 标签),需通过点击展开选项,再选择目标值:
# 点击下拉框触发展开
driver.find_element(By.CLASS_NAME, "custom-select").click()
# 等待选项加载完成,选择目标选项
target_option = WebDriverWait(driver, 10).until(
EC.visibility_of_element_located((By.XPATH, "//div[text()='北京']"))
)
target_option.click()
小贴士:如果选项在滚动列表中,可通过ActionChains滚动到目标选项再点击:
from selenium.webdriver.common.action_chains import ActionChains
action = ActionChains(driver)
action.move_to_element(target_option).click().perform()
复选框和单选框的核心是判断状态并设置选中,需注意 “已选中” 状态的验证:
checkbox = driver.find_element(By.ID, "agree-terms")
# 如果未选中,则点击选中
if not checkbox.is_selected():
checkbox.click()
# 选择“男”单选框
driver.find_element(By.XPATH, "//input[@name='gender' and @value='male']").click()
除了点击提交按钮,还可通过submit()方法提交表单(适用于包含