Selenium元素操作

Selenium 元素操作全攻略(2025 最新版)

定位是基础,操作是灵魂
掌握 输入、点击、获取、上传、拖拽、JS 执行 等 20+ 种操作,让浏览器听你指挥!


一、核心操作分类

分类操作常用方法
输入类输入、清除、回车send_keys(), clear()
点击类点击、双击、右键click(), double_click()
获取类文本、属性、状态text, get_attribute()
上传类文件上传send_keys(路径)
鼠标类悬停、拖拽ActionChains
键盘类组合键Keys.CONTROL + 'a'
JS 类执行脚本execute_script()

二、基础操作(必会)

1. 输入文本 & 清除

from selenium.webdriver.common.by import By

# 输入
element = driver.find_element(By.ID, "username")
element.send_keys("admin")

# 清除
element.clear()
element.send_keys("new_user")

2. 点击按钮

driver.find_element(By.ID, "login").click()

3. 获取文本

text = driver.find_element(By.CSS_SELECTOR, "h1").text
print(text)  # 输出:欢迎登录

4. 获取属性

href = driver.find_element(By.LINK_TEXT, "百度").get_attribute("href")
print(href)  # https://www.baidu.com

5. 判断状态

btn = driver.find_element(By.ID, "submit")
print(btn.is_displayed())  # 是否可见
print(btn.is_enabled())    # 是否可点击
print(btn.is_selected())   # 复选框是否选中

三、高级输入操作(键盘)

from selenium.webdriver.common.keys import Keys

input_box = driver.find_element(By.ID, "search")

# 组合键:全选 + 复制 + 粘贴
input_box.send_keys(Keys.CONTROL, "a")  # 全选
input_box.send_keys(Keys.CONTROL, "c")  # 复制
input_box.send_keys(Keys.CONTROL, "v")  # 粘贴

# 特殊键
input_box.send_keys(Keys.ENTER)
input_box.send_keys(Keys.TAB)
input_box.send_keys(Keys.ESCAPE)
input_box.send_keys(Keys.BACKSPACE)

四、鼠标操作(ActionChains)

from selenium.webdriver.common.action_chains import ActionChains

actions = ActionChains(driver)
element = driver.find_element(By.ID, "menu")

# 悬停
actions.move_to_element(element).perform()

# 双击
actions.double_click(element).perform()

# 右键
actions.context_click(element).perform()

# 拖拽
source = driver.find_element(By.ID, "drag")
target = driver.find_element(By.ID, "drop")
actions.drag_and_drop(source, target).perform()

# 链式操作(推荐)
actions.move_to_element(menu) \
       .click(submenu) \
       .pause(1) \
       .send_keys(Keys.ENTER) \
       .perform()

五、文件上传

最简单:直接 send_keys(绝对路径)

file_input = driver.find_element(By.ID, "upload")
file_input.send_keys("/Users/xxx/Desktop/report.pdf")  # 绝对路径!

复杂场景:使用 AutoIt / pyautogui(不推荐)


六、下拉框操作(Select)

from selenium.webdriver.support.ui import Select

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

# 按可见文本
select.select_by_visible_text("北京")

# 按 value
select.select_by_value("shanghai")

# 按索引
select.select_by_index(2)

# 获取所有选项
options = select.options
for opt in options:
    print(opt.text)

# 多选
select.deselect_all()

七、执行 JavaScript(终极操作)

# 滚动到底部
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

# 滚动到元素
element = driver.find_element(By.ID, "footer")
driver.execute_script("arguments[0].scrollIntoView();", element)

# 修改样式
driver.execute_script("arguments[0].style.border='3px solid red';", element)

# 获取隐藏文本
text = driver.execute_script("return arguments[0].innerText;", element)

# 点击(绕过 JS 拦截)
driver.execute_script("arguments[0].click();", element)

八、截图操作

# 整个页面
driver.save_screenshot("full_page.png")

# 单个元素
element = driver.find_element(By.ID, "logo")
element.screenshot("logo.png")

# 获取 base64(用于报告)
import base64
png_data = element.screenshot_as_png
with open("logo.png", "wb") as f:
    f.write(png_data)

九、窗口 & 标签页操作

# 打开新标签页
driver.execute_script("window.open('https://httpbin.org');")

# 切换窗口
handles = driver.window_handles
driver.switch_to.window(handles[1])  # 第二个标签

# 关闭当前,切回主窗口
driver.close()
driver.switch_to.window(handles[0])

十、完整实战:电商加入购物车

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait, Select
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service

driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
wait = WebDriverWait(driver, 10)
actions = ActionChains(driver)

try:
    driver.get("https://httpbin.org/forms/post")

    # 填写客户信息
    wait.until(EC.presence_of_element_located((By.NAME, "custname"))).send_keys("张三")
    driver.find_element(By.NAME, "custtel").send_keys("13800138000")
    driver.find_element(By.NAME, "custemail").send_keys("zs@example.com")

    # 选择尺寸
    driver.find_element(By.XPATH, "//input[@value='small']").click()

    # 选择配料(多选)
    driver.find_element(By.XPATH, "//input[@value='cheese']").click()
    driver.find_element(By.XPATH, "//input[@value='bacon']").click()

    # 备注
    driver.find_element(By.NAME, "comments").send_keys("不要辣,谢谢!")

    # 提交
    submit_btn = driver.find_element(By.CSS_SELECTOR, "input[type='submit']")
    actions.move_to_element(submit_btn).click().perform()

    print("订单提交成功!")
    driver.save_screenshot("order_success.png")

finally:
    driver.quit()

十一、操作失败?排查清单

问题原因解决方案
ElementClickInterceptedException被遮挡execute_script("arguments[0].click();", elem)
ElementNotInteractable不可交互等待 element_to_be_clickable
StaleElementReferenceException元素刷新重新定位
输入无效只读用 JS 设置:execute_script("arguments[0].value='xxx';", elem)

十二、最佳实践总结

原则推荐
等待永远用 WebDriverWait
点击优先 click(),失败用 JS
输入clear() + send_keys()
截图失败时自动截图
日志每步 print()logging
封装写成函数或 Page Object
def safe_click(driver, locator):
    elem = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable(locator)
    )
    try:
        elem.click()
    except:
        driver.execute_script("arguments[0].click();", elem)

十三、推荐工具

工具用途
SelectorsHub快速生成 XPath/CSS
ChroPath验证选择器
POM Builder自动生成 Page Object

十四、一句话总结

元素操作 = 等待 + 定位 + 稳定执行(JS 兜底)


下一步
想看 20 个真实网站操作案例(登录、翻页、下拉加载、验证码处理)?
回复 examples 我立刻发你一个 完整项目模板


当前最佳组合

pip install selenium webdriver-manager
WebDriverWait + ActionChains + execute_script = 无敌!

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注