![]() |
Button in Webbrowser Anklicken.......
Hallo
Ich verwende folgenden code:
Delphi-Quellcode:
Den ich von hier hab:
unit WbCtrl;
interface uses Windows, Classes, Forms, ShDocVw, WinInet, ActiveX; function WbEnumFields(WebBrowser: TWebBrowser; SL: TStrings): Boolean; function WbSetEditField(WebBrowser: TWebBrowser; FieldName: string; Value: string): Boolean; function WbGetEditField(WebBrowser: TWebBrowser; FieldName: string; var Value: string): Boolean; function WbSetCheckBoxField(WebBrowser: TWebBrowser; FieldName: string; Checked: boolean): Boolean; function WbGetCheckBoxField(WebBrowser: TWebBrowser; FieldName: string; var Checked: boolean): Boolean; function WbBtnClick(WebBrowser: TWebBrowser; FieldName: string): Boolean; implementation // Lese alle Feldnamen aus // Übergabe: // Webbroweser: Webbrowser, der die aktuelle Seite enthält // Sl : Die Stringlist zu der alle Feldnamen hinzugefügt werden sollen // Result : true -> Feld existiert // : false -> Feld existiert nicht // oder kein Dokument geladen function WbEnumFields(WebBrowser: TWebBrowser; SL: TStrings): Boolean; var i, j: Integer; FormItem: Variant; begin Result := True; //Hat das Dokument Forms? (Frames) if WebBrowser.OleObject.Document.all.tags('FORM').Length = 0 then begin Result := False; Exit; end; //Bearbeite alle Frames for I := 0 to WebBrowser.OleObject.Document.forms.Length - 1 do begin FormItem := WebBrowser.OleObject.Document.forms.Item(I); // Bearbeite alle Felder eines Frames for j := 0 to FormItem.Length - 1 do begin try SL.Add(FormItem.Item(j).Name); except Result := False; Exit; end; end; end; end; // Durchsuche alle Formulare im Webbrowser nach dem Feldnamen // Übergabe: // Webbroweser: Webbrowser, der die aktuelle Seite enthält // FieldName : Name des gesuchten Felds // Rückgabe // Field : Field.x : Frame Nummer // : Fielf.y : Feld Nummer im Frame // Result : true -> Feld existiert // : false -> Feld existiert nicht // oder kein Dokument geladen function WbFindField(WebBrowser: TWebBrowser; FieldName: string; var Field: TPoint): boolean; var i, j: Integer; FormItem: Variant; begin Result := False; //Hat das Dokument Forms? (Frames) if WebBrowser.OleObject.Document.all.tags('FORM').Length = 0 then begin Exit; end; //Bearbeite alle Frames for I := 0 to WebBrowser.OleObject.Document.forms.Length - 1 do begin FormItem := WebBrowser.OleObject.Document.forms.Item(I); // Bearbeite alle Felder eines Frames for j := 0 to FormItem.Length - 1 do begin try // Feldname wurde gefunden // gebe ihn zurück und ende if FormItem.Item(j).Name = FieldName then begin Field.x := i; // Position speichern Field.Y := j; Result := True; exit; end; except Exit; end; end; end; end; // Trage Text in ein Editfeld ein // Übergabe: // Webbroweser: Webbrowser, der die aktuelle Seite enthält // FieldName : Name des gesuchten Felds // Rückgabe // Value : Der Text, der in das Feld hinein soll // Result : true -> kein Fehler // : false -> Feld existiert nicht // oder kein Dokument geladen function WbSetEditField(WebBrowser: TWebBrowser; FieldName: string; Value: string): Boolean; var Field: TPoint; begin // Position des Felds holen if not WbFindField(WebBrowser, FieldName, Field) then begin Result := false; // Feld existiert nicht exit; // Ende end; try // Feld füllen WebBrowser.OleObject.Document.forms.Item(Field.x).Item(Field.y).Value := Value; Result := True; except Result := false; Exit; end; end; // Lese Text aus einem Editfeld // Übergabe: // Webbroweser: Webbrowser, der die aktuelle Seite enthält // FieldName : Name des gesuchten Felds // Rückgabe // Value : Text, der im Feld steht // Result : true -> kein Fehler // : false -> Feld existiert nicht // oder kein Dokument geladen function WbGetEditField(WebBrowser: TWebBrowser; FieldName: string; var Value: string): Boolean; var Field: TPoint; begin // Position des Felds holen if not WbFindField(WebBrowser, FieldName, Field) then begin Result := false; // Feld existiert nicht exit; // Ende end; try // Feld lesen Value := WebBrowser.OleObject.Document.forms.Item(Field.x).Item(Field.y).Value; Result := True; except Result := false; Exit; end; end; // Setze eine Checkbox // Übergabe: // Webbroweser: Webbrowser, der die aktuelle Seite enthält // FieldName : Name des gesuchten Felds // Rückgabe // Checked : Zustand // Result : true -> kein Fehler // : false -> Feld existiert nicht // oder kein Dokument geladen function WbSetCheckBoxField(WebBrowser: TWebBrowser; FieldName: string; Checked: boolean): Boolean; var Field: TPoint; begin // Position des Felds holen if not WbFindField(WebBrowser, FieldName, Field) then begin Result := false; // Feld existiert nicht exit; // Ende end; try // CheckBox setzen WebBrowser.OleObject.Document.forms.Item(Field.x).Item(Field.y).Checked := Checked; Result := True; except Result := false; Exit; end; end; // Lese eine Checkbox // Übergabe: // Webbroweser: Webbrowser, der die aktuelle Seite enthält // FieldName : Name des gesuchten Felds // Rückgabe // Checked : Zustand // Result : true -> kein Fehler // : false -> Feld existiert nicht // oder kein Dokument geladen function WbGetCheckBoxField(WebBrowser: TWebBrowser; FieldName: string; var Checked: boolean): Boolean; var Field: TPoint; begin // Position des Felds holen if not WbFindField(WebBrowser, FieldName, Field) then begin Result := false; // Feld existiert nicht exit; // Ende end; try // CheckBox setzen Checked := WebBrowser.OleObject.Document.forms.Item(Field.x).Item(Field.y).Checked; Result := True; except Result := false; Exit; end; end; // Click einen Button // Übergabe: // Webbroweser: Webbrowser, der die aktuelle Seite enthält // FieldName : Name des Button // Rückgabe // Result : true -> kein Fehler // : false -> Feld existiert nicht // oder kein Dokument geladen function WbBtnClick(WebBrowser: TWebBrowser; FieldName: string): Boolean; var Field: TPoint; begin // Position des Felds holen if not WbFindField(WebBrowser, FieldName, Field) then begin Result := false; // Feld existiert nicht exit; // Ende end; try // CheckBox setzen WebBrowser.OleObject.Document.forms.Item(Field.x).Item(Field.y).Click; Result := True; except Result := false; Exit; end; end; end. ![]() Dieser Funktioniert eigentlich auch sehr gut.... Nur habe ich ein kleines problem.... Ich habe innerhalb eines Formulares 2 buttons... Jedoch haben beide keine eigene Bezeichnung sie werden jedoch wenn man folgendes macht
Delphi-Quellcode:
Auch aufgelistet doch leider als leere zeile...
WbEnumFields(WebBrowser1, ListBox1.Items);
Wenn ich nun durch
Delphi-Quellcode:
Den Button auswähle, so klickt es einen button an jedoch der erste ich brauche jedoch den zweiten....
WbBtnClick(Webbrowser1,'');
Meine frage nun also.... Wie könnte ich den zweiten button anklicken lassen? Gibts ne art Index? Weil der zweite button ja bestimmt irgendwie unterschieden werden kann.... Danke schonmal |
Re: Button in Webbrowser Anklicken.......
Hallo
Haben die Buttons eine ID? Wie sieht der HTML Code der Buttons aus (Codeauszug)? |
Re: Button in Webbrowser Anklicken.......
Ich habe genau das gleiche Problem!
Der Thread ist ja noch nicht soo alt, hat vielleicht jemand inzwischen eine Lösung? Das wäre super! MfG Edit: Ich habe es jetzt so versucht: WebBrowser1.OleObject.Document.Forms.item('downloa d-box').elements.item('').click; Weil download-box ist der Name dieser Form und der Name des Buttons ist einfach leer. Aber ich kriege da immer Zugriffsverletzung! Wäre echt toll, wenn mir jemand helfen könnte! |
Re: Button in Webbrowser Anklicken.......
Zitat:
Zitat:
|
Re: Button in Webbrowser Anklicken.......
Ich denke schon, hier der Auszug aus dem Quelltext:
type="submit" value="Runterladen!" Name steht da nicht und eine Funktion in Delphi hat ja auch einen leeren String als Name zurückgegeben, das war ja der ursprung des Problems. Also ich weiß nicht genau, was da jetzt die ID ist. Dieses Thema habe ich auch gefunden und zich mal gelesen, aber ich kriege es trotzdem nicht hin! ![]() |
Re: Button in Webbrowser Anklicken.......
Zitat:
Sonst sähe der Code so aus:
Code:
Ich vermute, dass man irgendwie einen Index angeben kann, um bsp. den 2. Button anzusprechen. Aber wie das geht, weiß ich nicht.
<input type="submit" name="button_name" [color=#ff0000]id="button_id"[/color] value="button_value" />
Grüße, Matze |
Re: Button in Webbrowser Anklicken.......
Was genau wird eigentilch bezweckt? Wenn die grafische Oberfläche nicht benötigt wird wäre TIdHttp vielleicht die bessere alternative. Oder muss das ganze unbedingt in einem TWebbrowser ablaufen? Denn wenn man zum Beispiel die ganzen bunten Bildchen die auf einer Webseite angezeigt werden gar nicht braucht ist es ja Unsinn diese mit laden zu lassen. Ebenso wie es Unsinn ist die Absender-Seite vorher zu laden wenn darauf keine relevanten Informationen sind welche an das Ziel geschickt werden müssen.
|
Re: Button in Webbrowser Anklicken.......
Du hast eigentlich Recht, ich brauche eigentlich die Oberfläche nicht.
Es macht sich nur ganz gut mit dem Browser finde ich. Also mein Ziel: Ein oder mehrere Editfelder ausfüllen und Buttons drücken (das problem mit dem leeren namen) und dann noch nen captcha anzeigen und nen button drücken, dazu brauche ich doch dann eh nen webbrowser oder nicht? also wenn das mit den 2 buttons irgendwie gehen würde mit dem webbrowser wäre schon cool :thumb: |
Re: Button in Webbrowser Anklicken.......
Wo ich das mit der Captcha lese, muss ich diese Frage stellen:
Ist der Betreiber der Website damit einverstanden, dass du automatisiert darauf zugreifst? |
Re: Button in Webbrowser Anklicken.......
Habe ich mir schon fast gedacht ;)
Ja, ich will für die Seite halt nen kleines Tool schreiben, das haben schon mehrere gemacht, ob es dann freigeschaltet wird weiß ich nicht, aber wenn nicht, hab ich wenigstens was dazugelernt für Delphi :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:03 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