【问题标题】:Searching within returned element在返回的元素中搜索
【发布时间】:2022-01-23 07:11:49
【问题描述】:

我有这样的代码来收集有关页面上所有项目列表的信息并返回它们:

const resultsArr = await page.$$eval('.result-row', elements =>
  elements.map(el => {
    return {
      price: await page.eval('how do I search within the element el?')
    }
  })
);

在 chrome 控制台中测试我可以获取元素并执行类似的操作

elements[0].find('.result-price')[0].innerHTML // returns '$1,500'

我很难将我的 jquery 翻译成 puppeteer。问题是,在上面的例子中,如何从元素el 中搜索并返回数据?

【问题讨论】:

  • 嵌套page 函数是不可能的,因为eval 回调在浏览器中运行,而page 不存在。您可能会混淆浏览器控制台中执行的内容和 Node 中执行的内容。使用像 document.querySelector 这样的本机浏览器函数在 eval 块内进行搜索——您在控制台中运行的相同代码应该可以工作。如果您不介意分享您想要完成的工作的网站和上下文,我可以提供一个不那么随意的答案。
  • 谢谢@ggorlen,我会在这里使用本机浏览器功能。我接受的答案以这种方式解决了它并且有效。

标签: node.js puppeteer


【解决方案1】:

使用page.evaluate

const resultsArr = await page.evaluate(() => {

    return Array.from(document.querySelectorAll('.result-row .result-price')).map(el => {

        return {
            price: el.innerText
        };

    });
});

【讨论】:

  • 该代码运行良好。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-31
  • 2022-07-21
  • 1970-01-01
  • 2014-02-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多