我通过使用以下功能为元素创建xpath:
function getXPath(e) {
if ("" !== e.id)
return 'id("' + e.id + '")';
if (e === document.body)
return "//" + e.tagName;
for (var t = 0, a = e.parentNode.childNodes, n = 0; n < a.length; n++) {
var r = a[n];
if (r === e)
return getXPath(e.parentNode) + "/" + e.tagName + "[" + (t + 1) + "]"; 1 === r.nodeType && r.tagName === e.tagName && t++;
}
}
function getElementAttributes(t) {
if (t) {
var r = { tagName: t.tagName, cssSelector: getCssSelector(t), Xpath: getXPath(t) }, a = 0;
for (a = 0; a < t.attributes.length; a++)
r[t.attributes[a].nodeName] = t.attributes[a].nodeValue;
return r
}
return {}
}
然后我可以获取光标(当前光标位置)Web元素的xpath:
chrome.extension.onMessage.addListener(
function EventGetHtmlInfo(message, sender, sendResponse) {
// Remove this function from the list of listeners.
chrome.extension.onMessage.removeListener(EventGetHtmlInfo);
// Result type.
var elem = document.elementFromPoint(message.x / window.devicePixelRatio, message.y / window.devicePixelRatio);
console.log(elem);
sendResponse({
title: document.title,
uri: window.location.href,
attributes: getElementAttributes(elem)
});
});
在上面运行这些函数后,它将返回html元素的xpath(在当前光标位置)。例如,我得到如下的html脚本:
<div id="abc">
<div>
a
</div>
<div>
b
</div>
</div>
我将光标放在浏览器中的字符“ b”上,运行这些功能后,它将返回值:“ id(// abc //)/ DIV [2]”
现在我的桌子看起来像这样:
<table>
<tr>
<td>b</td>
<td>a</td>
<td>a</td>
</tr>
<tr>
<td>a</td>
<td>a</td>
<td>a</td>
</tr>
</table>
人员x希望通过将光标置于表格中的任何单元格来获取表格中的所有数据。如何通过“重用”以上这些函数来获取其xpath(不包含“ TABLE [1] / TBODY [1] / TR [...] / TD [...]”,仅包含“ TABLE [1]”) ?如果不可能,我如何通过其他方式获取它的xpath?
谢谢。