我正在尝试使用 puppeteer( headless Chrome)模拟旋转的视口(viewport)。我的意思是我希望输出呈现旋转一定量(通常为 90 度)。

我目前使用的代码是:

const puppeteer = require('puppeteer');
var myExpressRoute = function (req, res, next) {
    (async () => {
        const browser = await puppeteer.launch();
        const page = await browser.newPage();
        page.setViewport({width: 500, height: 350});
        await page.goto('https://example.com');
        var screenshotBuffer = await page.screenshot();
        res.header('Content-Type', 'image/png');
        res.send(screenshotBuffer);
        await browser.close();
    })();
};

生成的截图是:

google-chrome-devtools - puppeteer 中的旋转视口(viewport)-LMLPHP

但我希望它像这样生成:

google-chrome-devtools - puppeteer 中的旋转视口(viewport)-LMLPHP

是的,可以使用另一个库来旋转 puppeteer 的输出,但是有没有办法在 puppeteer 中本地执行此操作,以避免必须执行单独的旋转?

否则,在发送到 screenshotBuffer 之前通过旋转操作传递 res 的最佳工具是什么(不需要保存到图像文件并旋转该图像文件)?

最佳答案

您可以在截屏前使用 rotate() CSS 函数和 page.evaluate() 一起旋转屏幕:

原始截图:

/**
 * Original Screenshot
 */

await page.setViewport({
  width: 500,
  height: 350,
});

await page.screenshot({
  path: 'original-screenshot.png',
});

旋转截图:

/**
 * Rotated Screenshot
 */

await page.setViewport({
  width: 350,
  height: 500,
});

await page.evaluate(() => {
  document.body.style.transform = 'rotate(-90deg)';
});

await page.screenshot({
  path: 'rotated-screenshot.png',
});

关于google-chrome-devtools - puppeteer 中的旋转视口(viewport),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47714156/

10-16 19:00