Buenas,
Haciendo unas aplicaciones que usan el componente TWebBrowser, me surgió la necesidad de interactuar con las páginas cargadas en él, en concreto el manejo de los formularios. Consultando a Google llegué a delphi.about.com donde encontré una serie de artículos que me ayudaron a solucionar mis necesidades.
Gracias a estos artículos he creado una clase (TWebControl) que engloba buena parte de lo expuesto en esos artículos.
Entre las funciones interesantes que tiene esta clase tenemos:
- procedure WebLinks: se encarga de carturar todas las etiquetas «a href» que contenga la página y las pone en la propiedad Links.
- procedure WebFormNames: se encarga de capturar todos los formularios que contenga la página y los almacena en la propiedad Forms.
- procedure WebFormFields: dado el nombre de un formulario, se encarga de rellenar la propiedad Fields con los campos del mismo.
- procedure WebFormSetFieldValue: dado un formulario y un campo del mismo, establece un valor a dicho campo.
- procedure WebFormSubmit: dado un formulario, lo acepta.
- function WebFormFieldValue: dado un formulario y un campo del mismo, devuelve el valor que contiene.
- function WebHTMLCode: devuelve el código HTML de la página web.
- function WebContent: devuelve el contenido de la página web.
- procedure WebSaveAsHTML: dado un nombre de archivo, guarda la página web.
- procedure WebLoadHTML: dado un código HTML, lo carga directamente en el TWebBrowser.
- procedure WebAddHTML: dado un código HTML, lo añade a la página existente.
- procedure WebPrintWithoutDialog: imprime la página web sin mostrar ningún dialogo.
- procedure WebPrintWithDialog: lanza el diálogo de impresión.
- procedure WebPrintPreview: realiza una previsualización de la impresión de la página web.
- procedure WebPrintPageSetup: realiza una llamada al diálogo del setup.
La forma de funcionar de la clase es sencilla. Basta con crear un objeto de la misma pasándole en el constructor el objeto TWebBrowser que contenga la página a controlar.
Como siempre, podéis descargaros el programa demo y la unit con la clase desde aquí.
Nos leemos
Genial, funciona de maravilla.
Gracias.
Gracias a ti por pasarte por estos lares 🙂
Nos leemos
Muy bueno!!!
Hola Cadetill, no conocía tu página, pero me la apunto
Quiero ejecutar repetidamente un script de Javascript en una página web.
Tras cada ejecución crea una nueva página con el resultado insertado en una tabla. Tendré que leer estas tablas y almacenar su contenido. De momento la primera ejecución funciona, porque tengo problemas con la carga de la página, supongo que tengo que esperar a que acabe de cargar para poder leer la tabla y de momento no se como hacerlo.
He leido lo que permite hacer tu clase, pero creo que no permite la ejecución de script. Te comento esto porque no acabo de entender el ejemplo que acompañas. Como puedo ver los elementos que componen la página y para que sirve la búsqueda que añades en el ejemplo
un saludo y felicidades por la página
Hola Paco
Para saber si una página se ha terminado de cargar tienes que hacer, más o menos, lo mismo de la demo, es decir, tienes que controlar los 3 eventos del TWebBrowser indicados.
Para ejecutar un script tienes que hacer algo así
Nos leemos
Excelente.
Para completar un proyecto que estoy realizando solo me falta poder activar eventos dentro de los formularios ya que WebFormSetFieldValue no activa los eventos dentro del campo que llaman a unas funciones.
Buenas,
Me alegra que te haya servido. Cualquier duda ya sabes que puedes contactar conmigo.
Saludos
Saludos cadetill, tengo un input en un formulario web de 15 caracteres y cuando completo los campos en el el ultimo caracter se activa un evento pero ahora que lo hago de esta forma automática no activa el evento, podría enviar a activar el evento desde delphi?, como podría activar el evento de dicho input?.
Buenas,
No entiendo exactamente tu problema. No tiene nada que ver el uso de esta unit a la carga de una página web en el TWebBrowser. ¿Si cargas tu página desde un navegador (fuera de Delphi) te funciona correctamente?
Saludos
La pregunta es sencilla, hay una web que contiene un formulario y en el formulario un input para escribir 15 caracteres, al completar de escribir los caracteres se dispara un evento que realiza una búsqueda y trae el resultado en otro campo, si digito manual la búsqueda se realiza pero si lleno los campos con WebFormSetFieldValue el evento de búsqueda no se dispara aunque estén completo los 15 caracteres así que la pregunta es la siguiente, como podría disparar el evento desde Delphi para que después que use WebFormSetFieldValue se realice la búsqueda y pueda obtener el campo del resultado
Buenas,
Vale, ya entiendo. El evento seguramente estará ejecutando una función JavaScript, por lo que sólo tienes que ejecutar esa función. Unos mensajes más arriba, a Paco le explico cómo hacerlo.
También puede valerte ejecutar un simple submit del formulario, pero eso ya no te lo aseguraría.
Saludos
Pregunta como se usa procedure WebAddHTML
Lo intente usar pero me marca error exeption access violation
Hola Edgar
Cuando creas un objeto de tipo TWebControl tienes que pasarle en el constructor un TWebBrowser donde visualizar los datos. Este TWebBrowser tienes que inicializarlo al menos con about:blank ( WebBrowser.Navigate(‘about:blank’); ).
Luego sólo te queda hacer una llamada al método que quieras
Saludos
Gran aporte, gracias por tu tiempo. Saludos