Selenium 鼠标和键盘操作(建议收藏)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

截止目前, 星球 内专栏累计输出 90w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 3100+ 小伙伴加入学习 ,欢迎点击围观

在自动化测试与网页交互的场景中,Selenium 是开发者和测试工程师最常用的工具之一。无论是模拟用户点击按钮、拖拽元素,还是输入文本、使用快捷键,Selenium 的鼠标和键盘操作功能都能提供强大的支持。对于编程初学者而言,这些操作可能看似复杂,但通过循序渐进的学习,可以快速掌握其核心逻辑。本文将从基础概念、代码实现到实战案例,系统讲解如何通过 Selenium 精准控制鼠标和键盘,帮助读者在实际项目中高效应用这些技能。


环境准备

在开始之前,请确保已安装以下工具:

  • Python 3+ 或其他支持 Selenium 的语言环境(本文以 Python 为例)
  • Selenium 库:通过 pip install selenium 安装
  • 浏览器驱动:如 ChromeDriver(需与浏览器版本匹配)
  • 任意代码编辑器(如 VS Code、PyCharm)

示例代码框架

from selenium import webdriver  
from selenium.webdriver.common.keys import Keys  
from selenium.webdriver.common.action_chains import ActionChains  

driver = webdriver.Chrome()  
driver.get("https://example.com")  
driver.quit()  

鼠标操作:模拟真实用户行为

1. ActionChains 的核心作用

Selenium 的 ActionChains 类是实现复杂鼠标操作的“导演”,它通过编排一系列动作(如移动、点击、拖拽)来模拟用户行为。可以将其想象为一个“动作队列”,开发者将每个操作步骤依次添加到队列中,最后通过 perform() 方法执行所有动作。

示例:鼠标悬停

element = driver.find_element("xpath", "//div[@id='menu']")  

ActionChains(driver).move_to_element(element).perform()  

比喻:这就像把鼠标光标“瞄准”某个元素,让隐藏的子菜单自动展开。


2. 常见鼠标操作方法

下表总结了 ActionChains 中常用的鼠标方法及其功能:

方法名功能描述
move_to_element()将鼠标移动到指定元素中心位置
click()模拟左键单击
double_click()双击操作
context_click()右键单击
drag_and_drop()将一个元素拖拽到另一个元素

案例:点击按钮并拖拽文件

button = driver.find_element("xpath", "//button[@id='submit']")  
ActionChains(driver).click(button).perform()  

source = driver.find_element("id", "file-source")  
target = driver.find_element("id", "drop-zone")  
ActionChains(driver).drag_and_drop(source, target).perform()  

键盘操作:输入与快捷键

1. Keys 类的灵活使用

Selenium 的 Keys 类允许直接模拟键盘输入,包括特殊字符(如回车、删除键)和组合键(如 Ctrl+C)。通过 send_keys() 方法,开发者可以精准控制输入内容。

示例:输入文本并提交

search_box = driver.find_element("name", "q")  
search_box.send_keys("Selenium 鼠标和键盘操作")  
search_box.send_keys(Keys.ENTER)  # 按下回车键  

2. 复合键的实现技巧

组合键(如 Ctrl+A 全选文本)需要通过 Keys.chord() 方法模拟按键的同步按下与释放。

案例:复制文本到剪贴板

text_field = driver.find_element("id", "input-text")  
text_field.send_keys(Keys.chord(Keys.CONTROL, "a"))  
text_field.send_keys(Keys.chord(Keys.CONTROL, "c"))  

实战案例:自动化电商网站操作

案例背景

假设需自动化完成以下任务:

  1. 访问某电商平台,搜索商品
  2. 将商品加入购物车
  3. 模拟用户填写优惠码并结算

完整代码实现

from selenium.webdriver.support.ui import WebDriverWait  
from selenium.webdriver.support import expected_conditions as EC  
from selenium.webdriver.common.by import By  

driver.get("https://ecommerce.example.com")  

search = driver.find_element(By.NAME, "search")  
search.send_keys("Wireless Headphones" + Keys.RETURN)  

WebDriverWait(driver, 10).until(  
    EC.presence_of_element_located((By.CLASS_NAME, "product-item"))  
)  

add_to_cart = driver.find_element(By.CSS_SELECTOR, ".product-item button")  
ActionChains(driver).move_to_element(add_to_cart).click().perform()  

driver.get("https://ecommerce.example.com/cart")  
coupon_field = driver.find_element(By.ID, "coupon-code")  
coupon_field.send_keys("SAVE20")  
apply_coupon = driver.find_element(By.ID, "apply-coupon")  
apply_coupon.click()  

checkout_button = WebDriverWait(driver, 5).until(  
    EC.element_to_be_clickable((By.XPATH, "//button[text()='Checkout']"))  
)  
checkout_button.click()  

driver.quit()  

常见问题与解决方案

1. 元素定位失败

现象:操作元素时出现 NoSuchElementException
解决

  • 检查元素的定位方式(XPath、CSS Selector 等)是否准确。
  • 使用显式等待(WebDriverWait)确保元素加载完成。

2. 操作速度过快

现象:代码执行速度超过页面响应时间,导致操作失败。
解决

  • 在关键步骤添加 time.sleep(2) 短暂等待。
  • 调整 ActionChains 的速度参数(如 perform() 前插入延迟)。

3. 拖拽操作未生效

现象drag_and_drop() 无法移动元素。
解决

  • 确认目标元素支持拖拽功能(如 draggable="true")。
  • 尝试使用 drag_and_drop_by_offset() 指定偏移量。

结论

通过本文的讲解,读者应能掌握 Selenium 鼠标和键盘操作的核心方法,并在实际项目中灵活运用。无论是电商网站的自动化测试、表单填充,还是复杂交互场景的模拟,Selenium 都提供了强大的工具支持。建议读者通过以下步骤巩固学习:

  1. 在本地环境中复现本文的代码案例;
  2. 尝试设计一个自动化任务(如填写注册表单);
  3. 探索 Selenium 的其他高级功能(如窗口切换、浏览器配置)。

自动化测试与交互的边界正在不断扩展,而 Selenium 的鼠标和键盘操作正是打开这一领域的钥匙。希望本文能为你的技术成长提供有力支持!

最新发布