查询框架内的选择器
Querying a selector that is inside a frame
我正在用 Puppeteer/JS 构建一个简单的抓取工具。
我正在尝试从页面中获取一组段落,html 如 [此图片][1] 中所示。
当我使用 id (#iframeContent
) 时,我什么也得不到。当我尝试使用深度指标时;
await page.$eval('#bookDesc_iframe_wrapper > iframe')
它在尝试点击 > 文档或 > #document 时迷路了。
在 google 上的开发控制台中,如果我手动打开该文档 > html > 正文,我只能通过查询选择器找到,否则甚至 google控制台没有看到 #iframeContent
.
您不能跨框架使用选择器。您首先必须找到框架,然后在框架内工作。使用 page.frames()
to get a list of all frames of the page and frame.name()
确定您的目标框架。
然后您可以像在页面上一样执行 frame.$$
or 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');
我正在用 Puppeteer/JS 构建一个简单的抓取工具。
我正在尝试从页面中获取一组段落,html 如 [此图片][1] 中所示。
当我使用 id (#iframeContent
) 时,我什么也得不到。当我尝试使用深度指标时;
await page.$eval('#bookDesc_iframe_wrapper > iframe')
它在尝试点击 > 文档或 > #document 时迷路了。
在 google 上的开发控制台中,如果我手动打开该文档 > html > 正文,我只能通过查询选择器找到,否则甚至 google控制台没有看到 #iframeContent
.
您不能跨框架使用选择器。您首先必须找到框架,然后在框架内工作。使用 page.frames()
to get a list of all frames of the page and frame.name()
确定您的目标框架。
然后您可以像在页面上一样执行 frame.$$
or 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');