Puppeteer为什么不能与多个上传一起使用?

时间:2018-06-27 01:52:19

标签: javascript node.js chromium puppeteer headless

在我的HTML中,我有一个input元素,如下所示:

<input id="input-44" name="input44[]" type="file" multiple>

在我的JavaScript代码中(跳过一些样板),可以完成以下工作:

const elementHandle = await page.$("#input-44");
elementHandle.uploadFile("/path/to/file");
await page.click("#upload-button");

根据文档:

https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md

uploadFiles应该能够接受多个文件

当我将代码更改为:

const elementHandle = await page.$("#input-44");
const files = ["/path/to/file", "/path/to/file2"];
elementHandle.uploadFile(...files);
await page.click("#upload-button");

上传不再起作用。为什么会这样?

2 个答案:

答案 0 :(得分:1)

作为替代方案,我认为您可以循环上传路径中的每个元素

const elementHandle = await page.$("#input-44");
const files = ["/path/to/file", "/path/to/file2"];
for (let index = 0; index < files.length; index++) {
   const filePath = files[index];
   await elementHandle.uploadFile(filePath);
}
await page.click("#upload-button");

答案 1 :(得分:0)

不确定这是问题所在,但在 await 之前没有 elementHandle.uploadFile(...files);

const elementHandle = await page.$("#input-44");
const files = ["/path/to/file", "/path/to/file2"];
await elementHandle.uploadFile(...files);
await page.click("#upload-button");

不过,如果代码没有 await,我不确定为什么代码能正常工作。