Puppeteer 和动态添加的 iFrame(元素)

Puppeteer and dynamically added iFrame (element)

我们有一个 angularJs 应用程序,它会在按下按钮时弹出一个模式窗体(组件)。
这个组件加载了一个 iFrame,我似乎无法使用 Puppeteer 访问它。
已尝试使用 mainFrame.

    await page.waitFor(15000);
    const frame = page.mainFrame().childFrames().find((iframe) => {
      console.log('FRAME', iframe.name(), iframe.url());
      return iframe.name() === 'iFrameName';
    });

以上只有一帧(主要frame/window)。

已尝试

    await page.waitFor(15000);
    const frame = page.frames().find((iframe) => {
      console.log('FRAME', iframe.name(), iframe.url());
      return iframe.name() === 'iFrameName';
    });

已尝试使用 contentFrame

    await page.waitForSelector('iframe', { visible: true, timeout: 2000 });
    const elementHandle = await page.$('iframe');
    await page.waitFor(1000);
    const frame = await elementHandle.contentFrame();

通过以上,elementHandle 有值但是 frame 为 null

我们与 Protractor 合作,希望转移到 Puppeteers,但如果没有解决方案,则必须坚持使用 Protractor(它有其他问题)

目前不支持out-of-process iframes (OOPIFs)。为了能够使用它们,您需要使用 --disable-features=site-per-process:

启动 Chromium
const browser = await puppeteer.launch({
        args: ['--disable-features=site-per-process']
    });

您可以跟踪人偶操纵者的 issue/support here

我也有类似的问题,一个动态调用的iframe,让src=(unknown)跟一个JS

href="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(VARİABLES,,true,,false,))

是否可以通过在 puppeteer 中调用 js 来克隆 The 或 iframe?如果是这样你可以试试