仿chrome实现获取元素xpath
来源:互联网 发布:js无限下拉页面瀑布流 编辑:程序博客网 时间:2024/06/06 07:02
最近做的一个项目是自动化爬虫系统,其中包括了前端chrome插件,在插件中实现了仿chrome获取元素xpath的方式.
1.代码
xh.elementsShareFamily = function(primaryEl, siblingEl) { var p = primaryEl, s = siblingEl; //(!p.className || p.className === s.className && return (p.tagName === s.tagName && (!p.id || p.id === s.id));};xh.getElementIndex = function(el) { var index = 1; var sib; for (sib = el.previousSibling; sib; sib = sib.previousSibling) { if (sib.nodeType === Node.ELEMENT_NODE && xh.elementsShareFamily(el, sib)) { index++; } } if (index > 1) { return index; } for (sib = el.nextSibling; sib; sib = sib.nextSibling) { if (sib.nodeType === Node.ELEMENT_NODE && xh.elementsShareFamily(el, sib)) { return 1; } } return 0;};xh.makeQueryForElement = function(el) { var query = ''; for (; el && el.nodeType === Node.ELEMENT_NODE; el = el.parentNode) { var component = el.tagName.toLowerCase(); var index = xh.getElementIndex(el); if (el.id) { component += '[@id=\'' + el.id + '\']'; } //else if (el.className) { // component += '[@class=\'' + el.className + '\']'; // } if (index >= 1) { component += '[' + index + ']'; } // If the last tag is an img, the user probably wants img/@src. if (query === '' && el.tagName.toLowerCase() === 'img') { component += '/@src'; } query = '/' + component + query; } return query;};
在调用时只需要调用xh.makeQueryForElement方法即可,其中注释部分是把标签的className也作为xpath的一部分,由于chrome的获取xpath是不带className信息的,所以打上了注释
2.效果
可以看到在根列表下的xpath就是通过模拟chrome的方式获取的,下面的内容是通过xpath解析出来的.
3.附录
xpath解析内容函数
xh.evaluateQuery = function(query) { var xpathResult = null; var str = ''; var nodeCount = 0; try { xpathResult = document.evaluate(query, document, null, XPathResult.ANY_TYPE, null); // console.log("==================" + xpathResult.resultType); } catch (e) { str = '[INVALID XPATH EXPRESSION]'; nodeCount = 0; } if (!xpathResult) { return [str, nodeCount]; } if (xpathResult.resultType === XPathResult.BOOLEAN_TYPE) { str = xpathResult.booleanValue ? '1' : '0'; nodeCount = 1; } else if (xpathResult.resultType === XPathResult.NUMBER_TYPE) { str = xpathResult.numberValue.toString(); nodeCount = 1; } else if (xpathResult.resultType === XPathResult.STRING_TYPE) { str = xpathResult.stringValue; nodeCount = 1; } else if (xpathResult.resultType === XPathResult.UNORDERED_NODE_ITERATOR_TYPE) { for (var node = xpathResult.iterateNext(); node; node = xpathResult.iterateNext()) { if (null != str && str != '') { str += '[newline]'; } str += node.textContent.replace(/[\r\n\t]/g, ' ').replace(/[ ]{2,}/g,' '); nodeCount++; } if (nodeCount === 0) { //console.log("=====nodeCount0========="+xpathResult); //console.log(xpathResult.iterateNext()) str = '[NULL]'; } } else { // Since we pass XPathResult.ANY_TYPE to document.evaluate(), we should // never get back a result type not handled above. str = '[INTERNAL ERROR]'; nodeCount = 0; } return [str, nodeCount];};
阅读全文
0 0
- 仿chrome实现获取元素xpath
- Selenium--Chrome获取Xpath
- xpath获取子孙元素
- 通过chrome利用xpath定位页面元素
- 获取页面元素和xpath
- Js根据xpath获取元素
- Js获取元素的xpath
- 如何从chrome浏览器获取Xpath
- GeckoFx (3)使用 xpath 获取元素,生成 xpath 路径
- Chrome浏览器获取XPATH的方法----通过开发者工具获取
- JAVA 实现通过XPath查找结点元素
- 元素xpath的获取及测试小技巧
- 转载:Javascript获取html元素的XPath路径(选择器)
- js获取鼠标选中的元素的xpath
- 各种浏览器下的页面元素xpath获取方法
- 【软件测试】获取html页面中某个元素的XPath
- Python lxml解析HTML并用xpath获取元素
- 各种浏览器下的页面元素xpath获取方法
- 2017杭州·云栖大会---大数据workshop:《云数据·大计算:海量日志数据分析与应用》之《数据采集:日志数据上传》篇
- Ubuntu firefox 上无法联网
- A function that corrects the "ActionDay" fields from market quotes which is delivered by CTP.
- 业界 | Kirin 970完爆A11,但华为手机的真正利器是HiAI移动计算平台
- TortoiseGit 免密码操作
- 仿chrome实现获取元素xpath
- 【转】数据库的设计(E-R图,数据库模型图,三大范式)
- C及C++基础学习
- 启动tomcat时报端口8690被占用
- 虚继承
- 学习笔记2:数据库结构优化
- JAVA提高篇(4)--Random()函数
- SpringBoot集成Redis
- 《Java虚拟机原理图解》 1.2.2、Class文件中的常量池详解(上)