How to set max viewport in Puppeteer?

前端 未结 8 920
一整个雨季
一整个雨季 2021-02-01 02:04

When I run a new page, I must specify size of the viewport using the setViewport function:

await page.setViewport({
    width: 1920,
    height: 108         


        
相关标签:
8条回答
  • 2021-02-01 02:16

    I may be very late on this. Nevertheless for others, try:

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

    Set the defaultViewport option to null as above to disable the 800x600 resolution. It takes the max resolution then.

    0 讨论(0)
  • 2021-02-01 02:17

    You can pass the --window-size flag as an argument to puppeteer.launch() to change the window size to your desired width and height.

    Then you can call the Chrome Devtools Protocol method Emulation.clearDeviceMetricsOverride to clear the overridden device metrics (including the default 800 x 600 viewport).

    This will cause the viewport to match the window size (when taking screenshots, etc).

    const browser = await puppeteer.launch({
      args: [
        '--window-size=1920,1080',
      ],
    });
    
    const page = await browser.newPage();
    
    await page._client.send('Emulation.clearDeviceMetricsOverride');
    
    await page.screenshot({
      path: 'example.png', // Image Dimensions : 1920 x 1080
    });
    

    Note: page.viewport() will still return { width: 800, height: 600 }, and the only way to reliably change the values of these properties is to use page.setViewport().

    See the complete example below:

    'use strict';
    
    const puppeteer = require('puppeteer');
    
    (async () => {
      /* ============================================================
          Prerequisite: Set Window size
      ============================================================ */
    
      const browser = await puppeteer.launch({
        args : [
          '--window-size=1920,1080',
        ],
      });
    
      const page = await browser.newPage();
    
      await page.goto('https://www.example.com/');
    
      /* ============================================================
          Case 1: Default Viewport
      ============================================================ */
    
      console.log('Case 1 - Width  :', page.viewport().width);  // Width  : 800
      console.log('Case 1 - Height :', page.viewport().height); // Height : 600
    
      await page.screenshot({
        path: 'image-1.png', // Image Dimensions : 800 x 600
      });
    
      /* ============================================================
          Case 2: Clear Overridden Device Metrics
      ============================================================ */
    
      await page._client.send('Emulation.clearDeviceMetricsOverride');
    
      console.log('Case 2 - Width  :', page.viewport().width);  // Width  : 800
      console.log('Case 2 - Height :', page.viewport().height); // Height : 600
    
      await page.screenshot({
        path: 'image-2.png', // Image Dimensions : 1920 x 1080
      });
    
      /* ============================================================
          Case 3: Manually Set Viewport
      ============================================================ */
    
      await page.setViewport({
        width: 1920,
        height: 1080,
      });
    
      console.log('Case 3 - Width  :', page.viewport().width);  // Width  : 1920
      console.log('Case 3 - Height :', page.viewport().height); // Height : 1080
    
      await page.screenshot({
        path: 'image-3.png', // Image Dimensions : 1920 x 1080
      });
    
      /* ============================================================
          Case 4: Revert Back to Default Viewport
      ============================================================ */
    
      await page.setViewport({
          width: 800,
          height: 600,
      });
    
      console.log('Case 4 - Width  :', page.viewport().width);  // Width  : 800
      console.log('Case 4 - Height :', page.viewport().height); // Height : 600
    
      await page.screenshot({
        path: 'image-4.png', // Image Dimensions : 800 x 600
      });
    
      await browser.close();
    })();
    
    0 讨论(0)
  • 2021-02-01 02:19

    As explained in this issue

    page.setViewport({ width: 0, height: 0 });
    

    makes chromium set the viewport by inferring the current screen resolution. Seems to only work with headless: false

    0 讨论(0)
  • 2021-02-01 02:23

    For me the combination of defaultViewport: null and args: ['--start-maximized'] gave me fullscreen with view fitting to screensize so:

    browser = await puppeteer.launch({
                headless: false,
                args: [
                    '--start-maximized',
                ],
                defaultViewport: null,
            }); 
    
    0 讨论(0)
  • 2021-02-01 02:34

    I had the same problem and what worked for me is this.

    const browser = await puppeteer.launch({
      headless: false,
      args: ['--window-size=1920,1080'],
      defaultViewport: null
      });
    
    0 讨论(0)
  • 2021-02-01 02:37

    It's probably worth mentioning that if you combine puppeteer.launch({defaultViewport: null}) with puppeteer.connect(), again you need to pass {defaultViewport: null}}, otherwise the viewport is adjusted back to default size. So in this case, use:

    await puppeteer.connect({browserWSEndpoint: ws, defaultViewport: null})
    
    0 讨论(0)
提交回复
热议问题