Javascript 正在尝试使用Puppeter单击iframe中的按钮

Javascript 正在尝试使用Puppeter单击iframe中的按钮,javascript,puppeteer,Javascript,Puppeteer,这是我第一次使用木偶演员进行灯光自动化。我在尝试单击iframe中的按钮时遇到问题 这是我的密码: await page.waitForSelector('iframe'); const frameElement = await page.$( 'iframe[src="https://ibx.key.com/ibxolb/login/client/index.html"]', ); const frame = await

这是我第一次使用木偶演员进行灯光自动化。我在尝试单击iframe中的按钮时遇到问题

这是我的密码:

await page.waitForSelector('iframe');
        const frameElement = await page.$(
            'iframe[src="https://ibx.key.com/ibxolb/login/client/index.html"]',
        );
        const frame = await frameElement.getFrame();
由于frameElement作为
JSHandle@node

我可以访问iframe的选择器是
src
title
。如您所见,我正在使用
src

我一直在寻找如何做到这一点,但所有的例子似乎都不适合我

我被困住了,所以如果有人有任何建议、解决方案或方向,我将不胜感激

谢谢,


Joe

如果您从
*.key.com
*.keybank.com
旁边的URL/站点访问iframe,则由于CSP指令,您无法打开iframe

打开chrome开发者控制台,如果你能看到这条消息,那是因为CSP指令不允许你访问iframe站点URL

拒绝在帧中显示“”,因为某个祖先违反了以下内容安全策略指令:“frame祖先*.key.com*.keybank.com”

如果你没有看到上面的信息,你可以这样尝试

const frame = page.frames().find(frame => frame.url() === 'https://ibx.key.com/ibxolb/login/client/index.html');

const clickLogin = await frame.click('.login-button-space')


我能够解决我的问题

首先,我得到了页面上列出的所有框架,如下所示:

var frames = (await page.frames());
然后,我在各个框架中循环寻找一个特定的标题

exports.getFrame=异步函数(frames,ssoframetTitle){ 让我们选择框架; for(设i=0;i 找到框架对象后,我从要定位的函数返回它,然后单击按钮

exports.getFrame = async function(frames, ssoFrameTitle) {
let selectedFrame;
for(let i = 0 ; i < frames.length ; ++i) {
    let frameTitle = await frames[i].title();
    if(frameTitle === ssoFrameTitle) {
        selectedFrame = frames[i];
        break;
    }
}
return selectedFrame;};