1

我希望能够将鼠标悬停在页面上,让它突出显示光标下方的元素(与开发人员工具检查器相同),并且当我单击鼠标时获取元素的 XPath。启用元素检查器并通过代码接收 XPath,并由人工选择元素。

我可以通过使用Chrome Devtools 协议并将Overlay.setInspectMethodinspectNode=searchForNode.

单击鼠标后,我会从事件中收到单击元素的DOM.BackendNodeIdOverlay.inspectNodeRequested

devtools 协议似乎没有任何内置方法来获取 XPath。所以我找到了 Chrome 开发者工具 Copy->Xpath 功能的这个javascript 实现。

虽然我可以通过 CDT 协议评估 javascript,但经过数小时的尝试,当我只有 BackendNodeId 时,我无法弄清楚如何获取对节点的引用以执行 javascript 函数。

有没有办法在 javascript 中获取对节点的引用,或者有没有办法在 CDTProtocol 中获取节点 XPath?

4

1 回答 1

1

找到了合适的解决方案

首先,我需要通过以下方式获取对 Javascript 对象的引用

DOM.resolveNode, {backendNodeId: nId}

然后从返回的 JSON 对象中提取 objectId。看起来像从 resolveNode 调用返回的 JSON 对象

然后我可以调用我喜欢的任何函数,将元素作为上下文

Runtime.callFunctionOn, {functionDeclaration: "function(){getXPathForElement(this)}", objectId: "{"injectedScriptId":3,"id":3}"

于 2020-07-20T03:06:52.310 回答