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
相关产品推荐
相关产品推荐

