摘要:在这里我们是用来标识页面元素控件的唯一性至于什么是,可以自行。有它算出的功能打开一个网页,,在弹出的小窗口中选中一个标签,右键,看到了吧点下然后粘贴下就知道这元素的标签的多少了浏览器中通过获取和根据获取元素
XPath在这里我们是用XPath来标识页面元素、控件的唯一性
至于什么是XPath,可以自行google。chrome有它算出XPath的功能!打开一个网页,F12,在弹出的小窗口中选中一个标签,右键,看到“copy XPath”了吧!点下然后粘贴下就知道这元素的标签的XPath多少了
Javascript get XPath and find element by XPathChrome浏览器中通过js获取xpath和根据xpath获取元素
export default {
getXPath(elm){
let allNodes = document.getElementsByTagName("*")
for(var segs = []; elm && elm.nodeType == 1; elm = elm.parentNode){
if(elm.hasAttribute("id")){
let uniqueIdCount = 0
for(var n=0;n < allNodes.length;n++){
if (allNodes[n].hasAttribute("id") && allNodes[n].id == elm.id) uniqueIdCount++;
if (uniqueIdCount > 1) break;
}
if(uniqueIdCount == 1){
segs.unshift("//*[@id="" + elm.getAttribute("id") + ""]");
return segs.join("/");
}else{
return false
}
}else{
for(var i = 1, sib = elm.previousSibling; sib; sib = sib.previousSibling){
if (sib.localName == elm.localName) i++;
}
if(i == 1){
if(elm.nextElementSibling){
if(elm.nextElementSibling.localName != elm.localName){
segs.unshift(elm.localName.toLowerCase())
}else{
segs.unshift(elm.localName.toLowerCase() + "[" + i + "]");
}
}else{
segs.unshift(elm.localName.toLowerCase())
}
}else{
segs.unshift(elm.localName.toLowerCase() + "[" + i + "]");
}
}
}
return segs.length ? "/" + segs.join("/") : null
},
getElem(path){
try{
var evaluator = new XPathEvaluator();
var result = evaluator.evaluate(path, document.documentElement, null,XPathResult.FIRST_ORDERED_NODE_TYPE, null);
return result.singleNodeValue || "";
}catch(e){
return ""
}
}
}
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/82546.html
摘要:全称应用性能管理监控后面我会通过一系列的文章来介绍的原理框架设计与实现等等。在应用构建期间,通过修改字节码的方式来进行字节码插桩就是实现自动化的方案之一。 showImg(https://segmentfault.com/img/bVbbRX6?w=1995&h=1273); 欢迎关注微信公众号:BaronTalk,获取更多精彩好文! 一. 前言 性能问题是导致 App 用户流失的罪魁...
摘要:反向代理无痕埋点前言本项目纯属个人练习项目,数据并非真实,如有雷同,纯属巧合。 Node.js(v6.9.1) + express(4.X) + vue(2.0) + vuex + mysql(5.7.18) + (NUXT)SSR + nginx反向代理 + 无痕埋点 前言 https://github.com/github1586...*本项目纯属个人练习项目,数据并非真实,如有雷...
摘要:反向代理无痕埋点前言本项目纯属个人练习项目,数据并非真实,如有雷同,纯属巧合。 Node.js(v6.9.1) + express(4.X) + vue(2.0) + vuex + mysql(5.7.18) + (NUXT)SSR + nginx反向代理 + 无痕埋点 前言 https://github.com/github1586...*本项目纯属个人练习项目,数据并非真实,如有雷...
获取用户的交互习惯及喜好,进一步提升转化率,可以在之前的埋点方案实现中,都是在具体的按钮或者图片被点击或者被曝光时主动通过事件去上报埋点。但这种方法适合在埋点比较少时还行的项目,遇见项目中需要大量埋点时,添加的代码就太多了,就会埋点逻辑与业务逻辑的高耦合。 由此需要换种方式。我先给大家普及下埋点上报方式都有哪些? 手动埋点 可视化埋点 无痕埋点 手动埋点,顾名思义就是纯手动写代码,调...
摘要:博客地址使用模块化工具打包自己开发的库文章中有提到,当时需要写一个,监控小程序的后台接口调用和页面报错,今天就来说下实现原理吧原理之前也做过浏览器端的数据埋点上报,其实原理大同小异通过劫持原始方法,获取需要上报的数据,最后再执行原始方法,这 博客地址 《使用模块化工具打包自己开发的JS库》文章中有提到,当时需要写一个SDK,监控小程序的后台接口调用和页面报错,今天就来说下实现原理吧! ...
阅读 1855·2021-10-14 09:42
阅读 4137·2021-09-07 09:59
阅读 1587·2019-08-30 15:55
阅读 838·2019-08-30 11:17
阅读 3635·2019-08-29 16:06
阅读 757·2019-08-29 14:06
阅读 3391·2019-08-28 18:14
阅读 4014·2019-08-26 13:55