前提:

一般人用selenium自动化时,会用到模拟鼠标操作的情况,像单击,双击,右击,左击啊等,这个时候我们就要用到ActionChains了。

内容:

1.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) ——发送某个键到指定元素

2.ActionChains的用法

了解了以上的方法,我们来将一下它的用法,它有两种写法:

第一个是链式写法,顾名思义连在一起写:

例子:

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains driver = webdriver.Chrome()
driver.get("https://www.baidu.cn") # 定位到要悬停的元素
above = driver.find_element_by_link_text("设置")
# 对定位到的元素执行鼠标悬停操作
ActionChains(driver).move_to_element(above).perform()

第二个是分布式写发,顾名思义就是分开写:

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains driver = webdriver.Chrome()
driver.get("https://www.baidu.cn") # 定位到要悬停的元素
above = driver.find_element_by_link_text("设置")
# 对定位到的元素执行鼠标悬停操作
action=ActionChains(driver)
action.move_to_element(above)
action.perform()
  • from selenium.webdriver import ActionChains

导入提供鼠标操作的 ActionChains 类。

  • ActionChains(driver)

调用 ActionChains()类, 将浏览器驱动 driver 作为参数传入。

  • move_to_element(above)

context_click()方法用于模拟鼠标右键操作, 在调用时需要指定元素定位。

  • perform()

执行所有 ActionChains 中存储的行为, 可以理解成是对整个操作的提交动作。

最新文章

  1. mysql练习题-查询同时参加计算机和英语考试的学生的信息-遁地龙卷风
  2. ICMP的应用--Traceroute
  3. IntelliJ IDEA 的 Java 热部署插件 JRebel 安装及使用
  4. GPU的革命
  5. C# 用正则表达式替换字符串中所有特殊字符
  6. 用jquery向网页添加背景图片 拉伸 模糊 遮罩层 代码
  7. Delphi 的接口机制——接口操作的编译器实现过程(1)
  8. poj3308 Paratroopers --- 最小点权覆盖->最小割
  9. Caused by: org.springframework.beans.NotWritablePropertyException
  10. 你知道现在有一种新的OCR技术叫“移动端车牌识别”吗?
  11. MySQL中的数据类型及创建
  12. poj3928 la4329 pingpong
  13. PAT 1002. A+B for Polynomials
  14. numpy数组及处理:效率对比
  15. Python中的注释和解注释
  16. [BZOJ3038]遥远的国度
  17. Fiddler抓包10-会话框添加查看get与post请求类型
  18. [Android] 设置AlertDialog打开后不消失
  19. Python取得系统进程列表
  20. @Primary 注解引出的问题

热门文章

  1. ASP.NET MVC Liu_Cabbage 个人博客
  2. python----四种内置数据结构(dict、list、tuple、set)
  3. 原生JS实现简单富文本编辑器2
  4. 2019HDU多校第六场 6641 TDL——乱搞&&思维题
  5. Ubuntu: error: snap “phpstorm” has “install-snap” change in progress
  6. IDEA更改Maven项目的webapp的版本号
  7. 详解Kafka: 大数据开发最火的核心技术
  8. MySQL 8.0.15 配置 MGR单主多从
  9. java文件实现文件的上传和下载
  10. Java进阶知识22 Spring execution 切入点表达式