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

如何在Puppeteer中点击含指定文本元素并读取剪贴板内容?

问题分析与解决方案

核心问题

你的代码存在几个关键问题,导致无法读取剪贴板内容:

  • 点击目标错误:你点击的是.group元素,但实际触发复制逻辑的应该是包含“Copy Address”的.label_wrapper元素,点击父元素.group可能没触发绑定的复制事件。
  • 剪贴板读取的权限与时机:navigator.clipboard.readText()需要页面拥有剪贴板读写权限,且复制操作可能是异步完成的,点击后立即读取会导致获取不到内容。
  • 文本判断逻辑冗余:可以直接定位包含目标文本的元素,不用遍历所有.group再逐一判断。

修复方案

方案一:正确触发复制并读取剪贴板

修正点击目标,添加权限请求与等待逻辑,确保复制完成后再读取剪贴板:

async function saveCopiedText(page) {
    // 请求剪贴板读写权限
    await page.setPermission('clipboard-read', 'granted');
    await page.setPermission('clipboard-write', 'granted');

    // 直接定位包含"Copy Address"的触发元素
    const copyButtons = await page.$$('.label_wrapper:has(.label:text("Copy Address"))');

    for (const button of copyButtons) {
        await button.click();
        // 等待复制操作完成(可根据页面实际情况调整等待时间)
        await page.waitForTimeout(500);

        const copiedText = await page.evaluate(async () => {
            try {
                return await navigator.clipboard.readText();
            } catch (err) {
                console.error('读取剪贴板失败:', err);
                return null;
            }
        });

        if (copiedText) {
            console.log(copiedText);
        }
    }
}

方案二:直接获取地址文本(无需验证复制功能时推荐)

如果只是需要获取地址值,没必要走剪贴板流程,直接读取.address元素的文本更高效可靠:

async function saveCopiedText(page) {
    const targetGroups = await page.$$('.group:has(.label:text("Copy Address"))');

    for (const group of targetGroups) {
        const address = await group.$eval('.address', el => el.textContent.trim());
        console.log(address);
    }
}

额外说明

如果页面的复制逻辑是基于document.execCommand('copy')实现的,navigator.clipboard.readText()可能无法读取到内容,此时可以在触发复制后直接获取地址元素的文本:

const copiedText = await button.evaluate(el => {
    const addressEl = el.closest('.group').querySelector('.address');
    return addressEl.textContent.trim();
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 17:53:24