selenium对每种前端控件的操作,python举例

以下通过豆包整理,仅做记录

Selenium 对前端常用控件的操作方式各有特点,以下是针对不同类型控件的典型操作方法(以 Python 为例):

1. 输入类控件

<input>(文本 / 密码 / 数字等输入框)
  • 操作:输入文本、清空内容、获取值

python

运行

复制代码
# 定位元素
input_element = driver.find_element(By.ID, "username")

# 输入文本
input_element.send_keys("test_user")

# 清空内容
input_element.clear()

# 获取当前值
value = input_element.get_attribute("value")
<textarea>(多行文本框)
  • 操作:输入多行文本、清空、获取内容

python

运行

复制代码
textarea = driver.find_element(By.NAME, "description")

# 输入多行文本
textarea.send_keys("第一行文本\n第二行文本")

# 清空
textarea.clear()

# 获取内容
content = textarea.get_attribute("value")

2. 选择类控件

<select> + <option>(下拉选择框)
  • 操作:选择选项(通过索引、可见文本、值)

python

运行

复制代码
from selenium.webdriver.support.ui import Select

select_element = Select(driver.find_element(By.ID, "city"))

# 通过索引选择(索引从0开始)
select_element.select_by_index(2)

# 通过可见文本选择
select_element.select_by_visible_text("北京")

# 通过option的value属性选择
select_element.select_by_value("shanghai")

# 取消所有选择(仅适用于multiple=True的下拉框)
select_element.deselect_all()

# 获取所有选中的选项
selected_options = select_element.all_selected_options
<input type="checkbox">(复选框)
  • 操作:勾选、取消勾选、判断是否选中

python

运行

复制代码
checkbox = driver.find_element(By.NAME, "agree")

# 勾选(如果未选中)
if not checkbox.is_selected():
    checkbox.click()

# 取消勾选(如果已选中)
if checkbox.is_selected():
    checkbox.click()

# 判断是否选中
is_checked = checkbox.is_selected()
<input type="radio">(单选框)
  • 操作:选择指定选项

python

运行

复制代码
# 选择value为"male"的单选框
radio_male = driver.find_element(By.CSS_SELECTOR, "input[value='male']")
radio_male.click()

3. 按钮类控件

<button><input type="submit">
  • 操作:点击按钮

python

运行

复制代码
# 定位提交按钮并点击
submit_btn = driver.find_element(By.ID, "submit-btn")
submit_btn.click()

# 有时需要处理点击后页面加载,可配合等待
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 等待按钮可点击后再点击
WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.ID, "submit-btn"))
).click()

4. 媒体类控件

<img>(图片)
  • 操作:获取图片信息、点击图片(如果有链接)

python

运行

复制代码
image = driver.find_element(By.CSS_SELECTOR, "img.logo")

# 获取图片URL
image_url = image.get_attribute("src")

# 获取替代文本
alt_text = image.get_attribute("alt")

# 点击图片(如果图片包裹在<a>标签中或有点击事件)
image.click()
<video>(视频)
  • 操作:播放、暂停(通过 JavaScript 执行)

python

运行

复制代码
video = driver.find_element(By.TAG_NAME, "video")

# 播放视频
driver.execute_script("arguments[0].play()", video)

# 暂停视频
driver.execute_script("arguments[0].pause()", video)

# 获取视频时长
duration = driver.execute_script("return arguments[0].duration", video)

5. 容器与链接类

<div>/<span>(容器)
  • 操作:获取文本、点击(如果有交互)

python

运行

复制代码
div_element = driver.find_element(By.CLASS_NAME, "info-box")

# 获取文本内容
text = div_element.text

# 点击容器(如果绑定了点击事件)
div_element.click()
<a>(超链接)
  • 操作:点击跳转、获取链接地址

python

运行

复制代码
link = driver.find_element(By.LINK_TEXT, "帮助中心")

# 点击链接
link.click()

# 获取链接地址
href = link.get_attribute("href")

6. 表单类

<form>(表单)
  • 操作:提交表单、重置表单

python

运行

复制代码
form = driver.find_element(By.ID, "login-form")

# 提交表单(等价于点击提交按钮)
form.submit()

# 重置表单(清空输入内容)
form.reset()

7. 文件上传控件

<input type="file">
  • 操作:上传本地文件(需传入文件绝对路径)

python

运行

复制代码
file_input = driver.find_element(By.ID, "avatar-upload")

# 上传文件(直接传入本地文件路径)
file_input.send_keys("/Users/test/avatar.jpg")

关键注意事项

  1. 元素交互前需确保可见 / 可点击 :使用显式等待(WebDriverWait)避免因元素未加载导致的错误。
  2. 处理动态元素 :若元素属性动态变化,优先使用稳定的定位方式(如 XPath 文本定位、层级定位)。
  3. 特殊控件处理:对于复杂控件(如日期选择器、自定义下拉框),可通过直接设置属性或执行 JavaScript 操作。

通过上述方法,可覆盖 Selenium 对绝大多数前端控件的基本操作,结合具体场景灵活组合即可实现复杂自动化流程。

相关推荐
yaoh.wang4 小时前
力扣(LeetCode) 13: 罗马数字转整数 - 解法思路
python·程序人生·算法·leetcode·面试·职场和发展·跳槽
AI浩4 小时前
【Labelme数据操作】LabelMe标注批量复制工具 - 完整教程
运维·服务器·前端
涔溪4 小时前
CSS 网格布局(Grid Layout)核心概念、基础语法、常用属性、实战示例和进阶技巧全面讲解
前端·css
2401_878454534 小时前
浏览器工作原理
前端·javascript
西陵5 小时前
为什么说 AI 赋能前端开发,已经不是选择题,而是必然趋势?
前端·架构·ai编程
小鸡吃米…5 小时前
Python PyQt6教程七-控件
数据库·python
1916zz6 小时前
Extreme programing 方利喆 _ 江贤晟
python
长安牧笛6 小时前
智能鞋柜—脚气终结者,内置温湿度传感器和紫外线灯,晚上回家,把鞋放进去,自动检测湿度,湿度超标就启动烘干+紫外线杀菌,第二天穿鞋干燥无异味。
python
weixin_457760006 小时前
PIL库将图片位深度是1、8、32统一转换为24的方法
python
by__csdn6 小时前
Vue3 setup()函数终极攻略:从入门到精通
开发语言·前端·javascript·vue.js·性能优化·typescript·ecmascript