Используя кукловода, как вы получаете все дочерние узлы узла? - PullRequest
0 голосов
/ 10 декабря 2018

У меня проблемы с поиском способа перебора подузлов данного узла в кукловоде.Я не знаю html-структуру заранее, только идентификатор родительского элемента.

var elemId = "myelemid";

const doc = await page._client.send('DOM.getDocument');
const node = await page._client.send('DOM.querySelector', {
    nodeId: doc.root.nodeId,
    selector: '#' + elemId
});
//node.children empty
//node['object'].children empty

//try requesting childnodes
var id = node.nodeId;   
var childNodes = await page._client.send('DOM.requestChildNodes', {
   nodeId: id
});         
//childNodes empty

//try requesting by resolveNode?
var aNode = await page._client.send('DOM.resolveNode', {
   nodeId: id
});      
//aNode.children is empty

Есть ли способ получить дочерние элементы узла, если вы не знаете html-структуру в puppeteer?

Ответы [ 2 ]

0 голосов
/ 23 декабря 2018

Я закончил тем, что использовал page.evaluate для запуска некоторых js, которые добавляют уникальные имена классов к каждому элементу и подэлементу, который я хочу проанализировать, и затем возвращаю его обратно в виде строки JSON, поскольку page.evaluate возвращает только строку.Затем я просто вызываю DOM.querySelector для каждого из этих уникальных селекторов и перебираю их таким образом.

Возвращение потомков со страницы. $ Eval не дает мне узлы протокола, на которых я могу запускать больше функций протокола dev, и xpath не решает мою реальную проблему, потому что он не может рекурсивно перебирать все подпрограммы.потомки, потом потомки этих потомков.

Я закрываю вопрос, так как маркировка с использованием уникальных имен классов решает мою проблему.

0 голосов
/ 10 декабря 2018

Я хотел бы использовать метод Puppeteer evaluate, чтобы вернуть дочерние элементы вашего узла в ваш скрипт следующим образом:

const nodeChildren = await page.$eval(cssSelector, (uiElement) => {
  return uiElement.children;
});
console.log(nodeChildren); // Outputs the array of the nodes children

Надеюсь, это поможет!

...