当前位置: 首页 > news >正文

【Python+Selenium学习系列5】Selenium特殊元素定位之-鼠标悬停操作

前言

Selenium模拟用户在浏览器中的操作,比如点击按钮。在某些场景下,我们需要模拟鼠标悬停的操作,来触发一些隐藏的元素。本文将介绍Python Selenium实现鼠标悬停操作。

鼠标悬停,即当光标与其名称表示的元素重叠时触发的事件,在Selenium中将键盘鼠标操作封装在Action Chains类中。Action Chains类主要应用场景为单击鼠标双击鼠标鼠标拖曳等。

一、鼠标悬停方法分类

部分常用的方法使用分类如下:

  1. click(on_element=None)--模拟鼠标单击操作。
  2. click_and_hold(on_element=None)--模拟鼠标单击操作并且按住不放。
  3. double_click(on_element=None)--模拟鼠标双击操作。
  4. context_click(on_element=None)--模拟鼠标右击击操作。
  5. drag_and_drop(source,target)--模拟鼠标拖曳。
  6. drag_and_drop(source,xoffset,yoffset)--模拟将目标拖曳到目标位置。
  7. key_down(value,element=None)--模拟按住某个键,实现快捷键操作。
  8. key_up(value,element=None)--模拟松开某个键,一般和key_down操作一起使用。
  9. move_to_element(to_element)--模拟将鼠标移到指定的某个页面元素。
  10. move_to_element_with_offset(to_element,xoffset,yoffset)--移动鼠标至指定坐标。
  11. perform()--将之前一系列的Action Chains执行。
  12. release(on_element=None)--释放按下的鼠标。

二、鼠标悬停-场景案例

以百度首页-登录为例,开始鼠标没有放在“登录”按钮上时,display为none-元素隐藏。

鼠标放在“登录”按钮上后,display状态发生改变,由none变成block。

 三、鼠标悬停方法实例

以百度首页设置为例,使用“move_to_element”的方法,鼠标即可悬停于元素设置。

界面元素如下:

3.1 源代码

# <editor-fold desc="Description">
#coding=utf-8
from selenium.webdriver.common.by import By
#引用'webdriver'模块
from selenium import webdriver
#导入ActionChains类
from selenium.webdriver.common.action_chains import ActionChains# </editor-fold>
import timedef main():#启动谷歌浏览器driver = webdriver.Chrome()#浏览器窗口最大化driver.maximize_window()#导航到百度网页driver.get('https://www.baidu.com')#定位需要悬停的元素bg_config1=driver.find_element(By.XPATH,'//*[@id="s-usersetting-top"]')#创建一个ActionChains对象actions=ActionChains(driver)#使用move_to_element()模拟将鼠标悬停在超链接“设置”处,并通过perform()方法来执行操作actions.move_to_element(bg_config1).perform()#鼠标悬停时,定位元素,超链接“搜索设置”,然后单击操作bg_config2=driver.find_element(By.LINK_TEXT,"搜索设置")bg_config2.click()#等待5stime.sleep(5)#关闭浏览器driver.quit()if __name__ == '__main__':main()

3.2 运行结果

http://www.lryc.cn/news/316895.html

相关文章:

  • 简介:基于 OpenTiny 组件库的 rendereless 无渲染组件架构
  • tcp 连接数上限突破
  • 解决 mmseg/models/decode_heads/mask2former_head.py 中__init__()关键字参数错误
  • ​如何使用 ArcGIS Pro 分析爆炸波及建筑
  • LoadBalancer (本地负载均衡)
  • 每日一题 第一期 洛谷 铺地毯
  • Linux 多线程开发
  • Android 9.0 关于在系统Launcher3中调用截图api总是返回null的解决方案
  • openssl3.2 - exp - 用openssl命令行来模拟ECC加解密的全流程
  • 【Linux进阶之路】HTTP协议
  • 股市新手福音:河北源达“财源滚滚”让投资变得更简单
  • 2024.02.14 校招 实习 内推 面经
  • 5.Java并发编程—JUC线程池架构
  • llama2c(4)之forward、sample、decode
  • 20240312-2-贪心算法
  • 前端 --- HTML
  • curl c++ 实现HTTP GET和POST请求
  • 12、设计模式之代理模式(Proxy)
  • springboot集成Quartz定时任务组件
  • 代码随想录算法训练营第38天—动态规划06 | ● 完全背包 ● *518. 零钱兑换 II ● 377. 组合总和 Ⅳ
  • C语言每日一题(63)复写零
  • ElasticSearch聚合查询
  • 【毕设级项目】基于AI技术的多功能消防机器人(完整工程资料源码)
  • 【一】【设计模式】类关系UML图
  • 【DevOps基础篇】容器化架构基础设施监控方案
  • 【QT】文件流操作(QTextStream/QDataStream)
  • CentOS 7 devtoolset编译addressSanitizer版本失败的问题解决
  • ubuntu2004桌面系统英伟达显卡驱动安装方法
  • Java通过Excel批量上传数据!!!
  • 【PyQT/Pysider】控件背景渐变