Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Puppeter处理将文件上载到网站的对话框_Javascript_Node.js_Submit_Puppeteer - Fatal编程技术网

Javascript 使用Puppeter处理将文件上载到网站的对话框

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

我有一个脚本,几乎完成,除了最后一部分。最后一部分需要我选择一个PDF文件上传

我试过:

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']);