处理对话框以使用操纵符将文件上传到网站

问题描述 投票:3回答:1

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

我尝试过:

inputUploadHandle = await page.$('input[type=file]');
await inputUploadHandle.uploadFile('/myfile.pdf');

我得到一个错误:

(node:20704) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'uploadFile' of undefined

[当我单击此处结束时手动完成此过程时enter image description here

并且我选择我的文件:

enter image description here

它显示它是这样上传的:

enter image description here

但是当我也尝试使用时:

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文件。控制台未读取任何错误,该页面看起来像在等待我做其他事情。我注意到的是,当我以这种方式进行操作时,我无法再单击要在其中上传文件的框。就像那个按钮失去了功能。

似乎对话框的按钮已打开,然后立即关闭,但我看不到该文件实际上已被接受或上传。

我用它来查看即时消息是否在实际的页面控制台中使用了正确的查询选择器:

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">

现在在控制台的后端,我确实看到手动上传文件时调用了函数:

enter image description here

而且我看了做.UpLoadFiles()的函数:

n.DownloadDocument = function (t, i, r, u) { 
    var f = !1; 
    u !== undefined & u !== null && u === 1 && (f = !0); 
    !f && n.SelectedItem.Filing.ViewStampedDocumentsUrl ? window.open(n.SelectedItem.Filing.ViewStampedDocumentsUrl) : $.get(t.format(i, r)).success(function (n) { window.location = n.DownloadUrl }) }; 
n.UploadFiles = function (t, i) { 
    var r, u; 
    n.FileToUploadLength = 0; 
    r = i.length; 
    console.group("$scope.UploadFiles()"); 
    angular.isArray(i) && i.length > 0 && (n.SelectedItem.Filing.Id === 0 ? (
        u = i.shift(), 
        n.UploadFileChain(u, t, r, i)) : _.each(i, function (i) { 
            n.UploadFileChain(i, t, r, []) })); 
            console.groupEnd() };

不知道是否有帮助。...

人偶有没有在.uploadfile或.accept旁边使用某些东西来使对话框选择您的文件?

javascript node.js submit puppeteer
1个回答
1
投票

我很久以前曾在其他公司尝试过这样做,但我不认为您在做什么是错误的,但我认为也许它是您所使用的操纵up的版本。我忘记了哪个版本有效,但肯定const [fileChooser] = 此处的代码应该有效。

© www.soinside.com 2019 - 2024. All rights reserved.