Python-Selenium 操作 ActionChains类

本文介绍了如何在Windows10环境下使用Python3.7和Selenium3.141.0版本处理需要模拟鼠标操作的网页自动化任务,重点讲解了ActionChains类及其方法,如单击、双击、鼠标右键和拖拽等。
部署运行你感兴趣的模型镜像

当前环境:

Windows 10 + Python 3.7 + selenium==3.141.0 + urllib3==1.26.2 + Chromium 65.0.3312.0 (32 位)

用selenium做自动化,有时候会遇到需要模拟鼠标操作才能进行的情况,比如单击、双击、点击鼠标右键、拖拽等等。而selenium给我们提供了一个类来处理这类事件——ActionChains。

引入库:

from selenium.webdriver.common.action_chains import ActionChains
单击的例子:

# -*- coding: utf-8 -*-

import time
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains


if __name__ == '__main__':
    import os
    os.system('chcp 65001')
    os.system('taskkill /F /IM chromedriver.exe')
    # Chrome 路径
    CHROME_PATH = r'C:\Program Files (x86)\65.0.3312.0\chrome-win32\chrome.exe'
    # ChromeDriver 路径
    CHROMEDRIVER_PATH = r'C:\Program Files (x86)\65.0.3312.0\chromedriver_win32\chromedriver.exe'

    options = webdriver.ChromeOptions()
    # 取消 Chrome 正受到自动测试软件的控制
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    # 取消 请停用以开发者模式运行的扩展程序
    options.add_experimental_option("useAutomationExtension", False)
    # 手动指定使用的浏览器位置
    options.binary_location = CHROME_PATH
    driver = webdriver.Chrome(executable_path=CHROMEDRIVER_PATH, options=options)

    url = 'https://www.baidu.com'
    driver.get(url)
    print(driver.title)

    # 百度一下
    element = driver.find_element_by_id('su')

    # 方式一
    # aciton = ActionChains(driver)
    # aciton.click(element).perform()

    # 方式二
    ActionChains(driver).move_to_element(element).click().perform()

    # 退出浏览器
    driver.quit()

'''
ActionChains方法列表

click(on_element=None)                          # 单击鼠标左键
click_and_hold(on_element=None)                 # 点击鼠标左键,不松开
context_click(on_element=None)                  # 点击鼠标右键
double_click(on_element=None)                   # 双击鼠标左键
drag_and_drop(source, target)                   # 拖拽到某个元素然后松开
drag_and_drop_by_offset(source, xoffset, yoffset)   # 拖拽到某个坐标然后松开
key_down(value, element=None)                   # 按下某个键盘上的键
key_up(value, element=None)                     # 松开某个键
move_by_offset(xoffset, yoffset)                # 鼠标从当前位置移动到某个坐标
move_to_element(to_element)                     # 鼠标移动到某个元素
move_to_element_with_offset(to_element, xoffset, yoffset)   # 移动到距某个元素(左上角坐标)多少距离的位置
perform()                                       # 执行链中的所有动作
release(on_element=None)                        # 在某个元素位置松开鼠标左键
send_keys(*keys_to_send)                        # 发送某个键到当前焦点的元素
send_keys_to_element(element, *keys_to_send)    # 发送某个键到指定元素
'''
'''
实现代码:
Python37-32\Lib\site-packages\selenium\webdriver\common\action_chains.py
'''
'''
参考:
https://www.cnblogs.com/ziyewu/p/14440975.html
https://blog.youkuaiyun.com/myh919/article/details/134217867
'''

您可能感兴趣的与本文相关的镜像

Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

### 使用 PythonSeleniumActionChains 进行复杂操作 #### 鼠标拖放 通过 `drag_and_drop` 方法可以实现鼠标拖动某个元素并释放到另一个位置的操作。以下是具体代码示例: ```python from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains driver = webdriver.Chrome() driver.get('https://example.com') source_element = driver.find_element('id', 'draggable-element') target_element = driver.find_element('id', 'droppable-area') actions = ActionChains(driver) actions.drag_and_drop(source_element, target_element).perform() # 执行拖放动作[^1] ``` 上述代码中,`drag_and_drop` 将源元素拖放到目标区域。 --- #### 鼠标悬停 当需要模拟鼠标悬停在一个特定的 HTML 元素上时,可使用 `move_to_element` 方法。以下是一个具体的例子: ```python menu_item = driver.find_element('css selector', '.dropdown-menu-item') actions = ActionChains(driver) actions.move_to_element(menu_item).perform() # 模拟鼠标悬停在菜单项上[^3] ``` 此代码片段展示了如何让光标停留在下拉菜单中的某一项上,从而触发隐藏子菜单显示的行为。 --- #### 右键单击 (Context Click) 为了模拟用户的右键点击行为,可以利用 `context_click` 方法来完成这一功能需求: ```python right_click_target = driver.find_element('xpath', '//div[@class="right-click-target"]') actions = ActionChains(driver) actions.context_click(right_click_target).perform() # 发起右键点击事件[^2] ``` 这段脚本会定位到指定的目标节点,并对其执行一次标准的右键点击操作--- #### 键盘组合输入 除了基本的鼠标控制外,还可以借助于 `send_keys` 来发送键盘指令或者快捷键命令给当前焦点所在的控件。比如复制选定文字可以用 Ctrl+C 表达如下所示: ```python element_to_copy = driver.find_element('name', 'input-field-name') actions.key_down(Keys.CONTROL).send_keys('a').key_up(Keys.CONTROL).perform() # Select all text inside the input field. actions.key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform() # Copy selected text to clipboard.[^4] ``` 这里演示的是全选 (`Ctrl+A`) 加拷贝 (`Ctrl+C`) 功能的应用场景之一。 --- #### 复杂多步序列化任务处理 如果存在一系列连续性的交互步骤,则可以通过创建单独的动作实例逐一加入队列后再统一提交的方式来进行管理: ```python login_button = driver.find_element('id', 'login-btn') password_field = driver.find_element('id', 'pwd-input') actions.reset_actions() # 清除之前的任何未完成状态 actions.click(login_button)\ .pause(2)\ .send_keys(password_field, "SecurePassword!")\ .double_click(password_field).perform() # 登录按钮点击 -> 延迟两秒 -> 输入密码 -> 密码框双击激活[^4] ``` 以上案例包含了从登录界面开始的一整套流程设计思路。 --- ### 性能优化建议 对于频繁使用的页面对象模型(POM),考虑封装常用的功能模块减少重复编码量;另外适当引入显式等待机制提高稳定性的同时也兼顾效率问题[^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值