selenium+python自动化94-行为事件(ActionChains)源码详解
ActionChains简介
actionchains是selenium里面专门处理鼠标相关的操作如:鼠标移动,鼠标按钮操作,按键和上下文菜单(鼠标右键)交互。
这对于做更复杂的动作非常有用,比如悬停和拖放。
actionchains也可以和快捷键结合起来使用,如ctrl,shif,alt结合鼠标一起使用
当你使用actionchains对象方法,行为事件是存储在actionchains对象队列。当你使用perform(),事件按顺序执行。
- 方法一:可以写一长串
menu = driver.find_element_by_css_selector(".nav")
hidden_submenu = driver.find_element_by_css_selector(".nav #submenu1")
ActionChains(driver).move_to_element(menu).click(hidden_submenu).perform()
- 方法二:可以分几步写
menu = driver.find_element_by_css_selector(".nav")
hidden_submenu = driver.find_element_by_css_selector(".nav #submenu1")
actions = ActionChains(driver)
actions.move_to_element(menu)
actions.click(hidden_submenu)
actions.perform()
无论哪种方式,操作都是按照调用的顺序执行挨个执行!
方法介绍
1.以下提到的Keys类,是selenium里面的键盘事件类,导入方法:
from selenium.webdriver.common.keys import Keys
2.鼠标事件使用导入方法:
from selenium.webdriver.common.action_chains import ActionChains
class ActionChains(object):
def __init__(self, driver):
self._driver = driver
self._actions = []
def perform(self):
# 执行行为事件
def click(self, on_element=None):
点击:
- 如果参数不写,那么点击的是当前鼠标位置
- 如果参数写定位到的元素对象element,那就是点这个元素
def click_and_hold(self, on_element=None):
鼠标左键按住某个元素
- 如果参数不写,那么点的是当前鼠标位置
- 如果参数写定位到的元素对象element,那就是点这个元素
def context_click(self, on_element=None):
鼠标右键点击
- 如果参数不写,那么点的是当前鼠标位置
- 如果参数写定位到的元素对象element,那就是点这个元素
def double_click(self, on_element=None):
双击鼠标
- 如果参数不写,那么点的是当前鼠标位置
- 如果参数写定位到的元素对象element,那就是点这个元素
def drag_and_drop(self, source, target):
按住源元素上的鼠标左键,然后移动到目标元素并释放鼠标按钮
- source: 按住鼠标的元素位置
- target: 松开鼠标的元素位置
def drag_and_drop_by_offset(self, source, xoffset, yoffset):
按住源元素上的鼠标左键,然后移动到目标偏移量并释放鼠标按钮。
- source: 按住鼠标的元素位置
- xoffset: X 轴的偏移量
- yoffset: Y 轴的偏移量
def key_down(self, value, element=None):
只发送一个按键,而不释放它。只应用于修饰键(控制、alt和shift)。
- value: 要发送的修饰符键。值在“Keys”类中定义。
- element: 定位的元素
如果element参数不写就是当前鼠标的位置
举个例子,按住 ctrl+c::
ActionChains(driver).key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()
def key_up(self, value, element=None):
# 释放按键,配合上面的一起使用
def move_by_offset(self, xoffset, yoffset):
将鼠标移动到当前鼠标位置的偏移量
- xoffset: X轴 作为一个正整数或负整数移动到x偏移量
- yoffset: Y轴 偏移,作为正整数或负整数。
def move_to_element(self, to_element):
鼠标悬停
- to_element: 定位需要悬停的元素
def move_to_element_with_offset(self, to_element, xoffset, yoffset):
通过指定元素的偏移量移动鼠标。偏移量与元素的左上角相对
- to_element: 定位需要悬停的元素
- xoffset: X 轴偏移量
- yoffset: Y 轴偏移量
def release(self, on_element=None):
释放一个元素上的鼠标按钮。
- 如果参数不写,那么是当前鼠标位置
- 如果参数写定位到的元素对象element,那就是这个元素.
def send_keys(self, *keys_to_send):
发送到当前焦点元素
要发送的按键。修饰符键常数可以在“Keys”类。
def send_keys_to_element(self, element, *keys_to_send):
发送到定位到的元素上
- element: 定位的元素
- keys_to_send: 要发送的按键。修饰符键常数可以在“Keys”类。
举个案例
1.实现Ctrl +F5 的组合键功能
# coding:utf-8
# 作者:上海-悠悠
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
import time
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
time.sleep(3)
# 实现Ctrl+F5刷新
ActionChains(driver).key_down(Keys.CONTROL).send_keys(Keys.F5).key_up(Keys.CONTROL).perform()
源码可以在以下目录查看:Lib\site-packages\selenium\webdriver\common\action_chains.py
selenium+python自动化94-行为事件(ActionChains)源码详解的更多相关文章
- 行为事件(ActionChains)源码详解
ActionChains简介 actionchains是selenium里面专门处理鼠标相关的操作如:鼠标移动,鼠标按钮操作,按键和上下文菜单(鼠标右键)交互. 这对于做更复杂的动作非常有用,比如悬停 ...
- saltstack源码详解一
目录 初识源码流程 入口 1.grains.items 2.pillar.items 2/3: 是否可以用python脚本实现 总结pillar源码分析: @(python之路)[saltstack源 ...
- udhcp源码详解(五) 之DHCP包--options字段
中间有很长一段时间没有更新udhcp源码详解的博客,主要是源码里的函数太多,不知道要不要一个一个讲下去,要知道讲DHCP的实现理论的话一篇博文也就可以大致的讲完,但实现的源码却要关心很多的问题,比如说 ...
- Activiti架构分析及源码详解
目录 Activiti架构分析及源码详解 引言 一.Activiti设计解析-架构&领域模型 1.1 架构 1.2 领域模型 二.Activiti设计解析-PVM执行树 2.1 核心理念 2. ...
- 源码详解系列(七) ------ 全面讲解logback的使用和源码
什么是logback logback 用于日志记录,可以将日志输出到控制台.文件.数据库和邮件等,相比其它所有的日志系统,logback 更快并且更小,包含了许多独特并且有用的特性. logback ...
- [转]【视觉 SLAM-2】 视觉SLAM- ORB 源码详解 2
转载地址:https://blog.csdn.net/kyjl888/article/details/72942209 1 ORB-SLAM2源码详解 by 吴博 2 https://github.c ...
- vue 源码详解(一):原型对象和全局 `API`的设计
vue 源码详解(一):原型对象和全局 API的设计 1. 从 new Vue() 开始 我们在实际的项目中使用 Vue 的时候 , 一般都是在 main.js 中通过 new Vue({el : ' ...
- vue 源码详解(二): 组件生命周期初始化、事件系统初始化
vue 源码详解(二): 组件生命周期初始化.事件系统初始化 上一篇文章 生成 Vue 实例前的准备工作 讲解了实例化前的准备工作, 接下来我们继续看, 我们调用 new Vue() 的时候, 其内部 ...
- RocketMQ源码详解 | Producer篇 · 其二:消息组成、发送链路
概述 在上一节 RocketMQ源码详解 | Producer篇 · 其一:Start,然后 Send 一条消息 中,我们了解了 Producer 在发送消息的流程.这次我们再来具体下看消息的构成与其 ...
随机推荐
- ElasticSearch(八):springboot集成ElasticSearch集群并使用
1. 集群的搭建 见:ElasticSearch(七) 2. springboot配置集群 2.1 创建springboot项目,使用idea创建,不过多介绍(创建项目时候建议不要勾选elastics ...
- HDU 2072 单词数 详细解答
题目 单词数 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- HDU 2009
求数列的和 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...
- 【vue】vue-cli 脚手架项目简介(一) - package.json
vue-cli是用来生成 vue项目的命令行工具,它的使用方法是这样的: vue init <template-name> <project-name>第二个参数 templa ...
- MySQL--常见ALTER TABLE 操作
##================================## ## 修改表的存储引擎 ## SHOW TABLE STATUS LIKE 'TB_001' \G; ALTER TABLE ...
- 设置zedgraph鼠标拖拽和局部放大属性(转帖)
说一下几个属性的意义和具体应用: (1)鼠标拖拽显示区域 PanModifierKeys ->> Gets or sets a value that determines which mo ...
- opencv中的滤波
以前的时候,为了过滤图像中的一些噪点,学过一些简单的滤波,比如中值滤波,均值滤波,也是自己实现的. 在opencv中有现成的函数可以调用,实现滤波的操作. 函数的原型如下: CVAPI(void) c ...
- 【linux】crontab命令
一.crond简介 crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动cro ...
- 【数据库】mysql的安装
打开下载的mysql安装文件mysql-5.0.27-win32.zip,双击解压缩,运行“setup.exe”,出现如下界面 mysql安装向导启动,按“Next”继续 选择安装类型,有“Typic ...
- 电路交换vs分组交换
电路交换 交换:动态分配传输线路资源. 须经过:建立连接 -> 通话 -> 释放连接. 特点:传输效率低(大部分时间空闲). 分组交换 位于网络边缘的主机&位于网络核心的路由器都是 ...