** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Interactuar con una pagina web
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoInteractuar con una pagina web

 Responder Responder Página  <12
Autor
Mensaje
Maverick2019 Ver desplegable
Habitual
Habitual


Unido: 10/Junio/2019
Localización: Madrid
Estado: Sin conexión
Puntos: 145
Enlace directo a este mensaje Enviado: 18/Julio/2019 a las 13:50
Hola de nuevo.
Y el sitio donde encontre el link anterior, era este: https://www.automateexcel.com/vba/automate-internet-explorer-ie-using/

Salu2,
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 13990
Enlace directo a este mensaje Enviado: 18/Julio/2019 a las 15:34
Carlos, muchas zenkius por tu interés ...  Wink

Menudo cacao de página ... Ouch, a mi me sobrepasa 3 pueblos Dead,  pero bueno es cuestión de aprender, que cada vez habrá que hacer más uso de estos temas, aunque espero que no sean tan complicadas como esta, la verdad es que he hecho pruebas con otras páginas y ni de lejos le llegan a la que andamos mirando, supongo que lo hacen así de complicado para que la gente contrate el webservice de pago.

Cuando la ponga en limpio, ya pondré otra página que da cambio de moneda, pero muuuuucho más facilita LOL.


Hola José María,

Lo del Selenium me lo apunto para echarle un vistazo (si es que saco tiempo, que es lo complicado), aunque de lo que se trata es de manejar Iexplore desde Access directamente, no manejarlo desde otro programa intermedio. A ver si bicheándolo un poquico veo ideas que aplicar.

El enlace excel que pones (gracias) es uno de los que he visto estos días en mi pelea con este tema.



Un saludo a los dos.
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
guarracuco Ver desplegable
Moderador
Moderador


Unido: 24/Abril/2004
Localización: EEUU
Estado: Sin conexión
Puntos: 3239
Enlace directo a este mensaje Enviado: 18/Julio/2019 a las 20:33
Un gustaso muu.
Esta dificil. Por supuesto pa que pagues el servicio.
Tengo mas codigo nuevo. Con una llamada al shell, limpio las cookies y corregi la línea para asignar clases.
Estoy también mostrando la lista desplegable. Creo que si logro simular el click en el elemento con la clase que le coloca cuando se mueve el mouse PO encima, funcione.

Arriba
Maverick2019 Ver desplegable
Habitual
Habitual


Unido: 10/Junio/2019
Localización: Madrid
Estado: Sin conexión
Puntos: 145
Enlace directo a este mensaje Enviado: 19/Julio/2019 a las 09:51
Buenas
Encontré hace algún tiempo esto: https://dymeng.com/resources/browse-embed/
Mirad a ver sí os puede servir.

Buen finde...
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 13990
Enlace directo a este mensaje Enviado: 19/Julio/2019 a las 12:31
Más deberes .... ¡gracias!

Lo mismo te deseo.
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
happy Ver desplegable
Moderador
Moderador


Unido: 29/Enero/2005
Localización: España
Estado: Sin conexión
Puntos: 3192
Enlace directo a este mensaje Enviado: 19/Julio/2019 a las 16:18
He estado siguiendo este hilo y haciendo pruebas con las cosas que ibais poniendo. Al final la verdad es que he conseguido que funcione, pero no se si me quedo muy satisfecho, pues está basado en alguna chapucilla, pero bue, de momento avanza un poco el tema.

Lo que he visto es que la primera vez que asignaba las dos divisas y luego la cantidad a convertir, sí que funcionaba, pero la segunda vez, no actualizaba la cantidad resultante. Así que he hecho una chapucilla para que obligue a cambiar las divisas desde la última vez que se consultaron, y así, parece que me ha funcionado una segunda, tercera, etc veces. Aquí está el código:

Dim IE As InternetExplorer
Dim HtmlDoc As HTMLDocument
Dim inputEle As HTMLInputElement
Dim innerBox 'As HTMLDivElement
Dim col 'As HTMLElementCollection
Dim div 'As HTMLDivElement
Dim span 'As HTMLSpanElement

    Set IE = CreateObject("InternetExplorer.Application")
    IE.Visible = True

    IE.navigate "https://www1.oanda.com/lang/es/currency/converter/"

    Sleep 2000
'    Stop 'aqui coloca un while--busy--

    Set HtmlDoc = IE.Document
   
    ' primero ponemos la cantidad que deseamos cambiar
    Set inputEle = IE.Document.getElementById("quote_amount_input")
'    inputEle.ClassName = "have focus"
    inputEle.value = "450"
   
    ' referenciamos el desplegable con la divisa 1
    Set innerBox = HtmlDoc.getElementById("scroll-innerBox-1")
    ' referenciamos controles div de clase "ltr_list_item", que son los elementos del desplegable
    Set col = innerBox.getElementsByClassName("ltr_list_item")
    For Each div In col
        ' referenciamos el elemento span nº 3 de cada div "ltr_list_item" (que es la class "code-right")
        Set span = div.getElementsByTagName("span")(2)
        ' ponemos un valor diferente al que queremos (obligamos a actualizar el campo y otros valores)
        If span.innerText <> "EUR" Then
            div.FireEvent ("onmouseover")
            div.FireEvent ("onclick")
            Exit For
        End If
    Next
   
    Set col = innerBox.getElementsByClassName("ltr_list_item")
    For Each div In col
        ' referenciamos el elemento span nº 3 de cada div "ltr_list_item" (que es la class "code-right")
        Set span = div.getElementsByTagName("span")(2)
        ' en la segunda pasada ponemos el valor que queremos
        If span.innerText = "EUR" Then
            div.FireEvent ("onmouseover")
            div.FireEvent ("onclick")
            Exit For
        End If
    Next
   
    ' referenciamos el desplegable con la divisa 2 y hacemos lo mismo que con la divisa 1
    Set innerBox = HtmlDoc.getElementById("scroll-innerBox-2")
    Set col = innerBox.getElementsByClassName("ltr_list_item")
    For Each div In col
        Set span = div.getElementsByTagName("span")(2)
        If span.innerText <> "GBP" Then
            div.FireEvent ("onmouseover")
            div.FireEvent ("onclick")
            Exit For
        End If
    Next
   
    Set col = innerBox.getElementsByClassName("ltr_list_item")
    For Each div In col
        Set span = div.getElementsByTagName("span")(2)
        If span.innerText = "GBP" Then
            div.FireEvent ("onmouseover")
            div.FireEvent ("onclick")
            Exit For
        End If
    Next

a ver si a vosotros también os funciona ...


Editado por happy - 19/Julio/2019 a las 16:20
Saludos,

Juan M. Afan de Ribera
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 13990
Enlace directo a este mensaje Enviado: 19/Julio/2019 a las 18:20
Si señor ... Clap

He metido el cálculo en un bucle para simular condiciones reales y ... necesita un sleep para darle tiempo a leer, porque si no coge el primer valor y se lo zampa a todos, lo que he probado queda asi:

    Dim IE As InternetExplorer
    Dim HtmlDoc As HTMLDocument
    Dim inputEle As HTMLInputElement
    Dim innerBox 'As HTMLDivElement
    Dim col 'As HTMLElementCollection
    Dim div 'As HTMLDivElement
    Dim span 'As HTMLSpanElement
    Dim xArray As Variant, i As Integer, xS As String, Divisa1 As String, Divisa2 As String
    xArray = Array("EUR-GBP", "EUR-EUR", "USD-CAD", "GBP-GBP", "AUD-EUR", "USD-USD", "CAD-EUR", "AUD-AUD", "USD-EUR")

    Set IE = CreateObject("InternetExplorer.Application")
    IE.Visible = True

    IE.Navigate "https://www1.oanda.com/lang/es/currency/converter/"

    Do While IE.ReadyState = 4: DoEvents: Loop   'Do While
    Do Until IE.ReadyState = 4: DoEvents: Loop   'Do Until

    Set HtmlDoc = IE.Document
    
    ' primero ponemos la cantidad que deseamos cambiar
    Set inputEle = IE.Document.getElementById("quote_amount_input")
    '    inputEle.ClassName = "have focus"
    inputEle.Value = "1"
    
    For i = 0 To UBound(xArray)
        Divisa1 = Left$(xArray(i), 3)
        Divisa2 = Right$(xArray(i), 3)
    
        ' referenciamos el desplegable con la divisa 1
        Set innerBox = HtmlDoc.getElementById("scroll-innerBox-1")
        ' referenciamos controles div de clase "ltr_list_item", que son los elementos del desplegable
        Set col = innerBox.getElementsByClassName("ltr_list_item")
        For Each div In col
            ' referenciamos el elemento span nº 3 de cada div "ltr_list_item" (que es la class "code-right")
            Set span = div.getElementsByTagName("span")(2)
            ' ponemos un valor diferente al que queremos (obligamos a actualizar el campo y otros valores)
            'If span.innerText <> "CAD" Then
            If span.innerText <> Divisa1 Then
                div.FireEvent ("onmouseover")
                div.FireEvent ("onclick")
                Exit For
            End If
        Next
    
        Set col = innerBox.getElementsByClassName("ltr_list_item")
        For Each div In col
            ' referenciamos el elemento span nº 3 de cada div "ltr_list_item" (que es la class "code-right")
            Set span = div.getElementsByTagName("span")(2)
            ' en la segunda pasada ponemos el valor que queremos
            'If span.innerText = "CAD" Then
            If span.innerText = Divisa1 Then
                div.FireEvent ("onmouseover")
                div.FireEvent ("onclick")
                Exit For
            End If
        Next
    
        ' referenciamos el desplegable con la divisa 2 y hacemos lo mismo que con la divisa 1
        Set innerBox = HtmlDoc.getElementById("scroll-innerBox-2")
        Set col = innerBox.getElementsByClassName("ltr_list_item")
        For Each div In col
            Set span = div.getElementsByTagName("span")(2)
            'If span.innerText <> "GBP" Then
            If span.innerText <> Divisa2 Then
                div.FireEvent ("onmouseover")
                div.FireEvent ("onclick")
                Exit For
            End If
        Next
    
        Set col = innerBox.getElementsByClassName("ltr_list_item")
        For Each div In col
            Set span = div.getElementsByTagName("span")(2)
            'If span.innerText = "GBP" Then
            If span.innerText = Divisa2 Then
                div.FireEvent ("onmouseover")
                div.FireEvent ("onclick")
                Exit For
            End If
        Next
    
        Sleep 2000
    
        Debug.Print xArray(i) & ": " & IE.Document.getElementById("base_amount_input").Value
    Next i
    
    IE.Quit
    
    Set IE = Nothing


Y el resultado de la ejecución:
EUR-GBP: 0,90038
EUR-EUR: 1,00000
USD-CAD: 1,30553
GBP-GBP: 1,00000
AUD-EUR: 0,62640
USD-USD: 1,00000
CAD-EUR: 0,68141
AUD-AUD: 1,00000
USD-EUR: 0,88971


Editado por Mihura - 19/Julio/2019 a las 18:22
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
happy Ver desplegable
Moderador
Moderador


Unido: 29/Enero/2005
Localización: España
Estado: Sin conexión
Puntos: 3192
Enlace directo a este mensaje Enviado: 19/Julio/2019 a las 20:18
Vaya, pues me alegro Smile. Después de hacer diversas pruebas y funcionar y después no funcionar, etc, ya no estaba seguro de si me funcionaba o no funcionaba por el caché del navegador. Lo iba eliminando y al final me ha funcionado, pero ya digo, no estaba muy seguro.

Lo del bucle de espera para la carga de la página, aunque he visto en muchas ocasiones ese bucle que pregunta por el readystate no lo tengo muy claro que realmente sea lo más eficaz, pues me he encontrado también muchas veces que el bucle me decía que ya había cargado la página (o que el readystate ya NO era igual a 4) y resulta que todavía debía terminar de cargar cosas. Al final no era lo mejor, vaya. Yo lo que hago es capturar el evento DocumentComplete del IE. Eso es mucho más seguro. El Sleep que había puesto era para no complicarme, por que estabamos en pruebas.

Bueno, pues ya ves, lo que digo yo con esto de las páginas web. Una cosa es controlar el IE o Firefox o cualquier otro navegador, y otra cosa muy distinta poder automatizar una página web. Como hemos visto en este ejemplo, las cosas no son lo que parecen y por poner un valor en un campo, no quiere decir que se vayan a ejecutar las funciones o eventos relacionados con ese campo o control.

Thumbs Up
Saludos,

Juan M. Afan de Ribera
Arriba
Jose35 Ver desplegable
Habitual
Habitual


Unido: 05/Noviembre/2017
Localización: Aljaraque
Estado: Sin conexión
Puntos: 111
Enlace directo a este mensaje Enviado: 21/Julio/2019 a las 23:08
Hola estoy intentando aprender de todo esto y cada dia leo o veo algo que me interesa saber como se hace, acabo de leer lo ultimo que ha escrito happy y me gustaría que alguno de vosotros o él mismo si es posible, me explique como se realiza lo de capturar el evento DocumentComplete del IE, me vendría muy bien, me ocurre que en mi trabajo debido a todo el tema de permisos y claves, lanzo una pagina web para obtener un dato y por mucho sleep que le añada alguna que otra vez la rutina corre antes de cargar la pagina.

Gracias y Un saludo.


Editado por Jose35 - 21/Julio/2019 a las 23:08
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 13990
Enlace directo a este mensaje Enviado: 21/Julio/2019 a las 23:17
Clase WebBrowser:

Event DocumentComplete(pDisp As Object, URL)
    Miembro de SHDocVw.WebBrowser
    Fired when the document being navigated to reaches ReadyState_Complete.


Obtenido con el examinador de objetos.


Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
guarracuco Ver desplegable
Moderador
Moderador


Unido: 24/Abril/2004
Localización: EEUU
Estado: Sin conexión
Puntos: 3239
Enlace directo a este mensaje Enviado: 22/Julio/2019 a las 13:09
Si declaras al inicio del modulo al objeto IE withevents, obtienes todos los eventos.
Arriba
main Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 31/Agosto/2009
Localización: OVIEDO
Estado: Sin conexión
Puntos: 1258
Enlace directo a este mensaje Enviado: 22/Julio/2019 a las 14:20
Que buen hilo
Clap Clap
Enhorabuena a todos los intervinientes

Y como lo hariamos para otro esplorador como Chrome o mozilla

Saludos


Arriba
 Responder Responder Página  <12
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable