You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Puppeteer操作frameset内按钮报错:Unsupported Frame Type

Puppeteer操作frameset内按钮报错:Unsupported Frame Type

技术栈

  • Puppeteer v21.9.0
  • Typescript v5.3.3
  • NodeJS v20.9.0
  • Chrome Browser v121.0.6167.85
  • 操作系统:Ubuntu 22.04

问题描述

尝试点击嵌套在frameset和frame内的按钮,按照Puppeteer官方文档指引操作后,抛出错误:Error: Unsupported Frame Type

示例页面结构

index.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <frameset rows="100%">
    <frame frameborder="0" />
    <frame src="test.html" frameborder="0" name="mainframe" />
  </frameset>
</html>

test.html

<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <button id="button" class="close-popup">Click Me</button>
  </body>

  <script>
    const buttonClick = document
      .getElementById("button")
      .addEventListener("click", function (clicked) {
        alert("Test");
      });
  </script>
</html>

运行的Puppeteer代码

import puppeteer from "puppeteer"
(async () => {
  try {
    console.log("test")
    const browser = await puppeteer.launch({
      headless: false
    })
    

    const page = await browser.newPage()
  
    await page.goto("http://127.0.0.1:5500/index.html")

    const mainFrame = page
      .frames()
      .find((frame) => frame.name() === "mainframe");

    if (mainFrame) {
      const closeButtonSelector = ".close-popup";
      await mainFrame.waitForSelector(closeButtonSelector, { visible: true });
      await mainFrame.click(closeButtonSelector);
      console.log("Successfully clicked the close button in the main frame.");
    } else {
      console.log("Frame not found.");
    }
  }catch(error) {
    console.log(error)
  }
})();

抛出的错误信息

Error: Unsupported frame type
    at CdpElementHandle.#clickableBox (/home/rifqi/Projects/auto-puppeteer/node_modules/puppeteer-core/src/api/ElementHandle.ts:1088:15)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async CdpElementHandle.clickablePoint (/home/rifqi/Projects/auto-puppeteer/node_modules/puppeteer-core/src/api/ElementHandle.ts:707:17)
    at async CdpElementHandle.<anonymous> (/home/rifqi/Projects/auto-puppeteer/node_modules/puppeteer-core/src/api/ElementHandle.ts:164:16)
    at async CdpElementHandle.click (/home/rifqi/Projects/auto-puppeteer/node_modules/puppeteer-core/src/api/ElementHandle.ts:748:20)
    at async CdpElementHandle.<anonymous> (/home/rifqi/Projects/auto-puppeteer/node_modules/puppeteer-core/src/api/ElementHandle.ts:167:22)
    at async CdpFrame.click (/home/rifqi/Projects/auto-puppeteer/node_modules/puppeteer-core/src/api/Frame.ts:1053:5)

问题解决(2024年2月6日更新)

此问题为Puppeteer已知Bug,能正常处理frameset的最新Puppeteer版本为v21.1.0。


内容的提问来源于stack exchange,提问作者Rifqi Pratama

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 09:33:27