木偶和动态添加的iFrame(元素)

时间:2020-02-24 12:05:28

标签: javascript protractor puppeteer

我们有一个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';
    });

上面只有一帧(主框架/窗口)。

尝试了

    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 为空

我们正在与量角器进行合作,希望转移到Puppeteers,但是如果没有解决方案,则必须坚持使用量角器(它还有其他问题)

2 个答案:

答案 0 :(得分:1)

当前,不支持out-of-process iframes (OOPIFs)。为了能够与他们合作,您需要使用--disable-features=site-per-process启动Chromium:

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

您可以跟踪人偶的问题/支持here

答案 1 :(得分:0)

我有一个类似的问题,一个动态调用的 iframe,所以 src=(unknown) 带有一个 JS

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

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