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)源码详解的更多相关文章

  1. 行为事件(ActionChains)源码详解

    ActionChains简介 actionchains是selenium里面专门处理鼠标相关的操作如:鼠标移动,鼠标按钮操作,按键和上下文菜单(鼠标右键)交互. 这对于做更复杂的动作非常有用,比如悬停 ...

  2. saltstack源码详解一

    目录 初识源码流程 入口 1.grains.items 2.pillar.items 2/3: 是否可以用python脚本实现 总结pillar源码分析: @(python之路)[saltstack源 ...

  3. udhcp源码详解(五) 之DHCP包--options字段

    中间有很长一段时间没有更新udhcp源码详解的博客,主要是源码里的函数太多,不知道要不要一个一个讲下去,要知道讲DHCP的实现理论的话一篇博文也就可以大致的讲完,但实现的源码却要关心很多的问题,比如说 ...

  4. Activiti架构分析及源码详解

    目录 Activiti架构分析及源码详解 引言 一.Activiti设计解析-架构&领域模型 1.1 架构 1.2 领域模型 二.Activiti设计解析-PVM执行树 2.1 核心理念 2. ...

  5. 源码详解系列(七) ------ 全面讲解logback的使用和源码

    什么是logback logback 用于日志记录,可以将日志输出到控制台.文件.数据库和邮件等,相比其它所有的日志系统,logback 更快并且更小,包含了许多独特并且有用的特性. logback ...

  6. [转]【视觉 SLAM-2】 视觉SLAM- ORB 源码详解 2

    转载地址:https://blog.csdn.net/kyjl888/article/details/72942209 1 ORB-SLAM2源码详解 by 吴博 2 https://github.c ...

  7. vue 源码详解(一):原型对象和全局 `API`的设计

    vue 源码详解(一):原型对象和全局 API的设计 1. 从 new Vue() 开始 我们在实际的项目中使用 Vue 的时候 , 一般都是在 main.js 中通过 new Vue({el : ' ...

  8. vue 源码详解(二): 组件生命周期初始化、事件系统初始化

    vue 源码详解(二): 组件生命周期初始化.事件系统初始化 上一篇文章 生成 Vue 实例前的准备工作 讲解了实例化前的准备工作, 接下来我们继续看, 我们调用 new Vue() 的时候, 其内部 ...

  9. RocketMQ源码详解 | Producer篇 · 其二:消息组成、发送链路

    概述 在上一节 RocketMQ源码详解 | Producer篇 · 其一:Start,然后 Send 一条消息 中,我们了解了 Producer 在发送消息的流程.这次我们再来具体下看消息的构成与其 ...

随机推荐

  1. js中准确判断数据类型的方法

    一   通用的typeof 方法 typeof  ture    输出   Boolean typeof  123   输出     number ..... 但是   typeof 无法判断  nu ...

  2. 视觉惯性里程计Visual–Inertial Odometry(VIO)概述

    周围很多朋友开始做vio了,之前在知乎上也和胖爷讨论过这个问题,本文主要来自于知乎的讨论. 来自https://www.zhihu.com/question/53571648/answer/13772 ...

  3. 不用webservice wcf提供服务,用Rest更轻量

    从2005年开始就开始有基于服务的开发方式,到08年时候 微软和sun等公司都已经提供了很多基于服务的开发框架 . 微软 .net 平台的基于服务的框架主要有:.NET Remoting.webser ...

  4. MySQL--禁用账号和设置账号有效期

    ======================================================================= MySQL5.5/5.6版本 在MySQL 5.7 版本 ...

  5. jsp servlet 进行基于js的用户验证

    写这个只是完成使用js文件参数进行用户验证的处理的jsp 版,已经写过 asp.net php nodejs 以及纯js的,现在完善jsp的 使用的技术是比较简单的就是站点应用我们的js脚本,但是是带 ...

  6. 《Java程序猿面试笔试宝典》之Java变量命名有哪些规则

    在Java语言中,变量名.函数名.数组名统称为标识符,Java语言规定标识符仅仅能由字母(a~z.A~Z).数字(0~9).下划线(_)和$组成,而且标识符的第一个字符必须是字母.下划线或$.此外.标 ...

  7. nyoj 三个水杯

    三个水杯 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子.三个水杯之间相互倒水,并且水杯没有标识,只 ...

  8. 完成分析 FastAdmin 用户余额功能(后台篇)

    分析 FastAdmin 用户余额功能(后台篇) 分析 FastAdmin 用户余额功能(后台篇) 虽然 FastAdmin 主要针对后台的框架,但也在不断完善前台的功能,有一天小伙伴在社区里提了一个 ...

  9. hadoop之 reduce个数控制

    1.参数变更1.x 参数名                                                         2.x 参数名 mapred.tasktracker.red ...

  10. Excel的方向键失灵

    Excel的方向键操作不再是sheet范围内转动:而是变成了整个sheet页面在跳动. 不只是Excel,viso也是如此. 这是因为你的Scroll Lock键被按下了:所致箭头被解读为页面滚轮在滑 ...