拍摄IE屏幕截图会返回黑色图像

Qwe*_*rty 21 c# selenium internet-explorer webdriver selenium-webdriver

我正在构建一个控制台应用程序,它将连接到网络中的不同计算机并获取网页的浏览器屏幕截图.
使用Selenium 2.47.1设置服务器和节点.控制台应用程序在设置为selenium hub的PC中运行.
截图在firefox,chrome中很好,即来自中心计算机.
截图在远程PC中的firefox中也很好.
但是使用IE它会返回一个黑色图像.
集线器和节点计算机都运行在Windows 7 64位上,有IE11.我在两台PC上都使用64位IED驱动程序.节点计算机未锁定.

using OpenQA.Selenium;
using OpenQA.Selenium.IE;
using OpenQA.Selenium.Remote;
using OpenQA.Selenium.Support.UI;

static void Main(string[] args)
 {
   IWebDriver NewDriver = null;
   using (NewDriver = new RemoteWebDriver(new Uri("http://172.165.10.111/wd/hub"), DesiredCapabilities.InternetExplorer()))
    {
      if (NewDriver != null)
       {
         NewDriver.Navigate().GoToUrl("http://www.google.com");
         NewDriver.Manage().Window.Size = new Size(1804, 1096);
         Screenshot ss = ((ITakesScreenshot)NewDriver).GetScreenshot();
         ICapabilities capabilities = ((RemoteWebDriver)NewDriver).Capabilities;
         ss.SaveAsFile(@"C:\Path\123.png", ImageFormat.Png);
         NewDriver.Quit();
       }
    }
 }
Run Code Online (Sandbox Code Playgroud)

Ard*_*sco 11

这是因为您的屏幕已锁定或屏幕保护程序正在运行.

您需要关闭屏幕保护程序并将窗口配置为在不使用时永不锁定.要关闭屏幕保护程序:

  • 单击"开始"按钮.
  • 单击控制面板.
  • 在搜索框中,键入屏幕保护程序.
  • 单击打开或关闭屏幕保护程序.

然后修改屏幕保护程序设置.确保取消选中"继续,显示登录屏幕".

当您在控制面板中时,可能需要检查电源选项并确保机器在一段时间后也不会进入睡眠状态或断电状态.

您还需要使用VNC或远程协助来访问GUI.如果你在其中的RDP将锁定当前登录的本地用户的屏幕,并再次断开连接时将锁定屏幕.

最后不要使用64位IE驱动程序,你应该使用32位的一个.没有人运行IE的64Bit版本(即使他们有一个64位的机器).

******编辑 从可信和有信誉的来源中添加更多信息******

下面是Selenium用户论坛上帖子的链接,其中Jim Evans(编写IEDriver二进制文件的开发人员)解释了这一点:

http://selenium.10932.n7.nabble.com/IE-Screenshots-are-black-when-not-connected-via-Remote-Desktop-to-the-VM-hosting-an-IE-Node-td37004. HTML

此引用特别是关于在与RDP实例断开连接时截取屏幕截图:

这是一个已知的限制.没有已知的解决方法.抱怨微软.它们是制作PrintWindow API(在抓取屏幕捕获时使用的正确API)的行为.不管怎样,或者如果你发现一种方法可以使它工作,欢迎你提交一个补丁.

他在博客中详细解释了屏幕截图代码的工作原理:

http://jimevansmusic.blogspot.co.uk/2014/09/screenshots-sendkeys-and-sixty-four.html

特别:

IE驱动程序使用PrintWindow API函数截取屏幕截图.PrintWindow只能获取任何给定窗口的可见部分的屏幕截图,这意味着为了获得整页截图(根据WebDriver API的要求),窗口的大小必须足够大以显示整个页面而不滚动酒吧.但是,Windows不允许窗口的大小调整大于可见屏幕分辨率.当我们要求IE调整自身大小时,会在resize事件上发送WM_GETMINMAXINFO消息,以便IE可以计算窗口的大小.通过使用钩子拦截该消息并修改最大值,我们可以诱骗IE认为窗口的大小可能大于屏幕分辨率允许的大小.


小智 -1

Windows 有时会导致黑屏,因为计算机/桌面未在使用中。