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

Puppeteer复制功能失效,请求排查与解决

问题排查与修复

核心问题点

  • 缺少复制操作:只执行了Ctrl+A全选,但没触发Ctrl+C把内容复制到剪贴板,导致navigator.clipboard.readText()读取不到有效内容。
  • 权限上下文不匹配:创建了带剪贴板权限的浏览器上下文,但页面是直接用主浏览器实例创建的,没关联这个有权限的上下文,权限配置完全无效。
  • page.viewport()未等待异步完成:该方法返回Promise,直接解构会拿到undefined,导致点击坐标错误,可能连全选操作都没真正触发。
  • 剪贴板读取未处理异步:navigator.clipboard.readText()是异步方法,直接返回会拿到Promise对象,而非实际文本内容。

修复后的代码

const puppeteer = require('puppeteer');
const fs = require('fs');

(async () => {
    const browser = await puppeteer.launch({ headless: false });
    // 创建带剪贴板权限的浏览器上下文
    const context = await browser.createBrowserContext();
    await context.overridePermissions('', [
        'clipboard-read',
        'clipboard-write',
    ]);

    // 必须在有权限的上下文内创建页面
    const page = await context.newPage();
    await page.goto('替换为你的目标页面URL'); // 务必填写实际访问的URL

    // 等待viewport异步获取完成
    const { width, height } = await page.viewport();
    // 点击页面激活焦点,确保全选操作生效
    await page.mouse.click(width / 2, height / 2);

    // 执行全选+复制操作
    await page.keyboard.down('Control');
    await page.keyboard.press('a');
    await page.keyboard.press('c'); // 新增复制步骤
    await page.keyboard.up('Control');

    // 等待剪贴板读取异步完成
    const copiedContent = await page.evaluate(async () => {
        return await navigator.clipboard.readText();
    });

    fs.writeFileSync('code.txt', copiedContent);

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

额外注意事项

  • 把page.goto('')中的空字符串替换为你实际要访问的页面URL,否则页面为空,全选也不会有内容。
  • 如果是Mac系统,需要将代码中的Control替换为Meta(对应键盘上的Command键)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 10:42:10