Я хочу программно запустить браузер с URL, дождаться его завершения, затем закрыть браузер - PullRequest
1 голос
/ 11 марта 2012

Я создал HTML-страницу 5, которая обеспечивает важные функции на стороне сервера. К сожалению, он должен быть запущен в браузере Html 5 (Chrome, IE9 или Firefox) с холстом для получения нужных мне результатов. Он полностью автономен, принимает необходимые параметры через URL-адрес и готов к закрытию, когда событие OnLoad готово к отправке. Пока все хорошо.

Следующий процесс должен быть автоматизирован (без участия глаз и взаимодействия) и запускаться из веб-службы (а не из браузера). В идеале я не хочу тратить лишние циклы на занятое ожидание или задерживать результат, ожидая длительные периоды времени, просто надеясь, что процесс завершится. Мне нужно:

  1. Откройте браузер (желательно Chrome) с URL, используя C #.
  2. Подождите, пока страница полностью не загрузится, в идеале - получение какого-либо обратного вызова.
  3. Закройте страницу браузера, когда закончите, снова с помощью C #.

Мы пытались использовать IE9. Есть поддержка C # для запуска IE9, подождите, пока не занято, и изящно закройте браузер; тем не менее, страница загружает ресурсы асинхронно (способа обойти это невозможно), и поэтому мы получаем сигнал о том, что она больше не занята во время загрузки ресурса, а не после завершения страницы. Добавление занятого ожидания потребует значительных циклов ЦП на стороне сервера.

Простой вызов Create Process был бы хорош, но работал бы только в том случае, если бы браузер мог закрыть себя с помощью некоторого html - но благодаря мерам безопасности в браузерах я не могу найти надежный способ использования html-команд для закрытия браузер, который был запущен из командной строки (я видел, что вы можете закрыть вкладки, созданные с уже открытой страницы - только Firefox, но это не помогает).

Кто-нибудь знает, как мне достичь этой цели? Опять же - нет никакого участия человека в каком-либо процессе, никакие человеческие глаза никогда не увидят страницу и не будут с ней взаимодействовать. Страница запускается только на сервере и никогда не будет развернута на клиентском компьютере.

Ответы [ 2 ]

1 голос
/ 11 марта 2012

Я бы предложил использовать элемент управления WebBrowser для загрузки HTML. Как только вы вернете данные, используйте ObjectForScripting для вызова метода c #, чтобы уведомить о завершении.

См. http://www.codeproject.com/Tips/130267/Call-a-C-Method-From-JavaScript-Hosted-in-a-WebBro

Вам даже не нужно показывать веб-браузер.

Дайте мне знать, если у вас есть какие-либо вопросы. Надеюсь, это поможет!

0 голосов
/ 11 марта 2012

Автоматизация браузера - вот что делает Selenium .Я думаю, что это хорошо подойдет для этой задачи, и есть хорошая поддержка C #.Он даже может запускать браузер на удаленной машине, используя сервер Selenium RC.

...