2016-02-01 3 views
1

Я хочу сделать снимок экрана с веб-страницы, используя Selenium. Я заметил, что для снятия скриншота требуется открыть веб-браузер. попытался изменить webDriver.Navigate().GoToUrl("http://www.google.com"); с webDriver.Url = "http://www.google.com";, но не успел, Я даже попытался оставить его без URL-адреса, и браузер был открыт с URL-адресом 'data', который теперь я понимаю, что что-то еще делает браузер открытым.Selenium, как сделать снимок экрана, не открывая браузер?

private void button1_Click(object sender, EventArgs e) 
{ 
    var capabilitiesInternet = new 
     OpenQA.Selenium.Remote.DesiredCapabilities(); 
    capabilitiesInternet. 
     SetCapability("ignoreProtectedModeSettings", true); 
    IWebDriver webDriver = new ChromeDriver(); 
    webDriver.Navigate().GoToUrl("http://www.google.com"); 

    Screenshot screenshot = ((ITakesScreenshot)webDriver).GetScreenshot(); 
    screenshot.SaveAsFile("E:\\ScreenShot.png", 
     System.Drawing.Imaging.ImageFormat.Png); 
    webDriver.Quit(); 
} 

ответ

1

Нет - вам нужно разрешить WebDriver запрашивать страницу, иначе как она может узнать, какой снимок экрана будет создан?

Если вы пытаетесь избежать реальной, «медленный» браузер запуска и открытия окна, вы должны либо рассмотреть возможность запуска этого браузера headlessly, в соответствии с:

How do I run Selenium in Xvfb?

или проверить обезглавленный WebKit браузер PhantomJS (или, возможно, SlimerJS), и используя почти точно такой же WebDriver API, как у вас есть сейчас, попросите его, чтобы произвести скриншотов «в памяти»:

Phantomjs - take screenshot of a web page

Просто замените:

WebDriver webDriver = new ChromeDriver(); 

с:

WebDriver webDriver = new PhantomJSDriver(); 

(Очевидно, что требуется приложение для установки на месте)

Edit: Просто к сведению, что типичный вариант использования для этого является «ночной» непрерывной интеграцией/непрерывным тестированием при работе с серверами CI без головок. Однако его можно легко добавить к другим рабочим потокам, например. для визуального регрессионного тестирования и простых одноразовых проверок.

+0

Нет, не вариант, так как ваш Firefox является «настоящим» браузером для пользователей. Но если вы следуете первой ссылке, она показывает, как настроить графическую среду, чтобы рендеринг мог произойти «в памяти», и поэтому пользователь не увидит. –

+0

Чтобы быть честным, я рекомендую подход PhantomJS - это очень полезный инструмент для добавления в ваш арсенал, но помните, что он не обязательно сделает 100% таким же, как FF. –

0

Там в несколько способов, чтобы идти об этом:

  • Существует хром флаг --no-startup-window, который должен открыть хром без окна. Я попробовал, и это не сработало, однако, вы можете уйти.
  • Использование хаков - есть способ запустить хром, если вы его не увидите, он работает красиво. Просто используйте --window-position=-9999,0, обратите внимание, что у TakeScreenShot() есть некоторые странные аномалии в моем опыте - он фокусирует окно, у него заканчивается память случайным образом и т. Д. То, что я закончил, - это то, что я написал хром-расширение, которое может делать скриншоты и возвращать их обратно к селену через JS.
Смежные вопросы