FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Problema con WebBrowser. Uno más.
Saludos cordiales,
hace bastante tiempo que no entro por aquí, y que no uso delphi, por lo que estoy bastante perdido. Tengo un problema con un TWebBrowser, a la hora de mandar información a una página web por código. Al pulsar un TButtom, meto la dirección de una página web, introduzco el usuario y el password que me piden y valido. Sin problemas. Al pulsar un segundo TButtom, me dirigo a un link determinado de la página anterior. Sin problemas. Al pulsar un tercer TButtom, edito un TEXAREA y hago un SUBMIT al servidor. También sin problemas. El PROBLEMA está cuando intento hacerlo todo seguido, sin recurrir a los TButtom. Código Delphi:
Hasta aquí funciona correctamente. Pero cuando quiero hacerlo todo seguido, por ejemplo al pulsar también un TButtom, no me sale. Seguramente será una tontería, o incluso de la página en cuestión, pero llevo dándole vueltas varios días y no consigo dar con la solución. He comprobado que si antes del fallo interrumpo el programa, por ejemplo con un showmessage() , si me funciona. ¿¿??, pero con un sleep() no. Gracias anticipadas. Última edición por nlsgarcia fecha: 11-03-2015 a las 23:49:12. Razón: Sintaxis Delphi |
#2
|
|||
|
|||
Hola Jontart.
Cuando haces esto, el webbrowser dirige a otra página? Cita:
|
#3
|
|||
|
|||
Si.
Es la típica entrada de usuario. Realmente, una vez pasada entra en la aplicación, aunque con la misma raiz. |
#4
|
|||
|
|||
Para solventar el problema, y no entiendo bien porqué, lo que he hecho ha sido, puesto que observé que al hacer un showmessage() no se producía el error, crear un nuevo form "temporal", en el punto dónde dejaba de correr el programa; este nuevo form, abierto como showModal, se cierra el solito una vez pasados 3 segundos y la aplicación contínua tan ricamente.
NO sé porqué, pero me está funcionado. Me gustaría encontrar la forma elegante de hacerlo y el motivo por el que no funciona. Saludos. |
#5
|
|||
|
|||
Ok, se me ocurre así de pronto que quizá cuando lo haces con los botones, el tiempo que transcurre desde que hace login hasta que pulsas el siguiente botón, es suficiente para que la página donde se encuentra el link cargue completamente.
Pero cuando lo haces todo seguido no le das tiempo suficiente para que cargue con lo que creo le es imposible encontrar el item(38). Has probado a esperar a que la página cargue después del login? No lo he probado... Pero intenta poner la linea de espera también aqui o retrasar la segunda accion.
Ya me diras si era eso. Saludos. |
#6
|
||||
|
||||
Como dice Jovalca, cuando lo haces todo seguido no dejas que las respuestas a lo que solicitas lleguen.
Al hacerlo con botones o poniendo mensajes en medio, dejas suficiente tiempo para que la respuesta a las acciones que haces llegue. Esa es la respuesta a tu pregunta. Si pones una espera de por ejemplo 2 segundos entre acción y acción, seguro que funciona. Un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino - |
#7
|
|||
|
|||
Perdón por la tardanza, en contestar.
Eso es lo que, en principio, suponía que pasaba, que la página no estaba totalmente cargada. Pero, por ejemplo, no funciona si hago un sleep() de 10 segundos, o un ciclo For muy largo. Sólo funciona si, de alguna manera, salgo del procedimiento que está corriendo, aunque sea por un breve periodo de tiempo (1 segundo, p.e.). Por eso SI que funciona si lo ejecuto desde otro botón, si hago correr un nuevo form durante un tiempo determinado, o si ejecuto un ShowMessage, que es modal. El programa, ahora, se ejecuta bien; lo que quería saber es porqué. Qué órdenes debo usar para parar totalmente un procedimiento, en el entorno web, hasta obtener la respuesta deseada y que funcione elegantemente. Código:
while webBrowser2.ReadyState < READYSTATE_INTERACTIVE do Application.ProcessMessages; Gracias. |
#8
|
|||
|
|||
Hola otra vez Jontart.
Hace tiempo que migré a Lazarus y a Mac pero creo recordar que TWebBrowser dispone de un evento OnNavigateComplete o TWebBrowser.OnNavigateComplete2 que puede servirte para lo que necesitas. Inserta las acciones despues del login en ese evento a ver si se soluciona. Saludos. |
#9
|
|||
|
|||
Si que FUNCIONA.
Utilizando los eventos OnBeforeNavigate(), OnDocumentComplete() y OnNavigateComplete2() se consigue lo que quería sin artificios extraños. Defino dos variables y creo los eventos: Ahora, en el programa, después de cada acción que requiera una respuesta del servidor pongo: y eso es todo. Gracias por vuestra inestimable ayuda. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Prueba | roman | La Taberna | 0 | 27-09-2012 20:32:21 |
Prueba del ratón | ArdiIIa | Humor | 9 | 05-06-2008 20:13:10 |
Prueba | Archer | Humor | 5 | 28-09-2005 22:46:42 |
|