一日一技:在网页上如何获取鼠标当前指向的元素

简介: 一日一技:在网页上如何获取鼠标当前指向的元素

摄影:产品经理跟产品经理吃烤肉

开发爬虫的同学肯定用过 Chrome 开发者工具自动定位页面元素对应的 HTML 标签的功能,如下图所示:

那么有没有同学思考过,这个功能,如果用 JavaScript 怎么实现呢?

显然,随着鼠标的移动,鼠标指向的页面元素是不断变化的,我们需要知道鼠标当前指向了哪一个页面元素。

在 JavaScript 中,有一个函数叫做document.elementFromPoint(x, y),输入页面坐标,返回该坐标上的页面元素。而坐标可以通过鼠标的事件来获得。

于是,我们可以写出如下的 JavaScript 代码:

function get_current_element(event){
        var x = event.clientX, y = event.clientY,
        element = document.elementFromPoint(x, y);
        return element
    }
function track_mouse(event){
        var elementMouseIsOver = get_current_element(event)
        console.log('当前鼠标指向的元素是:', elementMouseIsOver)
    }
window.onmousemove = track_mouse

这样,当鼠标移动时,可以实时获得当前鼠标指向的元素。

但是,如果你直接使用上面的代码,那么你会被打印出来的信息刷屏,因为鼠标一旦移动就会有数据打印出来。所以我们需要做一个限制,当鼠标在元素内部移动的时候,不打印数据。track_mouse修改为:

var last_element = null
function track_mouse(event){
        var elementMouseIsOver = get_current_element(event)
        if (elementMouseIsOver === last_element) {
            return
        }
        console.log(elementMouseIsOver)
        last_element = elementMouseIsOver
    }

我们在 Chrome 的控制台运行看看效果:

这样直接打印元素可能不太好查看,我们再加个元素边框的功能。增加两个函数:

function highlight(element){
    element.style.outline = '#f00 solid 2px'
    }
function remove_hightlight(element){
        element.style.removeProperty('outline')
    }

修改track_mouse代码为:

function track_mouse(event){
        var elementMouseIsOver = get_current_element(event)
        if (elementMouseIsOver === last_element) {
            return
        }
        if (last_element != null) {
            remove_hightlight(last_element)
        }
        highlight(elementMouseIsOver)
        last_element = elementMouseIsOver
    }

运行效果如下面的动图所示。

有了这个功能以后,只要我们再稍稍修改一下代码,就可以实现自动获取鼠标指向位置的 XPath 了。有兴趣的同学请留言,我继续写。

目录
相关文章
|
Web App开发 Java 测试技术
多任务一次搞定!selenium自动化复用浏览器技巧大揭秘
多任务一次搞定!selenium自动化复用浏览器技巧大揭秘
|
移动开发
钉钉H5微应用配置IP,应用首页地址报错:app url exceeds max length limit,这个怎么处理?
钉钉H5微应用配置IP,应用首页地址报错:app url exceeds max length limit,这个怎么处理?
1069 0
|
缓存 弹性计算 Kubernetes
在生产环境中,阿里云如何构建高性能云原生容器网络?(含 PPT 下载)
关注“阿里巴巴云原生”公众号,后台回复 “ 416 ” 即可下载 PPT。
在生产环境中,阿里云如何构建高性能云原生容器网络?(含 PPT 下载)
|
Windows
使用docsify生成静态网站和pdf epub等
docsify生成静态网站和pdf epub等
2014 0
|
11月前
|
C# 开发者
C# 一分钟浅谈:Socket 编程基础
【10月更文挑战第7天】本文介绍了Socket编程的基础知识、基本操作及常见问题,通过C#代码示例详细展示了服务器端和客户端的Socket通信过程,包括创建、绑定、监听、连接、数据收发及关闭等步骤,帮助开发者掌握Socket编程的核心技术和注意事项。
278 3
C# 一分钟浅谈:Socket 编程基础
|
运维 监控 网络安全
自动化运维:使用Python脚本实现服务器批量管理
【8月更文挑战第2天】在现代IT运维领域,效率和准确性是衡量工作质量的关键指标。手动管理大量服务器不仅耗时且容易出错,因此自动化运维工具的开发变得至关重要。本文将介绍如何利用Python编写一个简单的自动化脚本,实现对多台服务器的批量管理,包括自动更新、配置同步以及日志收集等功能。通过实际案例展示,我们能够看到自动化运维如何提升工作效率并减少人为错误。
|
Kubernetes Java 开发工具
Kubernetes部署项目流程(新手上线新版本服务整个流程)
【8月更文挑战第1天】Kubernetes(k8s)新手上线新版本服务整个流程
318 5
|
JavaScript
Layui中jquery的使用方式
Layui中jquery的使用方式
411 0
|
安全 Windows
Microsoft Windows MHTML脚本代码注入漏洞 (MS11-026) (CVE-2011-0096)
Microsoft Windows MHTML脚本代码注入漏洞 (MS11-026) (CVE-2011-0096)
1282 0
Microsoft Windows MHTML脚本代码注入漏洞 (MS11-026) (CVE-2011-0096)
|
Python
tinytag-用于读取MP3,OGG,FLAC和Wave文件的音乐元数据的python库
tinytag是一个python库,用于使用python读取MP3,OGG,OPUS,MP4,M4A,FLAC,WMA和Wave文件的音乐元数据。特征: - 读取音频文件的标签,长度和封面图像 - 支持的格式:(MP3 (ID3 v1, v1.1, v2.2, v2.3+)、Wave/RIFF、OGG、OPUS、FLAC、WMA、MP4/M4A/M4B) - 纯python,无依赖 - 支持python 2.7和3.4或更高版本 - 高测试覆盖率 - 仅几百行代码(只需将其包含在您的项目中即可!)
2248 0
tinytag-用于读取MP3,OGG,FLAC和Wave文件的音乐元数据的python库