Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: SCM en 18 Enero 2015, 20:58 pm



Título: [C# Duda] Como interactuar con una página web
Publicado por: SCM en 18 Enero 2015, 20:58 pm
Hola buenas, tenía una duda que no sé exactamente si es algo sencillo de hacer o por el contrario bastante complicado, agradecería si me echárais una mano porque no sé muy bien por donde comenzar haciendo esto con C#.

La idea es que, por ejemplo, yo tenga abierto el navegador Chrome en el escritorio, y abriendo un programa (da lo mismo si es con la interfaz de la consola o con un GUI mientras funcionara..) interactue con Chrome, es decir:
-Abro Chrome y me conecto a la página de google.com
-Un programa en C# interactua con el navegador y hace que busque X cosa en google

Se puede hacer creando tu mismo un navegador en C#, pero eso no me interesa... porque no me interesa crear un navegador entero, me gustaría que a poder ser utilizase Chrome por ejemplo.
También se podría hacer mediante sockets y peticiones http, pero eso no interactuaría con el navegador, ocurriría solamente en el programa, y por lo tanto no podría ver en tiempo real lo que está ocurriendo.

Gracias, un saludo!


Título: Re: [C# Duda] Como interactuar con una página web
Publicado por: Eleкtro en 18 Enero 2015, 22:58 pm
Se puede hacer creando tu mismo un navegador en C#, pero eso no me interesa... porque no me interesa crear un navegador entero, me gustaría que a poder ser utilizase Chrome por ejemplo.

Quizás haya herramientas que te ahorrarían el 90% de todo ese esfuerzo de elaboración manual para automatizar de forma "interactiva" un navegador externo, como por ejemplo Selenium, pero nunca lo he usado en .Net, y por los ejemplos que he visto PARECE ser que con Selenium habría que hookear/inyectar el proceso de Chrome, no estoy seguro, algo leí sobre el tema hace tiempo, pero parece requerir tela de elaboración también.

Para este tipo de tareas yo he utilizado las classes de Windows Automation (con Firefox), obviamente primero se requiere hacerle bastantes análisis (Spy/Ing. Inversa) al poceso para descubrir el nombre de las classes, el nombre de sus funciones, los handles de las ventanas y los controles ...identificar las barras de navegaciónd le navegador y el resto de sus componentes, y etc, todo lo que sea necesario para automatizarlo, puedes valerte de Winspy++, SpyStudio, o las herramientas de Microsoft UI Automation de la SDK de Windows para conocer los detalles necesarios del exe.
http://msdn.microsoft.com/en-us/library/System.Windows.Automation(v=vs.110).aspx (http://msdn.microsoft.com/en-us/library/System.Windows.Automation(v=vs.110).aspx)
En resumen, deberías leer sobre técnicas de IPC (InterProcess comunication) para conocer otras alternativas también.

Creo que deberías plantearte de nuevo la pregunta y no complicarte de esa manera, puedes implementar un navegador con funcionalidades básicas de forma sencilla y obtener mayor control, puedes utilizar un WebBrowser Control (IE), o usar la libreria de GeckoFX (Firefox), la librería de WebKit (Chrome), o la librería de pago de EO WebBrowser (Chrome), al menos esos son los que caben a destacar en mi opinión, y entre los 4 yo prefiero el navegador de EO por ser el más completo y compatible (flash, scripts, etc), sin duda el mejor de los 4 para evitar quebraderos de cabeza.

De todas formas te muestro ejemplos aleatorios de la utilización de Windows Automation para Chrome, en C#:
http://stackoverflow.com/questions/26381515/get-url-from-chrome-to-c-sharp-not-working
http://stackoverflow.com/questions/18897070/getting-the-current-tabs-url-from-google-chrome-using-c-sharp

Saludos


Título: Re: [C# Duda] Como interactuar con una página web
Publicado por: SCM en 18 Enero 2015, 23:41 pm
Gracias por la respuesta!! Después de leer lo que comentas, lo cierto es que parece verdaderamente complicado para simplemente automatizar un par de cosas, así que si que sale a cuenta crear un webBrowser con WebKit, por ejemplo.

Aunque de todos modos veo bastante útil eso que has colocado sobre Windows.Automation, y si no me equivoco tras haber leído algunos artículos en este foro puede ser utilizada esa misma librería para automatizar algo en un videojuego por ejemplo, no?
Por ejemplo, algo bastante básico, automatizar la compra de x armas en Counter Strike, asociado a diferentes atajos de teclado. O igual me estoy liando y no se usa esa librería para ese tipo de fines.

De todos modos la duda está resuelta, gracias!


Título: Re: [C# Duda] Como interactuar con una página web
Publicado por: Eleкtro en 19 Enero 2015, 07:30 am
Gracias por la respuesta!! Después de leer lo que comentas, lo cierto es que parece verdaderamente complicado para simplemente automatizar un par de cosas, así que si que sale a cuenta crear un webBrowser con WebKit, por ejemplo.

Quizás simplemente cueste demasiado por falta de información o herramientas para esa tarea específica en este lenguaje, por poner un ejemplo comparativo, en Ruby con la gema/librería Watir WebDriver (que se basa en Selenium) es cuestión de escribir un par de lineas para conseguir abrir un navegador y navegar a "X" página de forma "interactiva" (visualmente quiero decir), en python lo mismo con Mechanize (aunque si nor ecuerdo mal no era "interactivo"), pero en .Net, y por lo poco que sé de este tema de automatizar una aplicación externa, Windows Automation parece ser la opción más viable, aunque resulta algo complejo de utilizar.


Citar
AWindows.Automation, y si no me equivoco tras haber leído algunos artículos en este foro puede ser utilizada esa misma librería para automatizar algo en un videojuego por ejemplo, no?
Por ejemplo, algo bastante básico, automatizar la compra de x armas en Counter Strike, asociado a diferentes atajos de teclado. O igual me estoy liando y no se usa esa librería para ese tipo de fines

No, Windows Automation no está orientado en ese aspecto ni se utiliza para esos fines (ni sabría decirte cómo hacerlo), una cosa es automatizar las funcionalidades de un Soft, y otra es leer/escribir los offsets de un proceso/juego.

De todas formas en el foro de MSDN puedes plantear y resolver dudas al respecto de UI Automation:
https://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/home?forum=windowsaccessibilityandautomation

Si la idea es simular atajos del teclado entonces puedes hacer simplemente eso, registrar hotkeys globales en el sistema y utilizarlas, es una tarea mucho más sencilla.
(o en el caso del Counter-Strike, simplemente puedes editar el archivo de configuración para añadir combinaciones de teclas para una compra automática, eso ya sería lo más sencillo de todo)

Otra alternativa de automatización de software sería crear Macros (Grabar y reproducir movimientos del mouse y pulsaciones del teclado, entre otras cosas), para ello puedes utilizar aplicaciones de terceros (ej: JitBit Macro Recorder) o hacerlo tu mismo utilizando las funciones de la API de Windows ( FindWindowEx + EnumWindows + OtrasFunciones + SendInput (o MouseSend + Keybd_Event) ).
http://msdn.microsoft.com/en-us/library/windows/desktop/ms646310%28v=vs.85%29.aspx

Aquí un ejemplo básico:
http://msdn.microsoft.com/en-us/library/ms171548%28v=vs.110%29.aspx

Saludos