【发布时间】: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