javascript - 查询框架内的选择器

标签 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 > body,我只能通过查询选择器找到,否则即使 google 控制台也看不到 #iframeContent .

最佳答案

您不能跨框架使用选择器。您首先必须找到框架,然后在框架内工作。使用 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');

关于javascript - 查询框架内的选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55444138/

相关文章:

python - 为什么我定义的项目没有从 Scrapy 填充和存储?

javascript - Fader 不同于 Div

javascript - NodeJs,500 无法获取访问 token (错误 : connect ECONNREFUSED) at at process. _tickCallback (node.js:419:13)

node.js - 使用 axios 调用登录 API 时,当我的凭据在 catch 中错误时,我没有收到任何响应

node.js - 浏览器 Angular 5 控制台中来自服务器的消息

node.js - Nodejs 5.4 中 => 符号是什么

python - 解析链接时脚本给出重复结果

javascript - 为什么这些功能的工作方式不同?

javascript - 如何清除script标签中的java脚本

python - 如何使用scrapy在抓取过程中更改div标签中的style属性值?