Я создаю 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 {}
}
Затем я могу получить 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)
});
});
После запуска этихфункции выше, он вернет xpath элемента html (в текущей позиции курсора).Например, я получаю 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 другими способами?
Спасибо.