How to catch a download with playwright?

☆樱花仙子☆ 提交于 2020-04-17 17:53:49

问题


I'm trying to download a file from a website using Playwright. The button that triggers the download does some js and then the download starts.

Clicking the button using the .click function triggers a download but it shows an error: Failed - Download error.

I've tried using the devtools protocol Page.setDownloadBehavior, but this doesn't seem to do anything.

    const playwright = require("playwright");
    const { /*chromium,*/ devices } = require("playwright");
    const iPhone = devices["iPad (gen 7) landscape"];

    (async () => {
        const my_chromium = playwright["chromium"];
        const browser = await my_chromium.launch({ headless: false });
        const context = await browser.newContext({
            viewport: iPhone.viewport,
            userAgent: iPhone.userAgent
        });
        const page = await context.newPage();
        const client = await browser.pageTarget(page).createCDPSession();
        console.log(client);
        await client.send("Page.setDownloadBehavior", {
            behavior: "allow",
            downloadPath: "C:/in"
        });
        //...and so on
        await page.click("#download-button");
        browser.close();
    })();

Full file here

There is a proposal for a better download api in Playwright, but I can't find the current API. There was a suggestion that something to do with the downloadWillBegin event would be useful, but I've no idea how to access that from Playwright.

I'm open to the suggestion that I should use Puppeteer instead, but I moved to playwright because I couldn't work out how to download a file with Pupeteer either, and the issue related to it suggested that the whole team had moved to Playwright.


回答1:


Embarassingly, I was closing the browser before the download had started.

It turns out that the download error was caused by the client section. However that means that I have no control over where the file is saved.

The download works when headless: false but not when headless: true.

If anyone has a better answer, that'd be great!



来源:https://stackoverflow.com/questions/60501133/how-to-catch-a-download-with-playwright

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!