Popolare / Invia moduli usando 'TWebBrowser' in Delphi

Il TWebBrowser Il controllo Delphi fornisce l'accesso alla funzionalità del browser Web dalle tue app Delphi, per consentirti di creare un Web personalizzato applicazione di navigazione o per aggiungere funzionalità di navigazione in Internet, file e rete, visualizzazione di documenti e download di dati applicazioni.

Moduli Web

UN modulo web o a modulo su una pagina web consente a un visitatore di una pagina Web di inserire dati che, nella maggior parte dei casi, vengono inviati al server per l'elaborazione.

Il modulo Web più semplice potrebbe essere costituito da uno elemento di input (modifica controllo) e a Invia pulsante. La maggior parte dei motori di ricerca Web (come Google) utilizza un modulo Web di questo tipo per consentire la ricerca in Internet.

Moduli Web più complessi includono elenchi a discesa, caselle di controllo, pulsanti di opzione, ecc. Un modulo Web è molto simile a un modulo Windows standard con input di testo e controlli di selezione.

Ogni modulo includerebbe un pulsante - un pulsante di invio - che indica al browser di agire sul modulo Web (in genere per inviarlo a un server Web per l'elaborazione).

instagram viewer

Compilazione di moduli Web a livello di programmazione

Se nell'applicazione desktop si utilizza TWebBrowser per visualizzare le pagine Web, è possibile controllare a livello di codice i moduli Web: manipolare, modificare, compilare, popolare i campi di un modulo Web e inviarlo.

Ecco una raccolta di funzioni personalizzate di Delphi che è possibile utilizzare per elencare tutti i moduli Web in una pagina Web, recuperare elementi di input, popolare i campi a livello di codice e infine inviare il modulo.

Per seguire più facilmente gli esempi, supponiamo che esista un controllo TWebBrowser denominato "WebBrowser1" in un modulo Delphi (Windows standard).

Nota: è necessario aggiungere MSHTML alla tua clausola usi al fine di compilare i metodi elencati qui.

Elenca i nomi dei moduli Web, ottieni un modulo Web per indice

Nella maggior parte dei casi, una pagina Web ha un solo modulo Web, ma alcune pagine Web potrebbero avere più di un modulo Web. Ecco come ottenere i nomi di tutti i moduli Web su una pagina Web:

funzione WebFormNames (const documento: IHTMLDocument2): TStringList; var moduli: IHTMLElementCollection; modulo: IHTMLFormElement; idx: intero; inizio moduli: = documento. Moduli come IHTMLElementCollection; risultato: = TStringList. Creare; per idx: = 0 per -1 + forme.lunghezza fareinizio form: = forms.item (idx, 0) come IHTMLFormElement; risultato. Aggiungi (form.name); fine; fine; 

Un semplice utilizzo per visualizzare l'elenco dei nomi dei moduli Web in un TMemo:

var forme: TStringList; inizio form: = WebFormNames (WebBrowser1.Document COME IHTMLDocument2); provare memo1.Lines. Assegna (moduli); infine le forme. Gratuito; fine; fine; 

Ecco come ottenere l'istanza di un modulo Web per indice. Per una pagina a modulo singolo l'indice sarebbe 0 (zero).

funzione WebFormGet (const formNumber: numero intero; const documento: IHTMLDocument2): IHTMLFormElement; var moduli: IHTMLElementCollection; inizio moduli: = documento. Le forme come IHTMLElementCollection; risultato: = moduli. Articolo (formNumber, '') come IHTMLFormElement. fine; 

Una volta che hai il modulo web, puoi farlo elenca tutti gli elementi di input HTML in base al loro nome, Puoi ottenere o impostare il valore per ciascuno dei campie, infine, puoi invia il modulo web.

Le pagine Web possono ospitare moduli Web con elementi di input come caselle di modifica ed elenchi a discesa che è possibile controllare e manipolare a livello di codice dal codice Delphi.

Una volta che hai il modulo web, puoi farlo elenca tutti gli elementi di input HTML in base al loro nome:

funzione WebFormFields (const documento: IHTMLDocument2; const formName: corda): TStringList; var modulo: IHTMLFormElement; campo: IHTMLElement; fName: string; idx: intero; inizio form: = WebFormGet (0, WebBrowser1.Document COME IHTMLDocument2); risultato: = TStringList. Creare; per idx: = 0 per -1 + form.length fare campo iniziale: = form.item (idx, '') come IHTMLElement; Se campo = zero allora Continua; fName: = field.id; Se field.tagName = 'INPUT' poi fName: = (campo come IHTMLInputElement) .name; Se field.tagName = 'SELEZIONA' poi fName: = (campo come IHTMLSelectElement) .name; Se field.tagName = 'TEXTAREA' poi fName: = (campo come IHTMLTextAreaElement) .name; risultato. Aggiungi (fName); fine; fine;

Quando conosci i nomi dei campi in un modulo web, puoi programmarli ottenere il valore per un singolo campo HTML:

funzione WebFormFieldValue ( const documento: IHTMLDocument2; const formNumber: numero intero; const fieldName: corda): corda; var modulo: IHTMLFormElement; campo: IHTMLElement; inizio form: = WebFormGet (formNumber, WebBrowser1.Document COME IHTMLDocument2); campo: = modulo. Item (fieldName, '') come IHTMLElement; Se campo = zero allora Uscita; Se field.tagName = 'INPUT' poi risultato: = (campo come IHTMLInputElement) .value; Se field.tagName = 'SELEZIONA' poi risultato: = (campo come IHTMLSelectElement) .value; Se field.tagName = 'TEXTAREA' poi risultato: = (campo come IHTMLTextAreaElement) .value; fine;

Un esempio di utilizzo per ottenere il valore di un campo di input denominato "URL":

const FIELDNAME = 'url'; var doc: IHTMLDocument2; fieldValue: corda; inizio doc: = WebBrowser1.Document COME IHTMLDocument2; fieldValue: = WebFormFieldValue (doc, 0, FIELDNAME); memo1.Lines. Aggiungi ('Campo: "URL", valore:' + fieldValue);fine;

L'intera idea non avrebbe alcun valore se non fosse possibile compila gli elementi del modulo web:

procedura WebFormSetFieldValue (const documento: IHTMLDocument2; const formNumber: numero intero; const fieldName, newValue: corda); var modulo: IHTMLFormElement; campo: IHTMLElement; inizio form: = WebFormGet (formNumber, WebBrowser1.Document COME IHTMLDocument2); campo: = modulo. Articolo (fieldName, '') come IHTMLElement; Se campo = zero allora Uscita; Se field.tagName = 'INPUT' poi (campo come IHTMLInputElement) .value: = newValue; Se field.tagName = 'SELEZIONA' poi (campo come IHTMLSelectElement): = newValue; Se field.tagName = 'TEXTAREA' poi (campo come IHTMLTextAreaElement): = newValue; fine;

Invia un modulo Web

Infine, quando tutti i campi vengono manipolati, probabilmente vorrai inviare il modulo web dal codice Delphi. Ecco come:

procedura WebFormSubmit ( const documento: IHTMLDocument2; const formNumber: intero); var modulo: IHTMLFormElement; campo: IHTMLElement; inizio form: = WebFormGet (formNumber, WebBrowser1.Document COME IHTMLDocument2); form.submit; fine;

Non tutti i moduli Web sono "di mentalità aperta"

Alcuni moduli Web potrebbero ospitare un'immagine captcha per impedire la manipolazione programmatica delle pagine Web.

Alcuni moduli Web potrebbero non essere inviati quando "fai clic sul pulsante di invio". Alcuni moduli Web eseguono JavaScript o altre procedure vengono eseguite dall'evento "onsubmit" del modulo Web.

In ogni caso, le pagine Web possono essere controllate a livello di programmazione, l'unica domanda è "fino a che punto sei disposto ad andare?"

instagram story viewer