none
Interacción con pagina WEB desde WindowsFormsApplication RRS feed

  • Pregunta

  • Hola una vez mas,

    Referente a este post:

    https://social.msdn.microsoft.com/Forums/es-ES/fe5f2414-06b9-41ef-b23c-d53a8f099f9e/activar-ventana-y-enviar-parmetros?forum=vbes

    Reduje el trabajo para el usuario con la aplicación pero tengo varios problemas que solucionar y creo podría mejorar aun mas la aplicación.

    A grandes rasgos eso es lo que hace:

    • Busca la ventana de la WEB a la que enviara parámetros
    • Tengo las coordenadas del textbox para ingresar el password
    • Envio el password con SendKeys
    • Envio la tecla TAB con SendKeys
    • Por coordenadas voy a la posicion del siguiente boton
    • Envio un Enter SendKeys
    • Por coordenadas me posiciono en el textobox
    • Leo un archivo de texto que esta en el Path de mi aplicacion
    • Ciclo While para enviar los datos de mi App a la WEB

     Los problemas son los siguientes:

    • La pagina web puede estar o no abierta, la puedo abrir con ProcessStart, pero la WEB siempre debe de usarse en Chrome.
    • Al usar coordenadas si la resolución de pantalla no es la misma con la que se programo la Aplicación, entonces esta no ira a los controles indicados. Se puede ajustar la resolución de pantalla desde la aplicación?
    • Si a la pagina web se le agrega o adaptan mas controles, las coordenadas no serán las mismas, y la aplicación fallaría una vez mas.
    • Para el uso de SendKeys y coordenadas uso SetCursorPosition y los eventos del Mouese y esto toma el control total de la PC.

    En su experiencia, como puedo automatizar esta tarea sin tantos modos de fallo, pienso que una solución al problema es obtener los nombres de los controles de la pagina y trabajar directamente con ellos. Pero la verdad no he encontrado como hacer esto o alguna otra sugerencia que puedan brindarme. Quizas un WEBBrowser pueda ayudarme?

    Como mencione en el post inicial la pagina con la que ínter-actuare no es de mi autoria, por lo cual no tengo acceso a los controles, textbox, botones y demás. 

    Dejo parte del codigo comentado:

            Dim var As String
            Dim strSp As String()
            Dim line As String
            Dim IdTiket As String
            Dim CurrentLine As Integer = 1
    
            Dim reader As New System.IO.StreamReader(Application.StartupPath & "\MiArchivo.txt")
            var = "1" 'Password del Login 
    
            'Dim prc = Process.GetProcessesByName("NombreVentanaWEB")
            Dim hWnd As IntPtr = FindWindow(Nothing, "NombreVentanaWEB") 'Ventana a buscar
    
            'If hWnd.ToString > 0 Then
            'SetForegroundWindow(prc(0).MainWindowHandle)'Activacion de la ventana
            Thread.Sleep(1000)
            SetCursorPos(854, 206) 'Posicion del textbox login
            mouse_event(LEFTDOWN, 0, 0, 0, 0)
            mouse_event(LEFTUP, 0, 0, 0, 0)
            Clipboard.Clear() 'limpio el portapaleles
            Clipboard.SetText(var.ToString) 'Copio el password
            SendKeys.Send("^v") 'pego password a la pagina 
            SendKeys.Send("{TAB}") 'Tab para irme al boton login
            SendKeys.Send("{ENTER}") 'Entrar abre otra pagina
            Thread.Sleep(1000)
            SetCursorPos(746, 196) 'Me muevo a esta posicion, hay tres botones voy al segundo boton
            mouse_event(LEFTDOWN, 0, 0, 0, 0)
            mouse_event(LEFTUP, 0, 0, 0, 0)
            SendKeys.Send("{ENTER}") 'Entrar abre otra pagina
    
            While Not reader.EndOfStream ' Ciclo para leer el archivo de texto
    
                line = reader.ReadLine()
                strSp = Split(line, vbTab, , vbTextCompare)
                IdTiket = strSp(0)
                Thread.Sleep(1000) 'Espero 1 segundo la pagina valida el registro a introducir
                Clipboard.Clear() 'Limpio el portapapeles
                Clipboard.SetText(IdTiket.ToString) 'Copio el registro 1
                SendKeys.Send("^v") 'Pego el registro
                SendKeys.Send("{ENTER}") 'Entrar para ingresar el registro
    
            End While
            reader.Close()
            MessageBox.Show("Proceso finalizado....!")
            'End If
    

    Bueno espero puedan ayudarme con algunas sugerencias y/o aportaciones.

    - DS


    Aprendiz de todos maestro de nadie. Saludos desde Cd. Juarez Chihuahua Mexico. DS.

    jueves, 28 de marzo de 2019 5:00

Todas las respuestas

  • Hola una vez mas,

    Referente a este post:

    https://social.msdn.microsoft.com/Forums/es-ES/fe5f2414-06b9-41ef-b23c-d53a8f099f9e/activar-ventana-y-enviar-parmetros?forum=vbes

    Reduje el trabajo para el usuario con la aplicación pero tengo varios problemas que solucionar y creo podría mejorar aun mas la aplicación.

    A grandes rasgos eso es lo que hace:

    • Busca la ventana de la WEB a la que enviara parámetros
    • Tengo las coordenadas del textbox para ingresar el password
    • Envio el password con SendKeys
    • Envio la tecla TAB con SendKeys
    • Por coordenadas voy a la posicion del siguiente boton
    • Envio un Enter SendKeys
    • Por coordenadas me posiciono en el textobox
    • Leo un archivo de texto que esta en el Path de mi aplicacion
    • Ciclo While para enviar los datos de mi App a la WEB

     Los problemas son los siguientes:

    • La pagina web puede estar o no abierta, la puedo abrir con ProcessStart, pero la WEB siempre debe de usarse en Chrome.
    • Al usar coordenadas si la resolución de pantalla no es la misma con la que se programo la Aplicación, entonces esta no ira a los controles indicados. Se puede ajustar la resolución de pantalla desde la aplicación?
    • Si a la pagina web se le agrega o adaptan mas controles, las coordenadas no serán las mismas, y la aplicación fallaría una vez mas.
    • Para el uso de SendKeys y coordenadas uso SetCursorPosition y los eventos del Mouese y esto toma el control total de la PC.

    En su experiencia, como puedo automatizar esta tarea sin tantos modos de fallo, pienso que una solución al problema es obtener los nombres de los controles de la pagina y trabajar directamente con ellos. Pero la verdad no he encontrado como hacer esto o alguna otra sugerencia que puedan brindarme. Quizas un WEBBrowser pueda ayudarme?

    Como mencione en el post inicial la pagina con la que ínter-actuare no es de mi autoria, por lo cual no tengo acceso a los controles, textbox, botones y demás. 

    Dejo parte del codigo comentado:

            Dim var As String
            Dim strSp As String()
            Dim line As String
            Dim IdTiket As String
            Dim CurrentLine As Integer = 1
    
            Dim reader As New System.IO.StreamReader(Application.StartupPath & "\MiArchivo.txt")
            var = "1" 'Password del Login 
    
            'Dim prc = Process.GetProcessesByName("NombreVentanaWEB")
            Dim hWnd As IntPtr = FindWindow(Nothing, "NombreVentanaWEB") 'Ventana a buscar
    
            'If hWnd.ToString > 0 Then
            'SetForegroundWindow(prc(0).MainWindowHandle)'Activacion de la ventana
            Thread.Sleep(1000)
            SetCursorPos(854, 206) 'Posicion del textbox login
            mouse_event(LEFTDOWN, 0, 0, 0, 0)
            mouse_event(LEFTUP, 0, 0, 0, 0)
            Clipboard.Clear() 'limpio el portapaleles
            Clipboard.SetText(var.ToString) 'Copio el password
            SendKeys.Send("^v") 'pego password a la pagina 
            SendKeys.Send("{TAB}") 'Tab para irme al boton login
            SendKeys.Send("{ENTER}") 'Entrar abre otra pagina
            Thread.Sleep(1000)
            SetCursorPos(746, 196) 'Me muevo a esta posicion, hay tres botones voy al segundo boton
            mouse_event(LEFTDOWN, 0, 0, 0, 0)
            mouse_event(LEFTUP, 0, 0, 0, 0)
            SendKeys.Send("{ENTER}") 'Entrar abre otra pagina
    
            While Not reader.EndOfStream ' Ciclo para leer el archivo de texto
    
                line = reader.ReadLine()
                strSp = Split(line, vbTab, , vbTextCompare)
                IdTiket = strSp(0)
                Thread.Sleep(1000) 'Espero 1 segundo la pagina valida el registro a introducir
                Clipboard.Clear() 'Limpio el portapapeles
                Clipboard.SetText(IdTiket.ToString) 'Copio el registro 1
                SendKeys.Send("^v") 'Pego el registro
                SendKeys.Send("{ENTER}") 'Entrar para ingresar el registro
    
            End While
            reader.Close()
            MessageBox.Show("Proceso finalizado....!")
            'End If

    Bueno espero puedan ayudarme con algunas sugerencias y/o aportaciones.

    - DS


    Aprendiz de todos maestro de nadie. Saludos desde Cd. Juarez Chihuahua Mexico. DS.

    Alguna sugerencia....?

    Aprendiz de todos maestro de nadie. Saludos desde Cd. Juarez Chihuahua Mexico. DS.

    viernes, 29 de marzo de 2019 2:06