iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >详解Python Selenium如何获取鼠标指向的元素
  • 681
分享到

详解Python Selenium如何获取鼠标指向的元素

2024-04-02 19:04:59 681人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

有一个同学在Gne的群里面咨询如何通过selenium获取当前鼠标指向的元素,在我讲了方法以后,他过了两天又来问: 那么,我今天就来写一篇文章,具体说说应该怎么操作。 这个方法的核

有一个同学在Gne的群里面咨询如何通过selenium获取当前鼠标指向的元素,在我讲了方法以后,他过了两天又来问:

那么,我今天就来写一篇文章,具体说说应该怎么操作。

这个方法的核心,是借助javascript的事件(event)来获取鼠标所在的元素。然后再把这个元素传递给Selenium。我们先来第一步,不考虑Selenium,只使用JavaScript,如何获取当前鼠标指向的元素呢?

我们首先需要知道在JavaScript中的一个事件句柄,叫做window.onmousemove。默认情况下,它的值是null:

我们可以把它的值修改成一个函数,这个函数接收一个event参数,这样当鼠标在网页上移动的时候,这个函数就会被调用。而event参数是一个对象,这个对象有两个属性.clientX.clientY,分别表示鼠标相当于网页的横坐标和纵坐标:

function track_mouse(event){
 var x = event.clientX, y = event.clientY
 console.log('当前鼠标所在位置的坐标:x=' +  x + 'y=' + y)
}

运行效果如下图所示:

你执行命令以后,只要在页面上移动鼠标,你就会在控制台看到大量的坐标被打印出来。

接下来,既然你有了当前鼠标所在位置的坐标,那么你只需要根据坐标查询到这个元素是什么就可以了。在JavaScript中,有一个函数叫做document.elementFromPoint,就能实现这个效果:

function track_mouse(event){
 var x = event.clientX, y = event.clientY
 var element = document.elementFromPoint(x, y)
  if (!element) {
  return // 当前位置没有元素
 } 
  return element
}

那么,如何把这个参数返回给Selenium呢?其实也非常简单,我们设置一个全局变量window.hovered_element,然后把当前鼠标对应的元素赋值给它。然后在Selenium中,使用.execute_script获取window.hovered_element就可以了。

我们先来看看完整的JavaScript:

window.hovered_element = null
function track_mouse(event){
 var x = event.clientX, y = event.clientY
 var element = document.elementFromPoint(x, y)
  if (!element) {
      window.hovered_element = null
  return // 当前位置没有元素
 } 
  window.hovered_element = element
}
window.onmousemove = track_mouse

然后我们再来看看Selenium中的python代码:

import time
from selenium.WEBdriver import Chrome

driver = Chrome('./chromedriver')
driver.get('https://www.kingname.info/')

js = '''
window.hovered_element = null
function track_mouse(event){
 var x = event.clientX, y = event.clientY
 var element = document.elementFromPoint(x, y)
  if (!element) {
      window.hovered_element = null
  return // 当前位置没有元素
 } 
  window.hovered_element = element
}
window.onmousemove = track_mouse
'''

driver.execute_script(js)
while True:
    element = driver.execute_script('return window.hovered_element')
    if element:
        print(f'当前鼠标所在的标签为:{element.tag_name}, 其中的文本内容为:{element.text}')
    time.sleep(1)

运行效果如下图所示:

获取到了当前鼠标所在的元素的标签和标签里面的文字。

到这里,这个同学需要的功能已经完全实现了。

但可能有聪明的同学会发现,他这个需求是有问题的。我们能看到至少有三个问题:

  • 因为window.onmousemove太灵敏了,它的采样时间是毫秒级别的,鼠标稍稍移动一点点就会生成一个事件。但是,一个元素的区域是很大的,在一个元素内部移动鼠标,其实根本没有必要更新window.hovered_element
  • 在Selenium里面,是通过while True每1秒查询一次window.hovered_element,虽然我们已经降低了频率,但大家从上面的图中可以看到,还是会获取到很多重复的数据。这是由于有一些元素非常大,我们鼠标如果在上面慢慢移动,时间会超过1秒,那么Selenium就会重复获取到数据。
  • 由于window.onmousemove的采样时间间隔很小,所以我们可以近似把鼠标的移动看做是连续的移动。因此,这段代码会记录鼠标轨迹路径上面的每一个元素。但实际上,我们并不会对网页上所有的内容都感兴趣,我们只会对特定的内容感兴趣。因此,获取当前鼠标所在位置的元素,其实是一个伪需求,它根本没有什么实际上用处,因为噪声太大了,无用的数据太多了!

实际上,我觉得真正的需求应该是这样的:如果鼠标在网页上面某个元素停留时间超过5秒,那么获取这个元素。

但这样做太费时间了。每次都要等5秒,岂不是带薪摸鱼?那需求能不能改成获取当前鼠标点击的元素呢?如果你实践一下,你会发现,当你点击一个链接的时候,网页自动就跳转到另一个页面去了,并不能获取到你需要的数据。

到此这篇关于详解Python Selenium如何获取鼠标指向的元素的文章就介绍到这了,更多相关Selenium鼠标指向元素内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 详解Python Selenium如何获取鼠标指向的元素

本文链接: https://www.lsjlt.com/news/141536.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 详解Python Selenium如何获取鼠标指向的元素
    有一个同学在Gne的群里面咨询如何通过Selenium获取当前鼠标指向的元素,在我讲了方法以后,他过了两天又来问: 那么,我今天就来写一篇文章,具体说说应该怎么操作。 这个方法的核...
    99+
    2024-04-02
  • php如何获取元素的下标
    在php使用array_search()函数获取元素下标:array_search()函数是用于在数组中搜索某个键值,并返回对应的键名,语法:array_search(value,array);在php中使用array_search()函数...
    99+
    2024-04-02
  • vue如何获取指定元素
    目录如何获取指定元素点击获取相应元素如何获取指定元素 在想要获取元素上添加“ref”  ref="scroll"  s...
    99+
    2024-04-02
  • python元组如何获取元素
    小编给大家分享一下python元组如何获取元素,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1、通过索引获取元素>>> letters...
    99+
    2023-06-15
  • python如何获取鼠标点击坐标
    在Python中,可以使用`pyautogui`库来获取鼠标点击坐标。下面是一个示例代码:```pythonimport pyaut...
    99+
    2023-08-24
    python
  • python怎么获取列表元素的下标
    使用python获取列表元素下标的方法:1.新建python项目;2.定义list列表,并初始化;3.使用enumerate函数获取元素下标;具体步骤如下:首先,打开python,并新建一个python项目;python项目创建好后,在项目...
    99+
    2024-04-02
  • javascript如何获取指定class属性名的元素
    javascript中获取指定class属性名元素的方法:可以使用“getElementsByClassName”方法获取指定class属性名的元素;语法格式为:“document.getElementsByClassName('d...
    99+
    2024-04-02
  • vue如何获取元素的高
    在vue中获取元素高的方法:1.新建vue.js项目;2.添加div标签,设置ref属性;3.执行代码获取元素的高;具体步骤如下:首先,在vue-cli中创建一个vue.js项目;vue create project-namevue.js项...
    99+
    2024-04-02
  • js如何获取标签元素data-*属性值
    这篇文章主要介绍“js如何获取标签元素data-*属性值”,在日常操作中,相信很多人在js如何获取标签元素data-*属性值问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”js如何获取标签元素data-*属性值...
    99+
    2023-06-30
  • python如何从字典中获取元素
    这篇文章主要介绍python如何从字典中获取元素,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!从字典中获取元素不要用下列的方式data = {'user': 1,&nbs...
    99+
    2023-06-17
  • Python selenium的基本元素与键盘鼠标模拟事件实例分析
    本篇内容主要讲解“Python selenium的基本元素与键盘鼠标模拟事件实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python selenium的基本元素与键盘鼠标模拟事件实例分...
    99+
    2023-07-02
  • 如何利用Python获取鼠标的实时位置
    目录安装pyautogui鼠标操作样例Python获取鼠标实时位置具体实现结果展示总结使用Python的第三方库pyautogui,PyAutoGUI是一个纯Python的GUI自动...
    99+
    2024-04-02
  • jQuery如何获取鼠标的X和Y坐标
    小编给大家分享一下jQuery如何获取鼠标的X和Y坐标,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!取得鼠标的X和Y坐标$(document).mousemove...
    99+
    2023-06-27
  • jQuery如何获取DIV和A标签元素位置
    这篇文章主要介绍jQuery如何获取DIV和A标签元素位置,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体如下:一、获取DIV的位置var top = ...
    99+
    2024-04-02
  • 详解Selenium如何实现获取cookies并保存
    目录一、获取cookie二、加载cookie一、获取cookie 获取到cookie后,保存到文件中 from selenium import webdriver import ti...
    99+
    2023-05-18
    Selenium获取cookies方法 Selenium获取cookies Selenium cookies
  • jQuery如何获取元素的偏移量?
    这篇文章将为大家详细讲解有关jQuery如何获取元素的偏移量?,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。jQuery 获取元素偏移量 jQuery 提供了多种方法来获取元素的偏移量,包括: 1. of...
    99+
    2024-04-02
  • python中如何获取和查看列表元素
    这篇文章将为大家详细讲解有关python中如何获取和查看列表元素,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、获取方法(1)通过索引获取元素元素 = 列表[索引]>>&...
    99+
    2023-06-15
  • Javascript DOM的简介,节点和获取元素详解
    目录DOM节点元素节点:文本节点:属性节点:获取元素getElementById()getElementsByTagName()getElementsByClassName()总结:...
    99+
    2024-04-02
  • react获取不到页面元素如何解决
    本篇内容介绍了“react获取不到页面元素如何解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!react获取不到页面元素是因为隐藏的tab...
    99+
    2023-07-04
  • Python如何获取图像中像素点坐标
    这篇“Python如何获取图像中像素点坐标”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python如何获取图像中像素点坐标...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作