【问题标题】:How can you click on the download button on a PDF page with Puppeteer? [duplicate]如何使用 Puppeteer 点击 PDF 页面上的下载按钮? [复制]
【发布时间】:2021-12-08 14:37:27
【问题描述】:

我在浏览器中的 PDF 页面上,我正在尝试单击右上角的下载按钮。为了清楚起见,添加了这张图片。我尝试右键单击按钮,同时获取 CSS 选择器和 XPath,但在我的代码中,它没有显示为元素。我做错了什么?

这是我的参考代码。

page.goto(url);
page.click([link that opens up new tab]);
const [tab1, tab2, tab3] = await browser.pages();
await tab3.click("#download");

【问题讨论】:

    标签: javascript web-scraping puppeteer webautomation


    【解决方案1】:

    您可以使用这个非常简单的代码:

    from urllib import request
    
    url = 'https://dagrs.berkeley.edu/sites/default/files/2020-01/sample.pdf'
    request.urlretrieve(url, 'sample.pdf')
    

    【讨论】:

    • 这在 javascript 中有效吗?我找到了一个有请求的 urllib,但除非我读错了文档,否则我认为它不会做同样的事情。
    • 尝试使用此代码也许会奏效:await page.pdf({ path: 'path/to/save/pdf', format: 'A4' });
    【解决方案2】:

    我设法通过使用此处发布的第二个解决方案解决了我的问题:How to download a pdf that opens in a new tab in puppeteer?。基本上,使用 puppeteer extra,我改变了单击链接以手动触发下载的行为。

    puppeteer.use(require('puppeteer-extra-plugin-user-preferences')({
        headless: false, 
        timeout: 30000, 
        ignoreHTTPSErrors: true, 
        userPrefs: {
            download: {
                prompt_for_download: false, 
                open_pdf_in_system_reader: true
            }, 
            plugins: {
                always_open_pdf_externally: true
            }
        } 
    }));
    let browser = await puppeteer.launch();
    let page = await browser.newPage();
    ...
    await page._client.send('Page.setDownloadBehavior', {behavior: 'allow', downloadPath: './'});
    

    感谢您的帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-03
      • 2013-05-15
      • 2019-08-06
      • 2013-02-16
      • 1970-01-01
      • 2021-04-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多