【问题标题】:Puppeteer & browserWSEndpoint: can't upload files dynamicallyPuppeteer & browserWSEndpoint:无法动态上传文件
【发布时间】:2018-01-15 17:36:21
【问题描述】:

我正在尝试 puppeteer 和 browserless/chrome (https://hub.docker.com/r/browserless/chrome) 来测试一些自动化脚本。我目前只是在本地运行一个无浏览器/chrome 实例,使用 browserWSEndpoint 将 puppeteer 连接到它。

都在本地运行,都在同一台机器上。

除了文件上传代码之外,几乎所有东西都可以正常工作。 如果没有无浏览器连接(仅启动 puppeteer 和 chromium 实例),代码可以毫无问题地上传图像,但是,当将其中继到 websocket 时,即使我提供完整路径,它显然也找不到文件。

这是我正在使用的代码:

const browser = await puppeteer.connect({
    browserWSEndpoint: 'ws://localhost:32769',
    headless: true
})
const page = await browser.newPage();
await page.goto('http://localhost:8080', {waitUntil: 'networkidle2'});

// Do some things

let testUpload = async () => {
    const upload = await page.$("input");
    await upload.uploadFile('test.jpg');
    await page.screenshot({path: 'test_s_'+Date.now()+'.png'});
}

// Do more things

我 100% 确定 DOM 存在于那个时候,并且该文件存在于同一个文件夹中。

任何指向正确的方向都是非常有帮助的。

干杯!

【问题讨论】:

    标签: javascript web-services headless-browser puppeteer google-chrome-headless


    【解决方案1】:

    在您遇到问题之前它会运行多远? 它是否到达第一个“//一些东西”位? 我过去在使用 'networkidle2' 时遇到过一些麻烦,从 1.0.0 开始,它看起来好像已被删除

    【讨论】:

    • 在我尝试通过网络服务上传图像之前,我并没有真正遇到此设置的问题。经过几次测试,networkidle 标签是唯一一个真正适用于我的标签。
    • 还是没有解决问题,现在引入networkidle,而不是networkidle2。我们可以做些什么来动态地将本地文件上传到网络上。如果我在本地系统中有 100 个文件,那么需要遵循什么语法才能将它们全部上传,或者我必须为每个文件运行一个循环,从而使代码更加复杂。
    • 另外我对此非常陌生,我只是尝试从 JS 或 Gulp 等中使用这种语法 => /directory/*.jpg,并且找不到说 /directory/*.jpg 的错误。那么在这种情况下,应该怎么做呢?通常,所有语法都在 API 中具有此功能。
    猜你喜欢
    • 1970-01-01
    • 2020-04-18
    • 2020-07-03
    • 2012-10-18
    • 1970-01-01
    • 2020-12-08
    • 1970-01-01
    • 1970-01-01
    • 2013-09-27
    相关资源
    最近更新 更多