selenium中ActionChains方法详细讲解

news2024/11/24 13:35:16

前言

   本文将介绍Selenium中的ActionChains类及其使用方法,帮助您模拟用户在网页上的鼠标和键盘操作。了解ActionChains的常用方法和示例代码,可轻松实现移动鼠标、点击元素、拖拽元素等操作。通过本文的学习,您能更好地应用ActionChains解决自动化测试或网页爬取中的问题。

演示html文件

<!DOCTYPE html>
<html>

<head>
  <title>操作HTML示例</title>
  <script>
    function clickButton() {
      var button = document.getElementById("clickButton");
      button.click();
    }

    function doubleClickButton() {
      var button = document.getElementById("doubleClickButton");
      var event = new MouseEvent('dblclick', { bubbles: true, cancelable: true });
      button.dispatchEvent(event);
    }

    function initSlider() {
      var slider_1 = document.getElementById("slider_1");
      var isDragging = false;
      var offset = { x: 0, y: 0 };

      slider_1.addEventListener("mousedown", startDrag);
      slider_1.addEventListener("mouseup", stopDrag);
      slider_1.addEventListener("mousemove", drag);
      slider_1.addEventListener("mouseleave", stopDrag);

      function startDrag(e) {
        isDragging = true;
        offset.x = e.clientX - slider_1.offsetLeft;
        offset.y = e.clientY - slider_1.offsetTop;
      }

      function stopDrag() {
        isDragging = false;
      }

      function drag(e) {
        if (isDragging) {
          var newX = e.clientX - offset.x;
          var newY = e.clientY - offset.y;

          slider_1.style.left = newX + "px";
          slider_1.style.top = newY + "px";
        }
      }
    }

	function handleKeyUp(event) {
      if (event.keyCode === 119) {
        // F8键的keycode为119
        alert("释放了F8键");
    }
  }
  </script>
</head>

<body>
  <h1>操作HTML示例</h1>

  <button id="clickButton" onclick="alert('单击按钮')">单击按钮</button>
  <button id="doubleClickButton" ondblclick="alert('双击按钮')">双击按钮</button>

  <div>
    <input id="slider" type="range" min="0" max="100" step="1" value="50" style="width: 200px;">
    <input id="slider_2" type="range" min="0" max="100" step="1" value="50"
      style="height: 200px; transform: rotate(270deg);">
  </div>

  <div id="box" style="width: 230px; height: 200px; background-color: lightblue; position: relative;">
    <div id="slider_1"
      style="width: 30px; height: 30px; background-color: red; position: absolute; top: 80px; left: 100px; cursor: move;">
    </div>
  </div>

  <script>
   window.addEventListener("load", initSlider);
   window.addEventListener("keyup", handleKeyUp);
  </script>
</body>

</html>

一、使用方法

1、方法说明

方法说明参数
move_to_element(element)将鼠标移动到指定元素上方element: 要移动到的目标元素
click()左键单击当前鼠标位置
click_and_hold()按住并且不释放鼠标左键
release()释放鼠标左键
context_click()右键单击当前鼠标位置
double_click()双击当前鼠标位置
drag_and_drop(source, target)将一个元素从源位置拖拽到目标位置source: 要拖动的源元素
target: 要拖动到的目标元素
drag_and_drop_by_offset(source, xoffset, yoffset)将一个元素从源位置按指定偏移量拖拽到目标位置source: 要拖动的源元素
xoffset: 横向偏移量
yoffset: 纵向偏移量
move_by_offset(xoffset, yoffset)将鼠标相对于当前位置按指定偏移量移动xoffset: 横向偏移量
yoffset: 纵向偏移量
key_down(value, element=None)模拟按下某个键盘按键,可选择指定元素value: 要按下的键盘按键值
element(可选): 要操作的元素
key_up(value, element=None)模拟释放某个键盘按键,可选择指定元素value: 要释放的键盘按键值
element(可选): 要操作的元素
pause(seconds)暂停执行一段时间seconds: 暂停的时间,单位为秒
perform()执行已定义的操作序列

2、左键单击当前鼠标位置

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


# 创建Chrome浏览器的WebDriver实例
driver = webdriver.Chrome()
# 最大化窗口
driver.maximize_window()
# 打开网页
driver.get("file:///C:/Users/admin/Desktop/Demo.html")

# 创建 actions 的 ActionChains 对象
actions = ActionChains(driver)

# 定位到需要点击的按钮
click = driver.find_element_by_css_selector('[id="clickButton"]')
# 将鼠标移动到按钮上
actions.move_to_element(click)
# 鼠标左键
actions.click()
# 执行操作(必须要有该方法,否则操作不会执行)
actions.perform()

# 简化代码
click = driver.find_element_by_css_selector('[id="clickButton"]')
ActionChains(driver).move_to_element(click).click().perform()

3、双击当前鼠标位置

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


# 创建Chrome浏览器的WebDriver实例
driver = webdriver.Chrome()
# 最大化窗口
driver.maximize_window()
# 打开网页
driver.get("file:///C:/Users/admin/Desktop/Demo.html")

# 创建 actions 的 ActionChains 对象
actions = ActionChains(driver)

# 定位到需要点击的按钮
click = driver.find_element_by_css_selector('[id="doubleClickButton"]')
# 将鼠标移动到按钮上
actions.move_to_element(click)
# 鼠标双击
actions.double_click()
# 执行操作(必须要有该方法,否则操作不会执行)
actions.perform()

4、鼠标拖拽元素移动

  • 场景一
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains


# 创建Chrome浏览器的WebDriver实例
driver = webdriver.Chrome()
# 最大化窗口
driver.maximize_window()
# 打开网页
driver.get("file:///C:/Users/admin/Desktop/Demo.html")

# 创建 actions 的 ActionChains 对象
actions = ActionChains(driver)

# 定位到需要拖拽的滑块元素
slider = driver.find_element_by_css_selector('[id="slider_1"]')

# 将鼠标移动到滑块上
actions.move_to_element(slider)

# 执行鼠标左键点击并按住不放
actions.click_and_hold()

# 设置每次移动的偏移量
offset = 7

# 模拟滑块的连续移动
for i in range(10):
    # 向右移动 offset 像素
    actions.move_by_offset(offset, 0)
    actions.pause(0.1)  # 添加暂停时间以控制移动速度

# 向左移动 offset 像素
for i in range(10):
    actions.move_by_offset(-offset, 0)
    actions.pause(0.1)

# 向下移动 offset 像素
for i in range(10):
    actions.move_by_offset(0, offset)
    actions.pause(0.1)

# 向上移动 offset 像素
for i in range(10):
    actions.move_by_offset(0, -offset)
    actions.pause(0.1)

# 释放鼠标左键
actions.release()

# 执行操作
actions.perform()
  • 场景二
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains


# 创建Chrome浏览器的WebDriver实例
driver = webdriver.Chrome()
# 最大化窗口
driver.maximize_window()
# 打开网页
driver.get("file:///C:/Users/admin/Desktop/Demo.html")

# 创建 actions 的 ActionChains 对象
actions = ActionChains(driver)

# 定位到需要拖拽的滑块元素
slider = driver.find_element_by_css_selector('[id="slider"]')
# 滑动到指定位置
actions.drag_and_drop_by_offset(slider, 80, 0)


# 定位到需要拖拽的滑块元素
slider_2 = driver.find_element_by_css_selector('[id="slider_2"]')
# 将鼠标移动到滑块上
actions.move_to_element(slider_2)
# 执行鼠标左键点击并按住不放
actions.click_and_hold()
# 滑动到指定位置
actions.move_by_offset(0, 50)
# 释放鼠标左键
actions.release()

# 执行操作
actions.perform()

在这里插入图片描述

5、模拟键盘按键

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

# 创建Chrome浏览器的WebDriver实例
driver = webdriver.Chrome()
# 最大化窗口
driver.maximize_window()
# 打开网页
driver.get("file:///C:/Users/admin/Desktop/Demo.html")

# 创建 actions 的 ActionChains 对象
actions = ActionChains(driver)

# 定位到需要拖拽的滑块元素
slider = driver.find_element_by_css_selector('[id="slider"]')

# 模拟按下右键,滑块移动. 键盘键码自行百度
actions.key_down(Keys.ARROW_RIGHT, slider)

# 模拟按下F8键
actions.key_down(Keys.F8)
# 模拟释放F8键
actions.key_up(Keys.F8)

# 执行操作
actions.perform()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1022813.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Oracle for Windows安装和配置——Oracle for Windows软件安装

2. Oracle for Windows安装和配置 2.1. Oracle for Windows软件安装 2.1.1. 准备Oracle软件 1&#xff09;下载或拷贝安装软件 下载地址:otn.oracle.com或my oracle support。下载文件列表。具体如图2.1.1-1所示。 图2.1.1-1 下载文件列表 --说明&#xff1a; 1&#xff0…

flink-connector-mysql-cdc

FlinkCDC是一个实现CDC(Change Data Capture)思想的数据同步工具。 借助于Flink CDC Connector &#xff0c;它监听数据库的二进制日志文件&#xff0c;来获取数据库变更的数据&#xff0c;以此实现数据同步。 1. 下载Flink 及 对应版本的 Flink CDC FlinkCDC 支持的 Connect…

升级:远程桌面软件玩游戏指南

你有没有遇到过这样的场景&#xff1a;你想玩一款特定的游戏&#xff0c;但却受到设备功能的限制&#xff1f;这就是游戏远程桌面的概念变得非常宝贵的地方。从本质上讲&#xff0c;它允许您远程利用高端游戏计算机的功能&#xff0c;使您能够在自己的设备上玩游戏。 可以考虑…

四、JAVA语言基础

JAVA语言基础 JAVA语言基础1.1.Java主类结构1.1.1.包声明1.1.2.声明成员变量和局部变量1.1.3.编写主方法1.1.4.导入API类库 —————————————————————————————————————————————————— JAVA语言基础 很多人认为在学习Java语言之…

uni-app 之 文字分两行显示超出用省略号表示

uni-app 之 文字分两行显示超出用省略号表示 vue 将一大串文字分两行显示超出用省略号表示 通过css设置文字强制不换行超出用省略号表示: {white-space: nowrap; 文本强制不换行&#xff1b;text-overflow:ellipsis; 文本溢出显示省略号&#xff1b;overflow:hidden; 溢出的部…

QTabWidget 类 (选项卡部件)

1、 QTabWidget 类直接继承自 QWidget。该类提供了一个选项卡栏(QTabBar)和一个相应的页 面区域&#xff0c;用于显示与每个选项卡相对应的页面。 与 QStackedLayout 布局原理相同&#xff0c;只有 当前页面(即可见页面)是可见的&#xff0c;所有其他页面都不可见&#xff0c;用…

数字藏品交易系统有哪些特点?

数字藏品交易系统具有以下特点&#xff1a; 去中心化&#xff1a;数字藏品交易系统通常采用去中心化的架构&#xff0c;不依赖于单一的中央机构或权威来管理交易。这意味着交易可以在全球范围内进行&#xff0c;无需中间人。 区块链技术&#xff1a;大多数数字藏品交易系统借助…

小区物业管理缴费报修活动报名商城小程序开源版开发

小区物业管理缴费报修活动报名商城小程序开源版开发 以下是小区物业管理缴费报修活动报名商城小程序开源版的功能列表&#xff1a; 用户注册和登录小区信息展示&#xff08;包括小区简介、周边设施等&#xff09;物业公告显示和发布功能小区物业费用查询和缴费功能基础设施报…

解决安装wsl时候报错的问题: WslRegisterDistribution failed with error: 0x800701bc

在Win10 或者Win 11上安装wsl的时候&#xff0c;可能会遇到如下的错误信息&#xff1a; Error: 0x800701bc WSL 2 ?????????????????? https://aka.ms/wsl2kernel Press any key to continue... 这个是由于系统内置的WSL内核过低导致的&#xff0c;可以到如…

node的服务端对接科大讯飞-火星ai解决方案

序&#xff1a; 官方给的node对接火星的demo其实只适用于node开发的web应用&#xff0c;但是对于纯node 作为服务端&#xff0c;也就是作为webapi来调用&#xff0c;你会发现&#xff0c;location.host直接是获取不到location的。这个时候&#xff0c;其实要单独起个wss的服务的…

C盘满了,应该清理哪些地方

有时候电脑用着用着C盘就满了&#xff0c;其实大多数原因是因为C:\Users\用户名\AppData下的文件夹下被你的程序软件不断地塞入了各种文件导致的。几乎你在电脑上安装的每个程序都会在AppData 文件夹中创建自己的文件夹&#xff0c;并将该程序的所有相关信息存储在那里。 为了…

类模板深度剖析

类模板可以定义任意多个不同的类型参数 类模板可以被特化 可以指定类模板的特定实现 部分类型参数必须显示指定 根据类型参数分开实现类模板 类模板的特化类型 部分特化 - 用特定规则约束类型参数 完全特化 - 完全显示指定类型参数 类模板特化注意事项 特化只是模板的分开…

官宣 | 2023第四届ISIG中国产业智能大会报名开启

由企智未来科技&#xff08;RPA中国、LowCode低码时代、AIGC开放社区&#xff09;主办的第四届「ISIG中国产业智能大会」将于12月初在上海召开&#xff0c;本届主题为“与科技共赢&#xff0c;与产业共进”。在此次大会中&#xff0c;我们将设立RPA超自动化、低代码/零代码、流…

docker-compose使用

docker-compose docker的项目编排 一、安装docker-compose Rocky Linux Rocky Linux安装Docker Compose的步骤如下&#xff1a; 安装Docker。您可以使用以下命令安装Docker&#xff1a; sudo dnf install docker-ce docker-ce-cli containerd.io安装Docker Compose。您可以…

渗透中 POC、EXP、Payload、Shellcode 的区别

渗透中 PoC、Exp、Payload、Shellcode 的区别 不同含义&#xff1a; POC Proof of Concept中文意思是“观点证明”。这个短语并非仅仅在漏洞报告中使用&#xff0c;甲方在项目招标过程中也常常要求乙方提供POC&#xff0c;即证明你的方案或者产品能达到声称的功能或性能&…

VMware ESXI vCenter 开启 SNMP 方法:

需要监控 ESXI 和 vSphere 系统的状态&#xff0c;开启默认的 SNMP 一、VMware ESXI 开启 SSH 登录到ESXI上执行命令如下&#xff1a; [rootESXI:~] esxcli system snmp set --enable true [rootESXI:~] esxcli system snmp set --communities public [rootESXI:~] esxcli …

IPO解读丨“停车场”以外的故事,智慧互通如何书写?

智能交通赛道或将迎来一家上市公司。 近日&#xff0c;智慧互通科技股份有限公司&#xff08;下称“智慧互通”&#xff09;在河北证监局进行上市辅导备案登记&#xff0c;辅导机构为中信证券。 这家成立于2015年的公司&#xff0c;致力于用AI赋能交通&#xff0c;打造城市级…

中国又一利器”遥遥领先″?纳米RAM市场增长趋势正式超越美国!

纳米RAM是一种前沿的存储技术&#xff0c;利用纳米级工艺技术制造而成&#xff0c;具有极高的存储密度和读写速度。相较于传统的RAM技术&#xff0c;纳米RAM具有更高的可靠性、更低的能耗以及更强的耐久性。这些优势使得纳米RAM成为未来高密度存储和高速计算领域极具潜力的技术…

ros2 安装UR机器人仿真包

1.ros2的版本如下 2.在码云上找到UR驱动包 GitHub很多时候都是无法打开的&#xff0c;但是码云可以复制这个GitHub上的包&#xff0c;别人已经复制好了。可以用连接如下&#xff1a; universal_robots_ros2_driver 3.查看该包的readme文件 这里面有介绍使用二进制安装&#…

RHEL8安装FreeIPA客户端

RHEL8安装FreeIPA客户端 1、在FreeIPA服务器上创建一个用户2、为ipa客户端机器添加DNS记录2.1 在ipa客户机器上配置hosts 3、在客户机上安装FreeIPA客户端4、配置FreeIPA 客户端5、测试FreeIPA客户端5.1 首次登录修改密码 1、在FreeIPA服务器上创建一个用户 参考&#xff1a;h…