首页 > 解决方案 > 使用 puppeteer 单击 iframe 中的按钮

问题描述

尝试单击 iFrame 内的“我接受所有 cookie”按钮(弹出窗口仅显示欧盟国家/地区 IP)。你也可以在这里查看 jsfiddle.net/#&togetherjs=VgKpE0jfJF。

在此处输入图像描述

//index.js
const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch({
    headless:false,
      ignoreHTTPSErrors: true,
      slowMo: 50,
      args: ['--window-size=1440,900', '--disable-gpu', "--disable-features=IsolateOrigins,site-per-process", '--blink-settings=imagesEnabled=true']
    });
  const page = await browser.newPage();
  await page.goto('https://www.oracle.com/cloud/cost-estimator.html');

  await page.waitFor(3000)
  const frame = page.frames().find(f => f.name() === 'iframe');
  const acceptBtn = await frame.$(`a[class="call"]`);
  await acceptBtn.click();

  await page.screenshot({path: 'example.png'});

  //await browser.close();
})();

我得到的错误

UnhandledPromiseRejectionWarning: TypeError: Cannot read property '$' of undefined
    at

请帮忙。谢谢

标签: iframepuppeteer

解决方案


据我所知,这个 iframe 在 HTML 代码中没有名字,所以你可以试试它的 src (URL):

const frame = page.frames().find(f => f.url().startsWith('https://consent-pref.trustarc.com/'));

推荐阅读