深入解析Selenium动作链:精通点击、拖拽、切换等操作

news2024/11/15 22:23:23

背景:

一些交互动作都是针对某个节点执行的。比如,对于输入框,我们就调用它的输入文字和清空文字方法;对于按钮,就调用它的点击方法。其实,还有另外一些操作,它们没有特定的执行对象,比如鼠标拖曳、键盘按键等,这些动作用另一种方式来执行,那就是动作链。

基础函数知识:

创建浏览器实例和动作链对象:

driver = webdriver.Chrome()
actions = ActionChains(driver)

点击事件:

  • click() 点一下
  • context_click(): 执行右键点击操作。
  • double_click(): 执行双击操作。
  • click_and_hold(): 点击并按住不放。
  • release() 方法来模拟释放鼠标按钮
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Chrome()
driver.get('https://www.example.com')
element = driver.find_element_by_xpath("//xpath_of_element")
actions = ActionChains(driver)
actions.click_and_hold(element).perform()  # 按住元素
actions.release().perform()  # 松开元素

driver.quit()

前进和后退:

  • browser.back() 后退到上一个
  • browser.forward() 前进到下一个

移动事件:

  • 将鼠标相对于上一次位置按指定偏移量移动 move_by_offset(xoffset, yoffset)

  • 移动到某个元素上:actions.move_to_element(element)

  • 长按操作 :action.click_and_hold(div_tag)

  • 将鼠标移动到指定元素的偏移位置上:move_to_element_with_offset(to_element, xoffset, yoffset)

  • perform() 立刻执行链中的所有动作

  • pause() 暂停 几 秒

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

driver = webdriver.Chrome()
driver.get('https://www.example.com')
element = driver.find_element_by_xpath("//xpath_of_element")
actions = ActionChains(driver)
actions.move_to_element(element).pause(2).click().perform()  # 移动到元素,暂停 2 秒,然后点击

driver.quit()

拖拽事件:

  • drag_and_drop(source,target) 将一个元素拖拽到另一个元素的位置上
  • drag_and_drop_by_offset(source, xoffset, yoffset): 将源元素拖动到指定的偏移位置上。
  • drag_and_drop_by(source, target): 将源元素拖动到目标元素的中心位置上。
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains

driver = webdriver.Chrome()
driver.get('https://www.example.com')

source_element = driver.find_element_by_xpath("//xpath_of_source_element")
target_element = driver.find_element_by_xpath("//xpath_of_target_element")

actions = ActionChains(driver)
actions.drag_and_drop(source_element, target_element).perform()  # 拖动源元素到目标元素

driver.quit()

切换指定页面:

  • switch_to.frame()

  • 使用switch_to.frame方法可以将当前的操作焦点切换到指定的iframe中

  • 参数可以是 定位到的标签相应标签的id属性值


实战案例:

实战一:

如果定位的标签是存在于iframe表示的子页面中,需要向将浏览器切换到 iframe里面。

实现拖拽效果

在这里插入图片描述

在这里插入图片描述

from selenium.webdriver import ActionChains
from selenium import webdriver
from time import sleep

path = r'D:\Downloads\xx\chromedriver-win64\chromedriver.exe'
bro = webdriver.Chrome(executable_path=path)
bro.get('https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')
sleep(1)
# 处理:使用如下指定操作
bro.switch_to.frame('iframeResult')
div_tag = bro.find_element_by_id('draggable')
# 实例化一个动作链对象且将该对象绑定到指定的浏览器中
action = ActionChains(bro)
action.click_and_hold(div_tag)  # 对指定标签实现点击且长按操作
for i in range(5):
    action.move_by_offset(10, 10).perform()  # perform让动作链立即执行
    sleep(0.5)
sleep(3)
bro.quit()
实战二:

类似实现点选验证码

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Chrome()
driver.get('https://www.example.com')
element = driver.find_element_by_xpath("//xpath_of_element")
actions = ActionChains(driver)
actions.move_to_element_with_offset(element, xoffset, yoffset).perform()  # 将鼠标移动到指定元素的偏移位置上
实战三:

实现前进和后退网页:

#模拟浏览器的前进后退
from selenium import webdriver
import time

browser = webdriver.Chrome(r'./chromedriver')
browser.get('https://www.baidu.com')
browser.get('https://www.taobao.com')

browser.back()
time.sleep(2)
browser.forward()
time.sleep(2)

browser.close()

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

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

相关文章

大模型微调技术

全量微调 部分参数微调 Adaper-Tuning 降维的意义 计算和存储成本去除冗余和噪声—特定任务训练数据有限减少模型复杂度避免过拟合风险适应任务需求过拟合 是指模型在训练数据上表现得很好,但在新的未见过的数据上表现较差的现象模型过于复杂,训练数据量不足等因素引起的 LO…

ubuntu22.04中ros2 安装rosbridge

ros2 启动rosbridge: 要启动ROS2中的rosbridge,需要先安装ROS2的rosbridge_suite软件包。使用以下命令安装: 更新过可忽略 sudo apt-get update安装命令 sudo apt-get install ros--rosbridge-suite 注意: 将替换为正在使用的R…

超实用:通过文字就可以操纵这款AI表格,不需要你懂Excel函数

公众号「架构成长指南」,专注于生产实践、云原生、分布式系统、大数据技术分享。 工具介绍 今天给大家分享超实用的AI表格ChatExcel,这个工具是由北大团队在2022年3月开始开发的AI表格处理神器,上传你的表格后,只需要用文字描述你…

NX二次开发UF_CURVE_ask_int_curves 函数介绍

文章作者:里海 来源网站:https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_ask_int_curves Defined in: uf_curve.h int UF_CURVE_ask_int_curves(tag_t int_curve_object, int * num_curves, tag_t * * intersection_curves ) overview 概述 Ret…

基于厨师算法优化概率神经网络PNN的分类预测 - 附代码

基于厨师算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于厨师算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于厨师优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神经网络的光滑…

leetCode 226.翻转二叉树 递归 + 非递归 + 前中后序 + 层序遍历 【深度和广度优先遍历】

我的往期文章: leetCode 226.翻转二叉树-CSDN博客https://blog.csdn.net/weixin_41987016/article/details/134613347?spm1001.2014.3001.5501 (一)递归做法(深度) C代码:前序遍历 class Solution { pu…

电力感知边缘计算网关产品设计方案-网关软件设计方案

网关采用网络协议和软件技术在通信网络中针对工业协议、互联网通用协议进行分析和记录,提升工业控制系统环境的安全防护能力。A类和B类网关采用容器技术的软件架构,采用C/S架构软件客户端提供应用软件平台,为管理员提供功能丰富的图形管理控制界面。 因A类和B类网关在产品定…

Loadrunner安装大全

目录 一 、下载篇 二、安装篇 三、破解篇 四、Loadrunner支持哪些操作系统? 五、安装Loadrunner需要满足哪些系统要求? 六、安装Loadrunner时是否需要注意什么问题? 七、安装完成后如何验证Loadrunner是否正常工作? 八、如…

“升级图片质量:批量提高或缩小像素,赋予图片全新生命力!“

如果你想让你的图片更加清晰、更加美观,或者符合特定的像素要求,那么现在有一个好消息要告诉你!我们推出了一款全新的图片处理工具,可以帮助你批量提高或缩小图片像素,让你的图片焕发出新的生机! 第一步&a…

栈和队列OJ题目——C语言

目录 LeetCode 20、有效的括号 题目描述: 思路解析: 解题代码: 通过代码: LeetCode 225、用队列实现栈 题目描述: 思路解析: 解题代码: 通过代码: LeetCode 232、用栈…

基于微信小程序的员工宿舍报修系统

项目介绍 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时…

路由器DHCP分配IP地址规则

路由器DHCP分配IP地址的机制: 先设置一个IP地址池,假设是192.168.1.100-192.168.1.199一共100个。 来一个请求,看一下是不是以前请求过的地址,如果是,还是返回以前给过的IP,然后将到期时间(有些路由器默认…

8款优秀的MYSQL管理工具与应用程序推荐

文章目录 前言介绍InductionPinbaDB NinjaDB Tools ManagerDbeaverMyWebSQLNavicat后言 前言 hello world欢迎来到前端的新世界 😜当前文章系列专栏:Mysql 🐱‍👓博主在前端领域还有很多知识和技术需要掌握,正在不断努…

html实现各种瀑布流(附源码)

文章目录 1.设计来源1.1 动态响应瀑布流1.2 分页瀑布流1.3 响应瀑布流 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/134613121 html实现各种瀑布流(附源码),…

Web前端 -----【Vue】(vue组件基础)一文带你了解组件的创建、注册、使用(包括组件的嵌套)

目录 前言 什么是组件 为什么使用组件化开发 组件的使用 组件的使用分为三个步骤 创建组件 为什么配置项中的data不能使用直接对象的形式,必须使用function(重点!!!面试喜欢问) 注册组件 使用组件 …

【经验分享】开发问题记录总结(持续更新)

目录 工具开发 界面类继承某自定义界面类时,出现布局混乱或者所有控件集中在左上角? 在继承自定义界面之后,以诸如 on_xxx_clicked() 模式设计的槽函数失效了? 使用pugi接口取出文本数据后,为什么该变量无法进行字符串比较&…

华硕V4050E笔记本安装Win10不识别硬盘解决方法

笔记本硬件参数: ASUS VivoBook14 V4050E 型 号 V4050EP1135-0DAKXQ2X10 制造日期 2020-12 12M C P U 11th Gen Intel(R)Core(TM)i5-1135G72.4GHz 2.42GHz 4核心 8线程 L2:5MB L3:8MB 内 存 16.0GB (8Gb X2 320…

多目标水母搜索算法(MOJS)求解微电网优化MATLAB

一、微网系统运行优化模型 微电网优化模型介绍: 微电网多目标优化调度模型简介_IT猿手的博客-CSDN博客 二、多目标水母搜索算法MOJS 多目标水母搜索算法(Multi-Objective Jellyfish Search algorithm,MOJS)由Jui-Sheng Chou等…

持续增长的背后,艾比森用泛微-千里聆RPA机器人为业务加速

(艾比森全球总部) 艾比森集团始创于2001年,是全球知名的至真LED显示应用与服务提供商。目前旗下设有深圳总部,艾比森东江智造中心,以及艾比森美国、德国、日本、迪拜、俄罗斯、墨西哥、巴西、中国香港等18家海内外公司…

css中flex两列布局(一列自适应其他固定)

问题 最近写一个布局的时候,遇到一个问题。如下图的布局。在没有图片的时候布局是正常的,如果有图片且设置了width:100%;height: 100%; 则会出现图片将自适应布局撑开的情况。 我的解决方式是让图片不缩放,图片外层再添加一个div元素。形如…