From 5f7aee491890ceea34e546213cb3f9a877f1a984 Mon Sep 17 00:00:00 2001 From: naibo Date: Mon, 12 Jun 2023 19:01:03 +0800 Subject: [PATCH] Add New XPath --- .../manifest_v3/src/content-scripts/global.js | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/Extension/manifest_v3/src/content-scripts/global.js b/Extension/manifest_v3/src/content-scripts/global.js index c6d0465..834ec7c 100644 --- a/Extension/manifest_v3/src/content-scripts/global.js +++ b/Extension/manifest_v3/src/content-scripts/global.js @@ -49,10 +49,31 @@ export function getElementXPaths(element, parentElement = document.body) { if (element.alt) { paths.push("//" + element.tagName + "[@alt='" + element.alt + "']"); } + paths.push(getAbsoluteXPathWithReverseIndex(element)); console.log("ALL PATHS: " + paths); return paths; } +function getAbsoluteXPathWithReverseIndex(element) { + var path = []; + while (element && element.nodeType == Node.ELEMENT_NODE) { + var index = 0; + for (var sibling = element.nextSibling; sibling; sibling = sibling.nextSibling) { + // Ignore document type declaration. + if (sibling.nodeType == Node.DOCUMENT_TYPE_NODE) + continue; + if (sibling.nodeName == element.nodeName) + ++index; + } + + var tagName = element.nodeName.toLowerCase(); + var pathIndex = (index ? "[last()-" + index + "]" : ""); + path.unshift(tagName + pathIndex); + + element = element.parentNode; + } + return "/" + path.join("/"); +} //返回element相对node节点的xpath,默认的node节点是: / export function readXPath(element, type = 1, node = document.body) {