首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从当前屏幕分辨率动态分配Puppeteer大小?

如何从当前屏幕分辨率动态分配Puppeteer大小?
EN

Stack Overflow用户
提问于 2022-06-12 06:17:14
回答 2查看 159关注 0票数 0

我在一个已经打开的、完全可见的浏览器(无头浏览器)中使用Puppeteer自动执行一些页面操作。目前,我手动设置视图端口如下:

代码语言:javascript
运行
复制
const page = await browser.newPage();
await page.setViewport({width: W, height: H});

我必须根据实际的屏幕分辨率和系统范围的缩放因子手动设置WH。这使得脚本变得非常脆弱和不可移植。

我想让新的页面总是打开的最大可能可见的视口,而不必手动指定是什么。我尝试了其他一些建议的解决方案,比如将viewport设置为null,但我还没有为我的具体用例找到一个可行的解决方案。任何帮助都将不胜感激。谢谢!

EN

回答 2

Stack Overflow用户

发布于 2022-06-13 09:20:48

如果您想在已启动的浏览器中持久地设置WH,则需要将defaultViewport: null--window-size=${W},${H}启动arg一起设置。它在browser-level上设置窗口大小和视图,而不是在page-level上设置窗口大小和视图(随着每个新选项卡的变化)。

像这样,所有新打开的选项卡都将共享相同的窗口大小和视图端口。

代码语言:javascript
运行
复制
const browser = await puppeteer.launch({
    defaultViewport: null,
    args: [`--window-size=${W},${H}`]
})
票数 1
EN

Stack Overflow用户

发布于 2022-10-05 13:52:44

如果您可以从系统规范中检索屏幕分辨率,则可以从其中正确设置视口大小。

尽管您可能无法直接从javascript获得这些信息。

如果您可以从一个脚本(参见编辑)获得这个信息,您可以尝试以下方法从javascript执行该脚本,并在您的程序中检索该信息,以便设置您的视口尺寸。

代码语言:javascript
运行
复制
const {spawn} = require("child_process");

async function getSomeDataFromAPowerShellScript() {
    const child = spawn("powershell.exe", ["./PATH/MyPowerShellScript.ps1"]); // spawn a powershell terminal as a child process of main program and run the provided script in it 
    
    return await new Promise(resolve => {
        child.stdout.on("data", (data) => { // trigger when data is send into the child terminal
            console.log(data);
            resolve(data);
        };
    });

}

getSomeDataFromAPowerShellScript()的调用将作为string返回powershell终端中的第一个输出数据。

如果您想要检索更多的信息--,而不仅仅是powershell终端中的第一个输出--您可以使用以下方法:

代码语言:javascript
运行
复制
async function getSomeDataFromAPowerShellScript() {
    const child = spawn("powershell.exe", ["./PATH/MyPowerShellScript.ps1"]); // spawn a powershell terminal as a child process of main program and run the provided script in it
    let result = []; 

    return await new Promise(resolve => {
        child.stdout.on("data", (data) => { // trigger when data is send into the child terminal
            console.log(data);
            result.push(data);
        };

        child.on("exit", () => { // trigger when the child process exit after execution
            resolve(result);
        });
    });

}

编辑:

您可以使用本N回答中的这个powershell脚本How to get the current screen resolution on windows via command line?获得主屏幕的当前分辨率:

PowerShell-script.ps1

代码语言:javascript
运行
复制
Add-Type @"
using System;
using System.Runtime.InteropServices;
public class PInvoke {
    [DllImport("user32.dll")] public static extern IntPtr GetDC(IntPtr hwnd);
    [DllImport("gdi32.dll")] public static extern int GetDeviceCaps(IntPtr hdc, int nIndex);
}
"@
$hdc = [PInvoke]::GetDC([IntPtr]::Zero)
[PInvoke]::GetDeviceCaps($hdc, 118) # width
[PInvoke]::GetDeviceCaps($hdc, 117) # height

原始解释

它输出两行:首先是水平分辨率,然后是垂直分辨率。

要运行它,请将其保存到一个文件(例如screenres.ps1)中,并使用PowerShell启动它:

powershell -ExecutionPolicy Bypass .\screenres.ps1

将这个答案与theDavidBarton答案结合使用,可以达到您所要求的目的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72589897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档