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

Puppeteer控制Chrome在DocuSign平台文件上传失败求助

解决Puppeteer在DocuSign平台文件上传失败的问题

针对你遇到的Puppeteer上传文件到DocuSign被拒绝的问题,以下是几个经过验证的解决方案:

1. 调整浏览器启动参数,规避平台检测

DocuSign会识别Puppeteer默认的自动化特征,你可以在launch配置中添加参数模拟真实浏览器环境:

const browser = await puppeteer.launch({
    executablePath: '[path to chrome]',
    ignoreDefaultArgs: ['--disable-extensions', '--enable-automation'], // 移除自动化标识参数
    args: [
        '--no-sandbox',
        '--disable-setuid-sandbox',
        '--disable-blink-features=AutomationControlled', // 核心:禁用浏览器自动化检测
        '--start-maximized', // 最大化窗口,贴近手动操作行为
        '--user-data-dir=/path/to/your/chrome/profile' // 复用本地Chrome用户配置,包含Cookie、插件等真实环境信息
    ],
    headless: false
});

注意:--user-data-dir需替换为你本地Chrome的用户数据路径,Windows一般为C:\Users\[你的用户名]\AppData\Local\Google\Chrome\User Data,Mac为~/Library/Application Support/Google/Chrome。

2. 修正User-Agent设置错误

你当前的User-Agent末尾附带了无效的WAIT_UNTIL=load字段,且缺少await导致设置不及时,修正为:

await page.setUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36");

3. 优化文件上传的执行时机

上传组件可见不代表内部逻辑完全就绪,可增加等待步骤模拟真实交互流程:

await page.waitForSelector('input[name=document].signing-input-file',{visible: true, timeout: 30000});
// 额外等待1秒确保组件初始化完成
await page.waitForTimeout(1000);
const inputUploadHandletemp = await page.$('input[name=document].signing-input-file');
// 先触发焦点事件,模拟手动点击交互
await inputUploadHandletemp.focus();
await inputUploadHandletemp.uploadFile('[path to file on the server]');
// 等待上传加载状态结束(需替换为页面实际的加载元素选择器)
await page.waitForSelector('.upload-loading-spinner', {hidden: true, timeout: 60000});

4. 注入脚本隐藏自动化特征

在页面加载前注入脚本,修改浏览器的自动化标识属性:

await page.evaluateOnNewDocument(() => {
    Object.defineProperty(navigator, 'webdriver', {
        get: () => undefined,
    });
    // 模拟真实浏览器的插件数量
    Object.defineProperty(navigator, 'plugins', {
        get: () => Array.from({length: 5}),
    });
});

5. 验证文件路径与权限

确保服务器上的文件路径为绝对路径,且Puppeteer运行进程拥有文件读取权限:

const fs = require('fs');
const filePath = '[path to file on the server]';
if (!fs.existsSync(filePath)) {
    console.error('文件不存在:', filePath);
    return;
}
// 后续执行上传操作

按上述步骤调整后,可让Puppeteer的操作环境更贴近真实手动操作,规避DocuSign的检测机制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 23:07:35