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

跨平台Chrome浏览器自动化复制图片到剪贴板问题

无头Chrome自动化测试:图片剪贴板写入解决方案

一、自动化授予剪贴板权限(绕过手动授权)

直接通过Chrome启动参数预授予剪贴板写入权限,无需手动操作,兼容Ubuntu/Windows环境:
启动时添加以下关键参数:

  • --permissions-policy=clipboard-write=*:全局允许剪贴板写入权限
  • --headless=new:使用新版无头模式(旧版对剪贴板API支持存在缺陷)

代码示例(Playwright)

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(
        headless=True,
        args=[
            "--permissions-policy=clipboard-write=*",
            "--headless=new"
        ]
    )
    page = browser.new_page()
    # 将PNG写入剪贴板
    page.evaluate("""async (imgUrl) => {
        const blob = await fetch(imgUrl).then(res => res.blob());
        const clipboardItem = new ClipboardItem({"image/png": blob});
        await navigator.clipboard.write([clipboardItem]);
    }""", "https://example.com/test.png")
    
    # 验证剪贴板写入结果(示例)
    paste_check = page.evaluate("""async () => {
        const items = await navigator.clipboard.read();
        for (const item of items) {
            if (item.types.includes("image/png")) return "图片已成功写入剪贴板";
        }
        return "剪贴板无目标图片";
    }""")
    print(paste_check)
    
    browser.close()

二、绕过CSP实现DOM容器复制

如果临时DOM容器方案触发CSP内联脚本错误,可通过以下两种方式解决:

1. 注入外部脚本替代内联代码

将复制逻辑写入独立JS文件,通过自动化工具注入页面,完全规避内联脚本触发的CSP限制:

外部脚本(copy-image.js)

async function copyImageToClipboard(imgUrl) {
    const img = new Image();
    img.crossOrigin = "anonymous";
    img.onload = async () => {
        const canvas = document.createElement("canvas");
        canvas.width = img.width;
        canvas.height = img.height;
        const ctx = canvas.getContext("2d");
        ctx.drawImage(img, 0, 0);
        const blob = await new Promise(resolve => canvas.toBlob(resolve, "image/png"));
        const clipboardItem = new ClipboardItem({"image/png": blob});
        await navigator.clipboard.write([clipboardItem]);
    };
    img.src = imgUrl;
}

自动化注入(Selenium Java)

// 注入外部脚本文件
driver.executeScript(
    "const script = document.createElement('script'); " +
    "script.src = './copy-image.js'; " +
    "document.head.appendChild(script);"
);
// 调用复制函数写入图片
driver.executeScript("copyImageToClipboard('https://example.com/test.png');");

2. 临时修改页面CSP头

通过路由拦截修改响应头,临时允许内联脚本执行(仅建议在测试环境使用):

代码示例(Playwright)

page.route("**/*", lambda route: route.continue_(headers={
    **route.request.headers,
    "Content-Security-Policy": "script-src 'self' 'unsafe-inline'"
}))

核心注意事项

  • 必须使用新版无头模式(--headless=new),旧版无头模式不支持部分剪贴板API特性。
  • 确保图片资源允许跨域访问(设置crossOrigin="anonymous"),否则canvas会被污染,无法生成可写入剪贴板的blob对象。

内容的提问来源于stack exchange,提问作者MD Shakib Ahmed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 23:28:24