Получить Javascript ссылку на элемент только с backendNodeId из протокола Devtools - PullRequest
0 голосов
/ 10 июля 2020

Я хочу иметь возможность наводить указатель мыши на страницу, выделять элементы под курсором (так же, как инспектор инструментов разработчика), и когда я щелкаю мышью, получаю XPath для элемента. Включение инспектора элементов и получение XPath, которое должно выполняться через код, и выбор элемента человеком.

Я могу включить поведение инспектора инструментов разработчика, используя Chrome Протокол Devtools и Overlay.setInspectMethod с inspectNode=searchForNode.

После щелчка мыши я получаю DOM.BackendNodeId элемента, на который был выполнен щелчок, из события Overlay.inspectNodeRequested

Похоже, что протокол devtools не имеет встроенного способа для последующего получения XPath. Итак, я нашел эту javascript реализацию Chrome Developer Tools Copy-> Xpath функциональность.

Хотя я могу оценить javascript через протокол CDT после многих часов попыток , Я не могу понять, как получить ссылку на узел для выполнения функции javascript, когда все, что у меня есть, это BackendNodeId.

Есть ли способ получить ссылку в javascript на узел, или есть способ получить узлы XPath в протоколе CDTP?

1 Ответ

0 голосов
/ 20 июля 2020

Нашел правильное решение

Сначала мне нужно было получить ссылку на объект Javascript через

DOM.resolveNode, {backendNodeId: nId}

Затем извлечь objectId из возвращенного JSON объект. Это будет выглядеть примерно так: вернул JSON объект из вызова resolveNode

Затем я могу вызвать любую функцию, которая мне нравится, с элементом в качестве контекста

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

...