Remplir / soumettre des formulaires à l'aide de 'TWebBrowser' dans Delphi

le TWebBrowser Le contrôle Delphi donne accès à la fonctionnalité du navigateur Web à partir de vos applications Delphi - pour vous permettre de créer un site Web personnalisé application de navigation ou pour ajouter des fonctionnalités de navigation sur Internet, de fichiers et de réseau, de visualisation de documents et de téléchargement de données à votre applications.

Formulaires Web

UNE formulaire web ou un formulaire sur une page web permet à un visiteur de page Web d'entrer des données qui, dans la plupart des cas, sont envoyées au serveur pour traitement.

Le formulaire Web le plus simple pourrait consister en un élément d'entrée (contrôle d'édition) et un soumettre bouton. La plupart des moteurs de recherche Web (comme Google) utilisent un tel formulaire Web pour vous permettre de rechercher sur Internet.

Des formulaires Web plus complexes incluraient des listes déroulantes, des cases à cocher, des boutons radio, etc. Un formulaire Web ressemble beaucoup à un formulaire Windows standard avec des commandes de saisie et de sélection de texte.

instagram viewer

Chaque formulaire comprendrait un bouton - un bouton d'envoi - qui indique au navigateur de prendre des mesures sur le formulaire Web (généralement pour l'envoyer à un serveur Web pour traitement).

Remplissage de formulaires Web par programme

Si dans votre application de bureau vous utilisez TWebBrowser pour afficher des pages Web, vous pouvez contrôler par programme les formulaires Web: manipuler, modifier, remplir, remplir les champs d'un formulaire Web et le soumettre.

Voici une collection de fonctions Delphi personnalisées que vous pouvez utiliser pour répertorier tous les formulaires Web sur une page Web, pour récupérer des éléments d'entrée, pour remplir par programmation des champs et pour enfin soumettre le formulaire.

Pour suivre plus facilement les exemples, supposons qu'il existe un contrôle TWebBrowser nommé "WebBrowser1" sur un formulaire Delphi (Windows standard).

Remarque: vous devez ajouter mshtml à votre clause uses afin de compiler les méthodes listées ici.

Lister les noms des formulaires Web, obtenir un formulaire Web par index

Une page Web aurait dans la plupart des cas un seul formulaire Web, mais certaines pages Web pourraient avoir plusieurs formulaires Web. Voici comment obtenir les noms de tous les formulaires Web sur une page Web:

une fonction WebFormNames (const document: IHTMLDocument2): TStringList; var formulaires: IHTMLElementCollection; forme: IHTMLFormElement; idx: entier; commencer formulaires: = document. Formulaires comme IHTMLElementCollection; résultat: = TStringList. Créer; pour idx: = 0 à -1 + forme.longueur fairecommencer form: = forms.item (idx, 0) as IHTMLFormElement; résultat. Ajouter (form.name); fin; fin; 

Une utilisation simple pour afficher la liste des noms de formulaires Web dans un TMemo:

var formulaires: TStringList; commencer formulaires: = WebFormNames (WebBrowser1.Document COMME IHTMLDocument2); essayer memo1.Lines. Attribuer (formulaires); enfin formes. Gratuit; fin; fin; 

Voici comment obtenir l'instance d'un formulaire Web par index. Pour une page de formulaire unique, l'index serait 0 (zéro).

une fonction WebFormGet (const formNumber: entier; const document: IHTMLDocument2): IHTMLFormElement; var formulaires: IHTMLElementCollection; commencer formulaires: = document. Formes comme IHTMLElementCollection; résultat: = formes. Article (formNumber, '') comme IHTMLFormElement. fin; 

Une fois que vous avez le formulaire Web, vous pouvez répertorier tous les éléments d'entrée HTML par leur nom, vous pouvez obtenir ou définir la valeur de chacun des champset enfin, vous pouvez soumettre le formulaire web.

Les pages Web peuvent héberger des formulaires Web avec des éléments d'entrée tels que des zones d'édition et des listes déroulantes que vous pouvez contrôler et manipuler par programmation à partir du code Delphi.

Une fois que vous avez le formulaire Web, vous pouvez répertorier tous les éléments d'entrée HTML par leur nom:

une fonction WebFormFields (const document: IHTMLDocument2; const nom de forme: chaîne): TStringList; var forme: IHTMLFormElement; champ: IHTMLElement; fName: chaîne; idx: entier; commencer formulaire: = WebFormGet (0, WebBrowser1.Document COMME IHTMLDocument2); résultat: = TStringList. Créer; pour idx: = 0 à -1 + forme.longueur faire champ de début: = form.item (idx, '') comme IHTMLElement; si champ = nul alors Continuer; fName: = field.id; si field.tagName = 'INPUT' ensuite fName: = (champ comme IHTMLInputElement) .name; si field.tagName = 'SELECT' ensuite fName: = (champ comme IHTMLSelectElement) .name; si field.tagName = 'TEXTAREA' ensuite fName: = (champ comme IHTMLTextAreaElement) .name; résultat. Ajouter (fName); fin; fin;

Lorsque vous connaissez les noms des champs d'un formulaire Web, vous pouvez par programmation obtenir la valeur pour un seul champ HTML:

une fonction WebFormFieldValue ( const document: IHTMLDocument2; const formNumber: entier; const nom de domaine: chaîne): chaîne; var forme: IHTMLFormElement; champ: IHTMLElement; commencer form: = WebFormGet (formNumber, WebBrowser1.Document COMME IHTMLDocument2); champ: = formulaire. Item (fieldName, '') comme IHTMLElement; si champ = nul alors Sortie; si field.tagName = 'INPUT' ensuite résultat: = (champ comme IHTMLInputElement) .value; si field.tagName = 'SELECT' ensuite résultat: = (champ comme IHTMLSelectElement) .value; si field.tagName = 'TEXTAREA' ensuite résultat: = (champ comme IHTMLTextAreaElement) .value; fin;

Un exemple d'utilisation pour obtenir la valeur d'un champ de saisie nommé "URL":

const FIELDNAME = 'url'; var doc: IHTMLDocument2; fieldValue: chaîne; commencer doc: = WebBrowser1.Document COMME IHTMLDocument2; fieldValue: = WebFormFieldValue (doc, 0, FIELDNAME); memo1.Lines. Add ('Field: "URL", value:' + fieldValue);fin;

L'idée entière n'aurait aucune valeur si vous ne pouviez pas remplir les éléments du formulaire web:

procédure WebFormSetFieldValue (const document: IHTMLDocument2; const formNumber: entier; const fieldName, newValue: chaîne); var forme: IHTMLFormElement; champ: IHTMLElement; commencer form: = WebFormGet (formNumber, WebBrowser1.Document COMME IHTMLDocument2); champ: = formulaire. Élément (fieldName, '') comme IHTMLElement; si champ = nul alors Sortie; si field.tagName = 'INPUT' ensuite (champ comme IHTMLInputElement) .value: = newValue; si field.tagName = 'SELECT' ensuite (champ comme IHTMLSelectElement): = newValue; si field.tagName = 'TEXTAREA' ensuite (champ comme IHTMLTextAreaElement): = newValue; fin;

Soumettre un formulaire Web

Enfin, lorsque tous les champs sont manipulés, vous voudrez probablement soumettre le formulaire Web à partir du code Delphi. Voici comment:

procédure WebFormSubmit ( const document: IHTMLDocument2; const formNumber: entier); var forme: IHTMLFormElement; champ: IHTMLElement; commencer form: = WebFormGet (formNumber, WebBrowser1.Document COMME IHTMLDocument2); form.submit; fin;

Tous les formulaires Web ne sont pas «ouverts d'esprit»

Certains formulaires Web peuvent héberger une image captcha pour empêcher les pages Web d'être manipulées par programme.

Certains formulaires Web peuvent ne pas être envoyés lorsque vous "cliquez sur le bouton Envoyer". Certains formulaires Web exécutent JavaScript ou une autre procédure est exécutée par l'événement "onsubmit" du formulaire Web.

Dans tous les cas, les pages Web peuvent être contrôlées par programmation, la seule question est "jusqu'où êtes-vous prêt à aller?"

instagram story viewer