![]() |
Selectfelder mit TWebBrowser ansprechen ?
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
ich möchte für mein Programm einen WebBrowser implementieren der (natürlich in Grenzen) auch einige Dinge automatisiert erledigen kann. Hier ![]() |
Re: Selectfelder mit TWebBrowser ansprechen ?
Hi,
Hier ein paar nützliche Funktionen für Editfelder, Radiobuttons, Checkboxen, Select Felder (Combobox, Dropdown)
Delphi-Quellcode:
unit WebControl;
interface uses Windows, SysUtils, Graphics, Dialogs, Classes, EmbeddedWB, MSHTML_TLB, SHDocVw_TLB, OleCtrls; // Editfeld function ReadEditValue(Webbrowser:TEmbeddedWB;Editname:String):String; procedure SetEditValue(Webbrowser:TEmbeddedWB;Editname,Value:String); // Radiobutton function ReadRadioValue(Webbrowser:TEmbeddedWB;Radioname:String):String; procedure SetRadioStatus(Webbrowser:TEmbeddedWB;Radioname,Value:String;SetValue:Boolean); // Checkbox function ReadCheckboxValue(Webbrowser:TEmbeddedWB;Checkboxname:String):String; function ReadCheckboxStatus(Webbrowser:TEmbeddedWB;Checkboxname:String):Boolean; procedure SetCheckboxStatus(Webbrowser:TEmbeddedWB;Checkboxname:String;Status:Boolean); // Select function ReadSelectValue(Webbrowser:TEmbeddedWB;Selectname:String):String; procedure SetSelectValue(Webbrowser:TEmbeddedWB;Selectname,SelectValue:String); implementation function ReadEditValue(Webbrowser:TEmbeddedWB;Editname:String):String; var Document: IHTMLDocument2; edTest: IHTMLInputTextElement; begin // Referenz auf Dokument if Supports(WebBrowser.Document, IHTMLDocument2, Document) then begin // Referenz auf Eingabe-Control-Element if Supports(Document.all.item(Editname, 0), IHTMLInputTextElement, edTest) then begin // Aktuellen Wert auslesen Result:=(edTest.value); end else begin ShowMessage('Element mit dem Namen "'+Editname+'" existiert ' + 'nicht oder ist kein Text-Input-Element!'); Result:='NIL'; end; end else begin ShowMessage('Kein HTML-Dokument geladen!'); Result:='NIL'; end; end; procedure SetEditValue(Webbrowser:TEmbeddedWB;Editname,Value:String); var Document: IHTMLDocument2; edTest: IHTMLInputTextElement; begin // Referenz auf Dokument if Supports(WebBrowser.Document, IHTMLDocument2, Document) then begin // Referenz auf Eingabe-Control-Element if Supports(Document.all.item(Editname, 0), IHTMLInputTextElement, edTest) then begin // Neuen Wert setzen edTest.value:= Value; end else begin ShowMessage('Element mit dem Namen "'+Editname+'" existiert ' +'nicht oder ist kein Text-Input-Element!'); end; end else begin ShowMessage('Kein HTML-Dokument geladen!'); end; end; // Wert den das RadioButton besitzt zurückgeben function ReadRadioValue(Webbrowser:TEmbeddedWB;Radioname:String):String; var Document: IHTMLDocument2; rbTestList: IHTMLElementCollection; rbTest: IHTMLOptionButtonElement; I: Integer; begin // Referenz auf Dokument if Supports(WebBrowser.Document, IHTMLDocument2, Document) then begin // Referenz auf Eingabe-Control-Element if Supports(Document.all.item(Radioname, EmptyParam), IHTMLElementCollection, rbTestList) then begin // Aktuellen Wert auslesen for I:= 0 to rbTestList.length - 1 do begin // Referenz auf i. RadioButton if Supports(rbTestList.item(I, EmptyParam), IHTMLOptionButtonElement, rbTest) then begin // Anzeigen, wenn dieser RadioButton ausgewählt if rbTest.checked then Result:=rbTest.value; // ShowMessageFmt('Der RadioButton mit dem Wert %s' + // ' ist ausgewählt!', [rbTest.value]); end else begin ShowMessage('Element, das "'+Radioname+'" heißt, ' + 'aber weder RadioButton, noch CheckBox ist!"'); Result:='NIL'; end; end; end else begin ShowMessage('Es muss mindestens ein Element mit dem Namen "' +Radioname+ '" existieren!'); Result:='NIL'; end; end else begin ShowMessage('Kein HTML-Dokument geladen!'); Result:='NIL'; end; end; // Radiobutton der zu der Gruppe "Radioname" gehört und den Wert // "Value" den Boolean Status "SetValue" geben procedure SetRadioStatus(Webbrowser:TEmbeddedWB;Radioname,Value:String;SetValue:Boolean); var Document: IHTMLDocument2; rbTestList: IHTMLElementCollection; rbTest: IHTMLOptionButtonElement; I: Integer; begin // Referenz auf Dokument if Supports(WebBrowser.Document, IHTMLDocument2, Document) then begin // Referenz auf Eingabe-Control-Element if Supports(Document.all.item(Radioname, EmptyParam), IHTMLElementCollection, rbTestList) then begin // Aktuellen Wert auslesen for I:= 0 to rbTestList.length - 1 do begin // Referenz auf i. RadioButton if Supports(rbTestList.item(I, EmptyParam), IHTMLOptionButtonElement, rbTest) then begin // Anzeigen, wenn dieser RadioButton ausgewählt //if rbTest.checked then Result:=rbTest.value; end else begin ShowMessage('Element, das "'+Radioname+'" heißt, ' + 'aber weder RadioButton, noch CheckBox ist!"'); end; end; // Neuen Wert setzen for I:= 0 to rbTestList.length - 1 do begin // Referenz auf i. RadioButton if Supports(rbTestList.item(I, EmptyParam), IHTMLOptionButtonElement, rbTest) then begin // Wir möchten den RadioButton mit dem Wert "3" aktivieren if rbTest.value = Value then rbTest.checked:= SetValue; end; end; end else begin ShowMessage('Es muss mindestens ein Element mit dem Namen "' +Radioname+ '" existieren!'); end; end else begin ShowMessage('Kein HTML-Dokument geladen!'); end; end; function ReadCheckboxValue(Webbrowser:TEmbeddedWB;Checkboxname:String):String; var Document: IHTMLDocument2; CheckboxTest: IHTMLOptionButtonElement; begin // Referenz auf Dokument if Supports(WebBrowser.Document, IHTMLDocument2, Document) then begin // Referenz auf Eingabe-Control-Element if Supports(Document.all.item(Checkboxname, 0), IHTMLOptionButtonElement, CheckboxTest) then begin // Aktuellen Wert auslesen Result:=CheckboxTest.value; //If CheckboxTest.status=true then Showmessage('True') else Showmessage('False'); //ShowMessage(CheckboxTest.status); end else begin ShowMessage('Element mit dem Namen "'+Checkboxname+'" existiert' + 'nicht oder ist kein Checkbox-Input-Element!'); Result:='NIL'; end; end else begin ShowMessage('Kein HTML-Dokument geladen!'); Result:='NIL'; end; end; function ReadCheckboxStatus(Webbrowser:TEmbeddedWB;Checkboxname:String):Boolean; var Document: IHTMLDocument2; CheckboxTest: IHTMLOptionButtonElement; begin Result:=False; // Referenz auf Dokument if Supports(WebBrowser.Document, IHTMLDocument2, Document) then begin // Referenz auf Eingabe-Control-Element if Supports(Document.all.item(Checkboxname, 0), IHTMLOptionButtonElement, CheckboxTest) then begin // Aktuellen Wert auslesen Result:=CheckboxTest.status; end else begin ShowMessage('Element mit dem Namen "'+Checkboxname+'" existiert' + 'nicht oder ist kein Checkbox-Input-Element!'); end; end else begin ShowMessage('Kein HTML-Dokument geladen!'); end; end; procedure SetCheckboxStatus(Webbrowser:TEmbeddedWB;Checkboxname:String;Status:Boolean); var Document: IHTMLDocument2; CheckboxTest: IHTMLOptionButtonElement; begin // Referenz auf Dokument if Supports(WebBrowser.Document, IHTMLDocument2, Document) then begin // Referenz auf Eingabe-Control-Element if Supports(Document.all.item(Checkboxname, 0), IHTMLOptionButtonElement, CheckboxTest) then begin CheckboxTest.status:=Status; end else begin ShowMessage('Element mit dem Namen "'+Checkboxname+'" existiert' + 'nicht oder ist kein Checkbox-Input-Element!'); end; end else begin ShowMessage('Kein HTML-Dokument geladen!'); end; end; function ReadSelectValue(Webbrowser:TEmbeddedWB;Selectname:String):String; var Document: IHTMLDocument2; edTest: IHTMLSelectElement; begin // Referenz auf Dokument if Supports(WebBrowser.Document, IHTMLDocument2, Document) then begin // Referenz auf Eingabe-Control-Element if Supports(Document.all.item(Selectname, 0), IHTMLSelectElement, edTest) then begin // Aktuellen Wert auslesen Result:=edTest.value; // Neuen Wert setzen //edTest.value:= 'NineBerry is Great!'; end else begin ShowMessage('Element mit dem Namen "'+Selectname+'" existiert ' + 'nicht oder ist kein Select-Element!'); Result:='NIL'; end; end else begin ShowMessage('Kein HTML-Dokument geladen!'); Result:='NIL'; end; end; procedure SetSelectValue(Webbrowser:TEmbeddedWB;Selectname,SelectValue:String); var Document: IHTMLDocument2; edTest: IHTMLSelectElement; begin // Referenz auf Dokument if Supports(WebBrowser.Document, IHTMLDocument2, Document) then begin // Referenz auf Eingabe-Control-Element if Supports(Document.all.item(Selectname, 0), IHTMLSelectElement, edTest) then begin // Neuen Wert setzen edTest.value:= SelectValue; end else begin ShowMessage('Element mit dem Namen "'+Selectname+'" existiert ' + 'nicht oder ist kein Select-Element!'); end; end else begin ShowMessage('Kein HTML-Dokument geladen!'); end; end; |
Re: Selectfelder mit TWebBrowser ansprechen ?
Hi toms,
das sieht ja schon mal sehr vielversprechend aus. Allerdings funktioniert es bei einem ersten Test bei mir noch nicht richtig, vielleicht weißt du ja was ich falsch mache. Implementierung:
Delphi-Quellcode:
Als Testbeispiel habe ich die die Selectfelder von der Web.de-Registrierungsseite benutzt (
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, MSHTML, StdCtrls, SHDocVw, OleCtrls; function ReadSelectValue(Webbrowser:TWebBrowser;Selectname:String):String; implementation function ReadSelectValue(Webbrowser:TWebBrowser;Selectname:String):String; var Document: IHTMLDocument2; edTest: IHTMLSelectElement; begin // Referenz auf Dokument if Supports(WebBrowser.Document, IHTMLDocument2, Document) then begin // Referenz auf Eingabe-Control-Element if Supports(Document.all.item(Selectname, 0), IHTMLSelectElement, edTest) then begin // Aktuellen Wert auslesen Result:=edTest.value; // Neuen Wert setzen //edTest.value:= 'NineBerry is Great!'; end else begin ShowMessage('Element mit dem Namen "'+Selectname+'" existiert ' + 'nicht oder ist kein Select-Element!'); Result:='NIL'; end; end else begin ShowMessage('Kein HTML-Dokument geladen!'); Result:='NIL'; end; end; ![]()
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin showmessage(ReadSelectValue(WebBrowser1,'cf_land')); end; Ausgeben tut er mir daraufhin jedoch nur eine leere Messagebox, gefunden haben muss er das entsprechende Selectfeld jedoch, sonst hätte er eine entsprechende Fehlermeldung zurückgegeben. |
Re: Selectfelder mit TWebBrowser ansprechen ?
Alles klar, habe es mit Hilfe hinbekommen. ReadCheckboxValue, ReadSelectValue und SetSelectValue sind nicht wirklich ausgereift bzw. im Falle der letzten beiden sogar nicht funktionsfähig. ReadRadioValue und SetRadioStatus habe ich nicht gebraucht und daher noch nicht probiert. Trotzdem danke für die Hilfe, letztendlich hat es mit etwas Friemelei ja funktioniert :-D
|
Re: Selectfelder mit TWebBrowser ansprechen ?
Wie hast du es gelöst?
|
Re: Selectfelder mit TWebBrowser ansprechen ?
Das edTest.value muss richtig edtest.SelectedIndex heißen. SelectedIndex ist vom Typ Integer, die Prozedur/Funktion muss dementsprechend noch angepasst werden.
|
Re: Selectfelder mit TWebBrowser ansprechen ?
Zitat:
Wie kriegt man aber den ausgewaehlten Text? |
Re: Selectfelder mit TWebBrowser ansprechen ?
Zitat:
|
Re: Selectfelder mit TWebBrowser ansprechen ?
Ich hab da ein kleines Problem. In meinem Quellcode hat die Select-Box keinen Namen. Ich hab versucht, das einfach einen Leerstring zu übergeben, aber das funzt nicht so recht. Gibt es ne Möglichkeit vorher alle Selectboxen auflisten zu lassen, die dort existieren, oder sonst irgendwie an die Box ranzukommen. Es gibt in der Seite auch nur diese eine Box...
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz