Vida

Manipular formularios web con TWebBrowser

Manipular formularios web con TWebBrowser

El control TWebBrowser Delphi proporciona acceso a la funcionalidad del navegador web desde sus aplicaciones Delphi, para permitirle crear una aplicación de navegación web personalizada o agregar capacidades de Internet, navegación de archivos y redes, visualización de documentos y descarga de datos a sus aplicaciones.

Formularios web

UNA formulario web o un formulario en una página web permite que un visitante de la página web ingrese datos que, en la mayoría de los casos, se envían al servidor para su procesamiento.

El formulario web más simple podría consistir en uno elemento de entrada (control de edición) y un enviar botón. La mayoría de los motores de búsqueda web (como Google) utilizan dicho formulario web para permitirle buscar en Internet.

Los formularios web más complejos incluirían listas desplegables, casillas de verificación, botones de opción, etc. Un formulario web es muy parecido a un formulario estándar de Windows con entrada de texto y controles de selección.

Cada formulario incluiría un botón, un botón de envío, que le indica al navegador que tome medidas en el formulario web (generalmente para enviarlo a un servidor web para su procesamiento).

Completar formularios web de forma programática

Si en su aplicación de escritorio utiliza TWebBrowser para mostrar páginas web, puede controlar mediante programación los formularios web: manipular, cambiar, rellenar, rellenar campos de un formulario web y enviarlo.

Aquí hay una colección de funciones de Delphi personalizadas que puede usar para enumerar todos los formularios web en una página web, para recuperar elementos de entrada, para llenar campos mediante programación y finalmente enviar el formulario.

Para seguir más fácilmente los ejemplos, digamos que hay un control TWebBrowser llamado "WebBrowser1" en un formulario Delphi (Windows estándar).

Nota: deberías agregar mshtml a su cláusula de usos para compilar los métodos enumerados aquí.

Enumerar nombres de formularios web, obtener un formulario web por índice

En la mayoría de los casos, una página web solo tiene un formulario web, pero algunas páginas web pueden tener más de un formulario web. Aquí se explica cómo obtener los nombres de todos los formularios web en una página web:

función WebFormNames (const documento: IHTMLDocument2): TStringList; var formas: IHTMLElementCollection; formulario: IHTMLFormElement; idx: entero; empezar formas: = document.Forms como IHTMLElementCollection; resultado: = TStringList.Create;para idx: = 0 a -1 + formas.longitud hacer   empezar form: = forms.item (idx, 0) como IHTMLFormElement; result.Add (form.name);fin; fin;

Un uso simple para mostrar la lista de nombres de formularios web en un TMemo:

var formas: TStringList; empezar formularios: = WebFormNames (WebBrowser1.Document COMO IHTMLDocument2);tratar memo1.Lines.Assign (formularios);finalmente formas gratuitas;fin; fin;

Aquí se explica cómo obtener la instancia de un formulario web por índice. Para una sola página de formulario, el índice sería 0 (cero).

función WebFormGet (const formNumber: entero; const documento: IHTMLDocument2): IHTMLFormElement; var formas: IHTMLElementCollection; empezar formularios: = documento. Formularios como IHTMLElementCollection; resultado: = formularios.Item (formNumber, ") como IHTMLFormElement fin;

Una vez que tenga el formulario web, puede enumerar todos los elementos de entrada HTML por su nombre, usted puede obtener o establecer el valor para cada uno de los camposy finalmente puedes enviar el formulario web.

Las páginas web pueden alojar formularios web con elementos de entrada como cuadros de edición y listas desplegables que puede controlar y manipular mediante programación desde el código de Delphi.

Una vez que tenga el formulario web, puedeenumerar todos los elementos de entrada HTML por su nombre:

función WebFormFields (const documento: IHTMLDocument2;const nombre del formulario :cuerda): TStringList;var formulario: IHTMLFormElement; campo: elemento IHTMLE; fName: cadena; idx: entero;empezar formulario: = WebFormGet (0, WebBrowser1.DocumentCOMO IHTMLDocument2); resultado: = TStringList.Create;para idx: = 0a -1 + forma.longitudhacer campo de inicio: = form.item (idx, ") como IHTMLElement;Si campo =nulo entonces Continuar; fName: = field.id;Si field.tagName = 'ENTRADA'luego fName: = (campocomo IHTMLInputElement) .name;Si field.tagName = 'SELECCIONAR'luego fName: = (campocomo IHTMLSelectElement) .name;Si field.tagName = 'TEXTAREA'luego fName: = (campocomo IHTMLTextAreaElement) .name; result.Add (fName);finfin;

Cuando conoce los nombres de los campos en un formulario web, puede programar mediante programaciónobtener el valor para un solo campo HTML:

función WebFormFieldValue (const documento: IHTMLDocument2;const formNumber: entero;const nombre del campo :cuerda): cuerdavar formulario: IHTMLFormElement; campo: elemento IHTMLE;empezar formulario: = WebFormGet (formNumber, WebBrowser1.DocumentCOMO IHTMLDocument2); campo: = form.Item (fieldName, ") como IHTMLElement;Si campo =nulo entonces Salida;Si field.tagName = 'ENTRADA'luego resultado: = (campocomo IHTMLInputElement) .value;Si field.tagName = 'SELECCIONAR'luego resultado: = (campocomo IHTMLSelectElement) .value;Si field.tagName = 'TEXTAREA'luego resultado: = (campocomo IHTMLTextAreaElement) .value;fin;

Un ejemplo de uso para obtener el valor de un campo de entrada llamado "URL":

const FIELDNAME = 'url';var doc: IHTMLDocument2; fieldValue:cuerdaempezar doc: = WebBrowser1.DocumentCOMO IHTMLDocument2; fieldValue: = WebFormFieldValue (doc, 0, FIELDNAME); memo1.Lines.Add ('Campo: "URL", valor:' + fieldValue);fin;

Toda la idea no tendría valor si no fuera capaz derellenar elementos de formulario web:

procedimiento WebFormSetFieldValue (const documento: IHTMLDocument2;const formNumber: entero;const fieldName, newValue:cuerda) ; var formulario: IHTMLFormElement; campo: elemento IHTMLE;empezar formulario: = WebFormGet (formNumber, WebBrowser1.DocumentCOMO IHTMLDocument2); campo: = form.Item (fieldName, ")como IHTMLElement;Si campo =nulo entonces Salida;Si field.tagName = 'ENTRADA'luego (campocomo IHTMLInputElement) .value: = newValue;Si field.tagName = 'SELECCIONAR'luego (campocomo IHTMLSelectElement): = newValue;Si field.tagName = 'TEXTAREA'luego (campocomo IHTMLTextAreaElement): = newValue;fin;

Enviar un formulario web

Finalmente, cuando se manipulan todos los campos, es probable que desee enviar el formulario web desde el código de Delphi. Así es cómo:

procedimiento WebFormSubmit (const documento: IHTMLDocument2;const formNumber: entero);var formulario: IHTMLFormElement; campo: elemento IHTMLE;empezar formulario: = WebFormGet (formNumber, WebBrowser1.DocumentCOMO IHTMLDocument2); formulario.enviar;fin;

No todos los formularios web son de "mente abierta"

Algunos formularios web pueden alojar una imagen captcha para evitar que las páginas web se manipulen mediante programación.

Es posible que algunos formularios web no se envíen cuando "hace clic en el botón Enviar". Algunos formularios web ejecutan JavaScript o algún otro procedimiento se ejecuta manejado por el evento "onsubmit" del formulario web.

En cualquier caso, las páginas web se pueden controlar mediante programación, la única pregunta es "¿hasta dónde estás preparado para llegar?"


Ver el vídeo: Autorrellenar Formulario Web Html desde Excel Web form filling (Mayo 2021).