查询框架内的选择器

时间:2019-03-31 18:34:01

标签: javascript node.js web-scraping puppeteer dom-traversal

我正在用Puppeteer / JS构建一个简单的刮板。

我正在尝试从页面上获取段落的数组,并且html如[此图片] [1]中所示。

使用ID(#iframeContent)时,我什么也没得到。这样,当我尝试使用深度指标时;

await page.$eval('#bookDesc_iframe_wrapper > iframe')

它丢失了试图点击> document或> #document的轨道。

在Google的开发人员控制台中时,我只能通过查询选择器找到我是否手动打开了该文档> html>正文,否则,即使是Google控制台也看不到#iframeContent

1 个答案:

答案 0 :(得分:1)

您不能跨框架使用选择器。您首先必须找到框架,然后在框架内工作。使用page.frames()获取页面所有框架的列表,并使用frame.name()标识目标框架。

然后您可以像在页面上一样执行frame.$$frame.evaluate之类的功能。

代码看起来像这样:

const frames = await page.frames();
const iframe = frames.find(f => f.name() === 'bookDesc_iframe'); // name or id for the frame

const paragraphs = await iframe.$$('p');