nov 022011
 

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

  15 Responses to “Obtener información de una página cargada en un TWebBrowser”

  1. Genial, funciona de maravilla.

    Gracias.

  2. 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í

      uses MSHTML;
      
      procedure .....
      var
        Doc2: IHTMLDocument2;
        Win2: IHTMLWindow2;
      begin
        Doc2 := WebBrowser.Document as IHTMLDocument2;
        Win2 := Doc2.parentWindow;
        Win2.execScript('funcion(parametros)', 'JavaScript');

      Nos leemos

  3. 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

  4. Pregunta como se usa procedure WebAddHTML
    Lo intente usar pero me marca error exeption access violation

  5. Gran aporte, gracias por tu tiempo. Saludos

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)