Javascript 使用Puppeter处理将文件上载到网站的对话框
我有一个脚本,几乎完成,除了最后一部分。最后一部分需要我选择一个PDF文件上传 我试过:Javascript 使用Puppeter处理将文件上载到网站的对话框,javascript,node.js,submit,puppeteer,Javascript,Node.js,Submit,Puppeteer,我有一个脚本,几乎完成,除了最后一部分。最后一部分需要我选择一个PDF文件上传 我试过: inputUploadHandle = await page.$('input[type=file]'); await inputUploadHandle.uploadFile('/myfile.pdf'); 我得到一个错误: (node:20704) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'uploadFile
inputUploadHandle = await page.$('input[type=file]');
await inputUploadHandle.uploadFile('/myfile.pdf');
我得到一个错误:
(node:20704) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'uploadFile' of undefined
当我手动完成此过程时,请在结束时单击此处
我选择我的文件:
它显示它是这样上传的:
但当我也尝试使用:
const[fileChooser] = await Promise.all([
page.waitForFileChooser(),
page.click('#filingDocumentSection > div:nth-child(2) > div > div:nth-child(1) > div:nth-child(1) > div:nth-child(2) > div > ul > li > div > div.col-sm-7 > button > i'),
])
await fileChooser.accept(['/myfile.pdf']);
现在我确实看到了一些事情发生了,但我不认为该网站实际上接受了pdf文件。控制台读取没有错误,页面看起来好像在等待我做其他事情。我注意到的是,当我这样做的时候,我不能再点击你上传文件的框了。就像那个按钮失去了功能一样
看起来对话框的按钮是打开的,然后立即关闭,但我看不出该文件实际上已被接受或上载
我已经用它来查看im是否在实际页面控制台中使用了正确的查询选择器:
document.querySelectorAll('input[type=file]')[0]
返回:
<input type="file" ngf-select="" ngf-drop="" ngf-drag-over-class=
"{accept: 'dragover', reject: 'dragover-err', delay: 50}" ngf-multiple="{{filingComponent.AllowMultipleFiles}}"
ng-attr-accept="{{filingComponent.AllowedFileTypes}}"
ngf-accept="filingComponent.AllowedFileTypes"
ngf-change="UploadFiles(filingComponent, $files)"
title="File system upload" accept="application/pdf" multiple="multiple">
不知道这是否有帮助
是否有一些木偶演员在一旁使用.uploadfile或.accept使对话框选择您的文件 很久以前,我在其他公司也尝试过这样做,我不认为你做的是错的,但我认为这可能是你正在使用的木偶剧版本。我忘了哪个版本可以工作,但这里的const[fileChooser]=代码肯定可以工作 所以根据这个: 你必须降低木偶演员的等级 我所做的就是:npm ipuppeteer@2.0.0 瞧。。。我的代码起作用了 答案是:
const[fileChooser] = await Promise.all([
page.waitForFileChooser(),
page.click('#filingDocumentSection > div:nth-child(2) > div > div:nth-child(1) > div:nth-child(1) > div:nth-child(2) > div > ul > li > div > div.col-sm-7 > button > i'),
])
await fileChooser.accept(['/myfile.pdf']);
但是你必须使用木偶2.0.0
const[fileChooser] = await Promise.all([
page.waitForFileChooser(),
page.click('#filingDocumentSection > div:nth-child(2) > div > div:nth-child(1) > div:nth-child(1) > div:nth-child(2) > div > ul > li > div > div.col-sm-7 > button > i'),
])
await fileChooser.accept(['/myfile.pdf']);