Interactuar con una pagina web |
Responder | Página 12> |
Autor | |
Mihura
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Unido: 06/Mayo/2005 Localización: En la dehesa Estado: Sin conexión Puntos: 13990 |
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:
Gracias mil. |
|
lbauluz
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Unido: 29/Marzo/2005 Localización: La Gloria Estado: Sin conexión Puntos: 3849 |
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
|
|
Mihura
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Unido: 06/Mayo/2005 Localización: En la dehesa Estado: Sin conexión Puntos: 13990 |
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?
|
|
mounir
Colaborador Unido: 09/Febrero/2009 Localización: Asturias-España Estado: Sin conexión Puntos: 6479 |
Enviado: 17/Julio/2019 a las 10:04 |
Un Saludo.
|
|
Mihura
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Unido: 06/Mayo/2005 Localización: En la dehesa Estado: Sin conexión Puntos: 13990 |
Enviado: 17/Julio/2019 a las 11:08 |
Hola Mounir,
Lo primero es que la página que usa ya no existe .... 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 ... Gracias.
|
|
guarracuco
Moderador Unido: 24/Abril/2004 Localización: EEUU Estado: Sin conexión Puntos: 3239 |
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 |
|
Mihura
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Unido: 06/Mayo/2005 Localización: En la dehesa Estado: Sin conexión Puntos: 13990 |
Enviado: 17/Julio/2019 a las 16:07 |
Agghhhhhrrrrrr ... después de tener todo escrito, voy y lo pierdo ...
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. |
|
Emilio
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Santander Unido: 08/Agosto/2004 Localización: España Estado: Sin conexión Puntos: 18836 |
Enviado: 17/Julio/2019 a las 16:54 |
Hola! ¿Y no has probado con un webservice? Emiliove tenía algo al respecto.
|
|
Mihura
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Unido: 06/Mayo/2005 Localización: En la dehesa Estado: Sin conexión Puntos: 13990 |
Enviado: 17/Julio/2019 a las 17:03 |
Hola chiquitín,
El webservice de esta página es de pago .... . 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.
|
|
guarracuco
Moderador Unido: 24/Abril/2004 Localización: EEUU Estado: Sin conexión Puntos: 3239 |
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
|
|
guarracuco
Moderador Unido: 24/Abril/2004 Localización: EEUU Estado: Sin conexión Puntos: 3239 |
Enviado: 17/Julio/2019 a las 20:35 |
A ver si entendi: si cambia la selección de La Moneda pero no su valor?
|
|
Mihura
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Unido: 06/Mayo/2005 Localización: En la dehesa Estado: Sin conexión Puntos: 13990 |
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. |
|
lbauluz
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Unido: 29/Marzo/2005 Localización: La Gloria Estado: Sin conexión Puntos: 3849 |
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
|
|
guarracuco
Moderador Unido: 24/Abril/2004 Localización: EEUU Estado: Sin conexión Puntos: 3239 |
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 |
|
Maverick2019
Habitual Unido: 10/Junio/2019 Localización: Madrid Estado: Sin conexión Puntos: 145 |
Enviado: 18/Julio/2019 a las 13:31 |
Hola a todos.
He mirado un poco por ahí y he encontrado esto: https://www.seleniumhq.org/projects/ ¿Puede ser de interés para éste tema? Salu2,
|
|
Responder | Página 12> |
Tweet
|
Ir al foro | Permisos de foro Usted No puede publicar nuevos temas en este foro Usted No puede responder a temas en este foro Usted No puede borrar sus mensajes en este foro Usted No puede editar sus mensajes en este foro Usted No puede crear encuestas en este foro Usted No puede votar en encuestas en este foro |