/ / Quero iniciar programaticamente um navegador com um URL, esperar que ele termine e, em seguida, fechar o navegador - c #, html5, firefox, internet-explorer-9, chromium

Quero iniciar programaticamente um navegador com um URL, esperar que ele termine e, em seguida, fechar o navegador - c #, html5, firefox, internet-explorer-9, chromium

Eu criei uma página Html 5 que fornecefuncionalidade importante do lado do servidor. Infelizmente, ele deve ser executado em um navegador Html 5 (Chrome, IE9 ou Firefox) com uma tela para produzir os resultados de que preciso. É totalmente autocontido, levando os parâmetros necessários por meio da URL, e está pronto para ser fechado quando o evento OnLoad estiver pronto para ser enviado. Até agora tudo bem.

O seguinte processo precisa ser automatizado (semolhos humanos ou interação) e será executado a partir de um serviço da web (não executado a partir de um navegador). Idealmente, eu não quero desperdiçar ciclos extras com espera ocupada, ou atrasar o resultado esperando por longos períodos de tempo simplesmente esperando que o processo termine. Eu preciso:

  1. Abra um navegador (de preferência Chrome) com uma URL, usando C #.
  2. Aguarde até que a página termine de carregar - de preferência, recebendo algum tipo de retorno de chamada.
  3. Feche a página do navegador quando terminar, novamente com C #.

Tentamos usar o IE9.Há suporte para C # para iniciar o IE9, aguarde até não estar ocupado e feche o navegador normalmente; no entanto, a página carrega recursos de forma assíncrona (não há maneira de contornar isso) e, portanto, recebemos o sinal de que ela não está mais ocupada durante o carregamento de recursos - em vez de quando a página termina. Adicionar uma espera ocupada consumiria valiosos ciclos de CPU do lado do servidor.

Uma simples chamada Create Process seria bom, massó funcionaria se o navegador pudesse se fechar com algum html - mas graças às medidas de segurança nos navegadores, não consigo encontrar uma maneira confiável de usar comandos html para fechar um navegador que foi iniciado a partir da linha de comando (eu vi você pode fechar abas geradas a partir de uma página já aberta - firefox apenas, mas isso não ajuda).

Alguém sabe como posso cumprir esse objetivo?Novamente - não há envolvimento humano em nenhum processo, nenhum olho humano verá a página ou interagirá com ela de qualquer forma. A página é executada apenas na máquina servidor e nunca será implantada em uma máquina cliente.

Respostas:

1 para resposta № 1

Eu sugeriria usar o controle WebBrowser para carregar o HTML. Depois de obter os dados de volta, use um ObjectForScripting para chamar um método c # para notificar quando terminar.

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

Você realmente não precisa nem mesmo mostrar o controle do navegador.

Deixe-me saber se você tiver alguma dúvida. Espero que ajude!


0 para resposta № 2

Automatizando o navegador - isso é o que Selênio faz. Acho que será um bom ajuste para a tarefa e há um bom suporte a C #. Ele pode até executar o navegador em uma máquina remota usando o servidor Selenium RC.