javascript - 使用 puppeteer browserWSEndpoint 上传文件

标签 javascript node.js puppeteer google-chrome-headless

我正在尝试使用 puppeteer 和 browserWSEndpoint 上传文件,我收到的错误消息是 “未捕获( promise )错误:文件选择器处理不适用于同一页面的多个连接”。 这是我的代码:

  const puppeteer = require('puppeteer');

  async function getTest() {
    const browser = await puppeteer.connect({
      browserWSEndpoint: 'wss://chrome.browserless.io'
    });
    const page = (await browser.pages())[0];
    await page.goto('https://someWebSite');

    //DO STUFF

    console.log("before upload"); //code runs until here

    const [fileChooser] = await Promise.all([page.waitForFileChooser(),page.click('#uploadTrigger'),]); 
    await fileChooser.accept(['C:\\myProgram\\pic.jpg']);
    await page.click('#edit-submit');  
    }
    getTest().then(console.log);

我必须提到,如果我不使用 browserWSEndpoint,而是在开始时使用此代码,则一切正常。

const browser = await puppeteer.launch({headless: false, defaultViewport:null});

老实说,我对 browserWSEndpoint 很迷茫,我使用了这篇文章 How to run Puppeteer code in any web browser? 中的信息。 这让我来到 browserless.io,复制了代码,它就可以工作了。

现在这是我的精确问题,我的错误表明不适用于同一页面的多个连接。我究竟如何与多个连接进行连接?也许我可以解决这个问题,然后我可以使用 const [fileChooser]。 我的主要问题是我需要使用无浏览器上传文件

其他人似乎也有同样的问题,根据https://github.com/GoogleChrome/puppeteer/issues/4783 ,但如果我想使用无浏览器,则不能选择使用 chromuim

最佳答案

如果您是连接到该浏览器的唯一客户端,则您必须连接到不支持 fileChooser 的浏览器。您应该连接到 Chromium 77.0.3844.0 (r674921) 或更高版本。

关于javascript - 使用 puppeteer browserWSEndpoint 上传文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58940836/

相关文章:

javascript - 什么需要 ('module' )(参数);意思是?

javascript - 使用 Puppeteer 打开本地 HTML 文件

javascript - 输入框提交范围数字时出现错误

javascript - 使用对 Canvas 的外部引用渲染 SVG

javascript - 数组如何与关系运算符(如小于和大于)交互?

Node.js message.split 返回未定义

javascript - 等待 Angular2 在属性更改后呈现

node.js - 无法使用 mongoose 在 mongodb 中持久化对象数组

node.js - 如何让 puppeteer 在 Google Cloud Run/Cloud Build 中工作?

javascript - JavaScript 中 &= 的含义是什么