【问题标题】:Xpath: Working in Devtools but returns empty object with document.evaluate()Xpath:在 Devtools 中工作,但使用 document.evaluate() 返回空对象
【发布时间】:2021-10-11 14:40:43
【问题描述】:

以下命令在 Devtools 控制台中按预期工作(例如,这里 - https://news.ycombinator.com/

$x('//a[@class="storylink"]')(边缘浏览器)

但是下面的代码:

            const page = await browser.newPage();
            await page.goto("https://news.ycombinator.com/");
            let urls = await page.evaluate(() => {
                var item = document.evaluate(
                    '//a[@class="storylink"]',
                    document,
                    null,
                    XPathResult.FIRST_ORDERED_NODE_TYPE,
                    null
                ).singleNodeValue;
                return item
            })
            browser.close(); 

返回一个空对象:{}。同样的情况也发生在其他所有网站上。 为什么会这样?

【问题讨论】:

  • //*[@id='pagespace'] 不包含任何值
  • @Fazlul 我编辑到另一个查询,仍然是{}
  • 那是用 Puppeteer 吗?它在 page 上公开了 XPath 评估方法 $xpptr.dev/…let urls = await page.$x('//a[@class="storylink"]').
  • @MartinHonnen 你拯救了我的一天!
  • 我已将评论的建议放入答案中,以便您接受它以将问题标记为已解决。

标签: node.js xpath document.evaluate


【解决方案1】:

如果您是来自 Node.js 的带有 Puppeteer 的自动 Chrome,那么您已经拥有的 page 对象公开了用于 XPath 评估的方法 $x,请参阅 https://pptr.dev/#?product=Puppeteer&version=v10.4.0&show=api-pagexexpression。这意味着做

let urls = await page.$x('//a[@class="storylink"]')

应该够了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-23
    • 1970-01-01
    • 2014-03-21
    • 1970-01-01
    • 2012-01-23
    • 1970-01-01
    • 2022-01-15
    • 2020-01-30
    相关资源
    最近更新 更多