【问题标题】:Can't get elements from DOM object variable with Puppeteer无法使用 Puppeteer 从 DOM 对象变量中获取元素
【发布时间】:2019-07-28 12:50:13
【问题描述】:

我正在尝试通过 Puppeteer 进行一些基本的抓取。特别是,我想在以下布局中提取foo div 的文本内容:

<div class="foobar">
  <div class="foo">…</div>
</div>

这行得通:

const foobar = page.$eval('.foobar foo', (el => el.textContent));
const [foo] = await Promise.all([foobar]);
console.log(foo);

但是,我想从包含 DOM 对象的变量中提取元素。阅读Puppeteer's ElementHandle class documentation 我希望这会产生相同的结果:

const foobar = page.$('.foobar');
const [bar] = await Promise.all([foobar]);
const foo = bar.$eval('.foo', (el => el.textContent));
console.log(foo);

但是我从console.log(foo) 得到的只是

承诺 { }

脚本挂起,或者如果我关闭 Puppeteer 浏览器,它会失败

UnhandledPromiseRejectionWarning:未处理的承诺拒绝

我错过了什么?

【问题讨论】:

  • 试试const foo = await bar.$eval('.foo');
  • @ChrisG 忘记我之前的评论,我用的是.text 而不是.textContent。它有效,请给出答案。

标签: javascript dom web-scraping puppeteer


【解决方案1】:

您好像错过了await

应该是:

const foo = await bar.$eval('.foo', (el => el.textContent));

【讨论】:

    猜你喜欢
    • 2018-12-17
    • 1970-01-01
    • 1970-01-01
    • 2020-09-09
    • 2016-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多