C# - 在窗口锁定时截取浏览器屏幕截图 (windows.forms)

问题描述 投票:0回答:1

我正在windows.forms中制作一个程序,它控制浏览器并经常对浏览器进行截图(以检查浏览器在不同时间的状态)。然而,我的上级改变了主意,程序现在必须在锁定的电脑上运行(Windows,使用任务调度程序)。我已经为其他几个设备解决了这个问题,但我无法弄清楚浏览器的工作方式。

我正在尝试使用 Selenium 库和这段代码:

new DriverManager().SetUpDriver(new ChromeConfig());
var options = new ChromeOptions();
options.AddArgument("--disable-gpu");
options.AddArgument("disable-software-rasterizer");
var driver = new ChromeDriver(options);
driver.Navigate().GoToUrl(url);

...

// Capture a screenshot of the web page
Screenshot screenshot = ((ITakesScreenshot)driver).GetScreenshot();
// Convert the screenshot to a Bitmap
Bitmap bmp = new Bitmap(new MemoryStream(screenshot.AsByteArray));

但是,当电脑被锁定时,似乎无法截图(或者浏览器本身可能无法启动)。我尝试了“--headless”选项,但由于 CORS 违规而被阻止。我也尝试过 PuppeteerSharp,但被 DRM 阻止(我在该公司工作,我并不想做任何非法的事情),尝试截图如下:

 Bitmap screenshot = new Bitmap(s.Bounds.Width, s.Bounds.Height, PixelFormat.Format32bppRgb);
 for (int i = 0; i < 2; i++)
 {
     using (Graphics memoryGraphics = Graphics.FromImage(screenshot))
     {

         memoryGraphics.CopyFromScreen(s.Bounds.X, s.Bounds.Y, 0, 0, s.Bounds.Size, CopyPixelOperation.SourceCopy);
         return screenshot;
     } 
 }

但如果我理解正确的话,当电脑被锁定时,屏幕(如本代码中使用的)不存在。

任何人都可以帮助我或给我一些关于如何实现这一目标的建议吗?

c# selenium-webdriver browser
1个回答
0
投票

当您锁定计算机时,Windows 会禁用 GPU 渲染,这会限制某些程序的功能,例如 Selenium 或在我的例子中的 SikuliX(即图像自动化)。这个问题绝对没有办法解决

在我的 VM 中,我有以下 .bat 文件,用于保持 VM 桌面渲染打开:

@echo off
for /f "tokens=1,2,3 delims= " %%i in ('query session ^| findstr "Active"') do set SessionId=%%k
Tscon %SessionId% /Dest:console
© www.soinside.com 2019 - 2024. All rights reserved.