【问题标题】:Puppeteer: How to get parentNode without using evaluate?Puppeteer:如何在不使用评估的情况下获取父节点?
【发布时间】:2020-06-14 23:28:15
【问题描述】:

有了 Puppeteer,我知道如何使用评估来获得一些属性,例如 parentNodepreviousSibling

let id = await page.evaluate(() => {
    let wantedHref = $('li a').filter(
        function (index) {
            return $(this).text().includes("Text that I Want");
        })[0];
    //get parentNode
    let id = wantedHref.parentNode.parentNode.parentNode.id;
    //get  previousSibling
    let expandIcon = wantedLink.parentNode.parentNode.previousSibling;
    expandIcon.click();
    return id;
});

我想知道如何在不使用评估的情况下检索这些类型的属性。

你能帮帮我吗?

【问题讨论】:

  • 底层 CDP 有 DOM.describeNode 命令,所以应该可以在 Puppeteer 中使用它。请参阅我链接的文档-该命令返回带有parentIdNode 响应,您可以在其中查询另一个DOM.describeNode 或其他接受节点ID 的命令。要查找原始节点,您可以使用DOM.querySelector
  • 你为什么不想使用评估?
  • @hardkoded 我不想使用评估,因为它更难以调试和暂停,无论如何我想以多种方式进行这种类型的操作
  • @hardkoded 我想获取所有具有特定类的 div 并获取其父级的所有 id
  • 您可以混合使用,使用$$ 获取所有元素,然后进行评估以获取每个元素的父级。

标签: javascript node.js google-chrome-devtools puppeteer acceptance-testing


【解决方案1】:

elementHandle.getProperty('parentNode')

可以使用elementHandle.getProperty()获取当前ElementHandleparentNode属性:

const current_element = await page.$('#example');
const parent_node = await current_element.getProperty('parentNode');

await parent_node.click();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-23
    • 2021-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-10
    • 1970-01-01
    相关资源
    最近更新 更多