使用 Puppeteer:如何从其父元素选择器获取 iframe?

inv*_*lid 3 javascript google-chrome chromium node.js puppeteer

我想获取一个 iframe 作为框架并单击框架中的一个元素,但是 iframe 没有名称并且网站有很多框架(page.frames()返回 14)。

而且我无权编辑 html。我只能编辑 JavaScript。

我认为在这种情况下识别 iframe 的最佳方法是从其父元素。

我怎样才能用 puppeteer 做到这一点?

<div id="foo">
  <iframe>
    #document
  </iframe>
</div>
Run Code Online (Sandbox Code Playgroud)

小智 6

请注意,您还应该添加这些浏览器启动选项来运行 contentFrame 方法,否则它将返回 null:

const browser = await puppeteer.launch({
    headless: false,
    args: [
      '--disable-web-security',
      '--disable-features=IsolateOrigins,site-per-process'
    ]
});
Run Code Online (Sandbox Code Playgroud)


Tho*_*orf 5

您可以使用该elementHandle.contentFrame()函数从元素句柄返回一个框架。

来自文档的引用:

解析到引用 iframe 节点的元素句柄的内容框架,否则为 null

例子:

const elementHandle = await page.$('div#foo iframe');
const frame = await elementHandle.contentFrame();
Run Code Online (Sandbox Code Playgroud)