** 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
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 Tema: Interactuar con una pagina web
    Enviado: 16/Julio/2019 a las 23:52
Hola,

Tengo que interactuar con una página web para obtener unos cambios de divisas y me he quedado atascado. Es un tema que nunca he tratado y del cuál soy incapaz de encontrar un manual (aunque sea en extranjero), sirva esto para que si alguien conoce alguno que haga el favor de ponerlo.

La cuestión está en que soy capaz de lo siguiente:
- abro por automatización un objeto InternetExplorer
- cargo la página que busco
- pongo en el campo correspondiente de tipo de 'moneda de' el valor que quiero
- pongo en el campo correspondiente de tipo de 'moneda a' el valor que quiero
...
pero ahí me quedo, 
- está página no tiene un botón que al hacer clic realice la conversión,
- si le lanzo un submit al formulario me da error porque no es lo que espera
- soy incapaz de lanzar el evento "onmouseup" o "onmousedown" (los ejecuta pero no hace nada)
    * tampoco la inspección me da que estos campos tengan eventos (o yo no los se ver)

Vamos, que espero indicaciones de cuál puede ser el camino a seguir.

EL código que uso (de pruebas, después habrá que complicarlo) es el siguiente:

Dim WithEvents IE As InternetExplorer
Dim WithEvents inputEle As HTMLInputElement
Dim HTMLdoc As HTMLDocument

Private Sub Comando0_Click()

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

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

    Stop
    
    Set HTMLdoc = IE.Document
    Set inputEle = HTMLdoc.getElementById("quote_currency_input")
    inputEle.Value = "GBP"
    'inputEle.FireEvent "onmouseup"
    'inputEle.FireEvent "onmousedown"
    Set inputEle = HTMLdoc.getElementById("base_currency_input")
    inputEle.Value = "CAD"

    'IE.Document.Forms(0).submit
    Set IE = Nothing
End Sub

Gracias mil.

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

Access Aplicaciones
Tecsys.es
Arriba
lbauluz Ver desplegable
Administrador
Administrador
Avatar

Unido: 29/Marzo/2005
Localización: La Gloria
Estado: Sin conexión
Puntos: 3849
Enlace directo a este mensaje Enviado: 17/Julio/2019 a las 03:00
Pues simple, ponle el importe que quieres

Private Sub xx()

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

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

    Set HTMLdoc = IE.Document
    Set inputEle = HTMLdoc.getElementById("quote_currency_input")
    inputEle.Value = "GBP"

    Set inputEle = HTMLdoc.getElementById("base_currency_input")
    inputEle.Value = "CAD"
' AQUÍ
    Set inputEle = HTMLdoc.getElementById("quote_amount_input")
    inputEle.Value = "12" ' o el valor que te apetezca, claro, de paso, en base_amount_input tienes el valor del cambio
    Set IE = Nothing
End Sub

El Búho es un pajarraco
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: 17/Julio/2019 a las 09:12
Hola Luis,

me has dado una alegría -una-, la primera vez ha funcionado, después ya vuelve al mismo ritual, cambie lo que cambie no hace nada, no cambia el tipo de divisa en el 'combo', ni efectúa el cambio.

¿más ideas?
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
mounir Ver desplegable
Colaborador
Colaborador


Unido: 09/Febrero/2009
Localización: Asturias-España
Estado: Sin conexión
Puntos: 6479
Enlace directo a este mensaje Enviado: 17/Julio/2019 a las 10:04
Hola Jesús!

Creo que MexMan70 tenía un ejemplo

Cotización Dolar
Un Saludo.
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: 17/Julio/2019 a las 11:08
Hola Mounir,

Lo primero es que la página que usa ya no existe .... Ouch

Lo segundo es que lo que hace el ejemplo es coger el código HTML de la página y buscar en la misma el valor que quiere, no interectúa con ella, y yo lo que pretendo es sacar el cambio de varias divisas, con lo que tengo que ingresar valores, que se 'entere' que se los he ingresado y que haga el cálculo.

Además, la página es la que quiere el cliente, así que no puedo ir buscando una que se me acomode a mí.

Y ... añado .... trato de aprender a manejar esta historia que nunca lo había hecho, así que no puedo rendirme ... Wink

Gracias.
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: 17/Julio/2019 a las 13:55
Esta solucion es gracias al usuario cpampas. Hace como un mes presento algo similar y aprendi a adjuntar eventos a un objeto html.

Dim WithEvents IE As SHDocVw.InternetExplorer
Dim doc As HTMLDocument

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

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

    Stop 'aqui coloca un while--busy--

    Set HTMLdoc = IE.Document
    Set inputEle = HTMLdoc.getElementById("quote_currency_input")
    inputEle.Value = "GBP"
    Set inputEle = HTMLdoc.getElementById("base_currency_input")
    inputEle.Value = "CAD"
               
    Dim evt As Object
    Set evt = IE.Document.createEvent("HTMLEvents")
    evt.initEvent "keydown", True, False
    IE.Document.getElementById("quote_amount_input").attachEvent ("keydown")
   
    evt.initEvent "blur", True, False
    IE.Document.getElementById("quote_amount_input").attachEvent ("blur")
   
    evt.initEvent "keyup", True, False
    IE.Document.getElementById("quote_amount_input").attachEvent ("keyup")
   
    IE.Document.getElementById("quote_amount_input").Value = "253.55"
    IE.Document.getElementById("quote_amount_input").dispatchEvent evt, 13

End Sub
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: 17/Julio/2019 a las 16:07
Agghhhhhrrrrrr ... después de tener todo escrito, voy y lo pierdo ...  Ouch

Gracias Carlos,

veamos, que dijo un ciego:

Con esto lanzamos el evento "keyup" del  importe base a cambiar (por cierto, si sólo creamos el evento keyup también funciona, ¿por qué creas los otros dos?)

La cuestión es que sí, hemos cambiado los valores de las monedas a usar "GBP" y "CAD" pero la acción que ocurre al cambiar la moneda no la realiza, con lo que no cambia el valor de cambio ... con lo que el cálculo es erróneo.

He probado a lanzar distintos eventos en el campo quote_currency_input el "keyup", el "blur" que por lo que he averiguado en parecido a un LostFocus y ... nada

¿que evento se supone habría que lanzar?



P.D. ¿Sabes de manuales de este tema? ... gracias mil compañero.


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

Access Aplicaciones
Tecsys.es
Arriba
Emilio Ver desplegable
Administrador
Administrador

Santander

Unido: 08/Agosto/2004
Localización: España
Estado: Sin conexión
Puntos: 18836
Enlace directo a este mensaje Enviado: 17/Julio/2019 a las 16:54
Hola!
¿Y no has probado con un webservice? Emiliove tenía algo al respecto.
Saludos a todos desde Huelva

http://www.mvp-access.es/emilio/
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: 17/Julio/2019 a las 17:03
Hola chiquitín,

El webservice de esta página es de pago .... Wink.

También tengo otra página -ya dominada- que me da la información que quiero, pero lo de esta es por contentar al cliente y aprender, que por lo que veo esto tiene algunas 'vainas' pelín complicadas.

Un saludo.
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: 17/Julio/2019 a las 20:33
Curioso que si no creo los 3 eventos, no me funciona.
En mi portátil me funciona. Ahora estoy en el trabajo. Lo reviso al llegar a casa y comento.
Si, la API  es de pago. Eso fue lo primero que revise.
Un placer muu
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: 17/Julio/2019 a las 20:35
A ver si entendi: si cambia la selección de La Moneda pero no su valor?
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: 17/Julio/2019 a las 20:38
Pone el literal, pero no lo 'selecciona' como hace cuando lo haces 'a mano', lo verás en la propia web. 
Al hacer a mano tú el cambio, verás que hace otras cosas.

Yo le pongo un stop para ir ejecutando las instrucciones una a una e ir bicheando.


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

Access Aplicaciones
Tecsys.es
Arriba
lbauluz Ver desplegable
Administrador
Administrador
Avatar

Unido: 29/Marzo/2005
Localización: La Gloria
Estado: Sin conexión
Puntos: 3849
Enlace directo a este mensaje Enviado: 18/Julio/2019 a las 03:59
El problema es que estamos escribiendo en los combos, pero no SELECCIONANDO el combo, de forma que pongas lo que pongas, sigue con la moneda inicial, aún no he conseguido hacer click en un elemento del combo, pero con eso debería funcionar.
El Búho es un pajarraco
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 12:54
Mas complejo aun, no hay combos. Se despliega una lista con opciones. He jugado un poco y al menos recorro la clase ltr_list_item, que es la que dispara el evento click.
Logro recorrer los hijos (etiquetas span) de cada ltr_list_item y comparo el innerHTML valor con el codigo de la moneda original.
Al encontrar el valor, asigno al elemento quote_currency_flag, la clase de la moneda deseada y al elemento quote_currency_code (la flechita a la derecha), le asigno el codigo de la moneda, pero naaa.

Continuare jugando esta noche.
Si sirve de algo, aqui dejo lo que tengo hasta el momento.

Private Sub Command1_Click()
Dim IE As SHDocVw.InternetExplorer
Dim doc As HTMLDocument
'Dim div As Object
    Set IE = CreateObject("InternetExplorer.Application")
    IE.Visible = True
    IE.navigate "https://www1.oanda.com/lang/es/currency/converter/"

    'Stop 'aqui coloca un while--busy--
    While IE.Busy Or IE.ReadyState < 4: DoEvents: Wend

    Set HTMLdoc = IE.Document
    Set lstcontainer = HTMLdoc.getElementById("quote_currency_list_container")
   
    Set sel = HTMLdoc.getElementsByClassName("ltr_list_item")

    Dim evt As Object
    Set evt = IE.Document.createEvent("HTMLEvents")
    evt.initEvent "click", True, False
   
    For i = 0 To sel.length - 1 '432
        Set divs = sel.Item(i)
        Set child = divs.getElementsByTagName("span")

         For k = 0 To child.length - 1
            If child(k).innerHTML = "GBP" Then
                Set inputele = HTMLdoc.getElementById("quote_currency_input")
                inputele.setAttribute "autocomplete", "true"
                Set flag = HTMLdoc.getElementById("quote_currency_flag")
                flag.className = "GBP"
                inputele.Value = "British Pound"
                HTMLdoc.getElementById("quote_currency_code").innerHTML = "GBP"
               
                flag.className = "GBP"
                inputele.Value = "British Pound"
                HTMLdoc.getElementById("quote_currency_code").innerHTML = "GBP"
               
                flag.className = "USD"
                inputele.Value = "US Dollar"
                HTMLdoc.getElementById("quote_currency_code").innerHTML = "USD"
               
               ' sel(i).attachEvent ("change")
                sel(i).dispatchEvent evt
               
                'Debug.Print child(k).innerHTML
               
                Debug.Print IE.Document.getElementById("base_amount_input").Value
                flag = True
                Exit For
            End If
         Next
         If flag Then Exit For
    Next
    'Debug.Print sel.length
    IE.Quit
    End Sub

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: 18/Julio/2019 a las 13:31
Hola a todos.
He mirado un poco por ahí Wink y he encontrado esto: https://www.seleniumhq.org/projects/
¿Puede ser de interés para éste tema?

Salu2,
Arriba
 Responder Responder Página  12>
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable