AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Button in Webbrowser Anklicken.......
Thema durchsuchen
Ansicht
Themen-Optionen

Button in Webbrowser Anklicken.......

Ein Thema von hedie · begonnen am 19. Feb 2009 · letzter Beitrag vom 17. Feb 2014
Antwort Antwort
Seite 1 von 2  1 2      
hedie

Registriert seit: 12. Dez 2005
Ort: Schweiz
1.024 Beiträge
 
Delphi XE6 Starter
 
#1

Button in Webbrowser Anklicken.......

  Alt 19. Feb 2009, 18:31
Hallo

Ich verwende folgenden code:

Delphi-Quellcode:
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.
Den ich von hier hab: http://www.delphi-library.de/topic_m...b75b70cff51694

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

WbEnumFields(WebBrowser1, ListBox1.Items); Auch aufgelistet doch leider als leere zeile...

Wenn ich nun durch

WbBtnClick(Webbrowser1,''); Den Button auswähle, so klickt es einen button an jedoch der erste ich brauche jedoch den zweiten....

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
Claudio
Tu was du nicht lassen kannst
- http://endasmedia.ch
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#2

Re: Button in Webbrowser Anklicken.......

  Alt 20. Feb 2009, 02:40
Hallo

Haben die Buttons eine ID?
Wie sieht der HTML Code der Buttons aus (Codeauszug)?
Thomas
  Mit Zitat antworten Zitat
Paul0703

Registriert seit: 24. Sep 2008
Ort: Halle(Saale)
138 Beiträge
 
Delphi 7 Professional
 
#3

Re: Button in Webbrowser Anklicken.......

  Alt 15. Aug 2009, 16:10
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!
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#4

Re: Button in Webbrowser Anklicken.......

  Alt 16. Aug 2009, 07:37
Zitat von Paul0703:
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!
Dann wiederhole ich einfach mal meine "alte" Frage...
Zitat von toms:
Hallo
Haben die Buttons eine ID?
Wie sieht der HTML Code der Buttons aus (Codeauszug)?
Thomas
  Mit Zitat antworten Zitat
Paul0703

Registriert seit: 24. Sep 2008
Ort: Halle(Saale)
138 Beiträge
 
Delphi 7 Professional
 
#5

Re: Button in Webbrowser Anklicken.......

  Alt 16. Aug 2009, 10:30
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!
http://www.delphipraxis.net/internal...browser+button
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Button in Webbrowser Anklicken.......

  Alt 16. Aug 2009, 10:44
Zitat von Paul0703:
Also ich weiß nicht genau, was da jetzt die ID ist.
Er hat keine ID.

Sonst sähe der Code so aus:
Code:
<input type="submit" name="button_name" [color=#ff0000]id="button_id"[/color] value="button_value" />
Ich vermute, dass man irgendwie einen Index angeben kann, um bsp. den 2. Button anzusprechen. Aber wie das geht, weiß ich nicht.

Grüße, Matze
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Button in Webbrowser Anklicken.......

  Alt 16. Aug 2009, 11:34
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Paul0703

Registriert seit: 24. Sep 2008
Ort: Halle(Saale)
138 Beiträge
 
Delphi 7 Professional
 
#8

Re: Button in Webbrowser Anklicken.......

  Alt 16. Aug 2009, 12:23
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
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Button in Webbrowser Anklicken.......

  Alt 16. Aug 2009, 12:35
Wo ich das mit der Captcha lese, muss ich diese Frage stellen:
Ist der Betreiber der Website damit einverstanden, dass du automatisiert darauf zugreifst?
  Mit Zitat antworten Zitat
Paul0703

Registriert seit: 24. Sep 2008
Ort: Halle(Saale)
138 Beiträge
 
Delphi 7 Professional
 
#10

Re: Button in Webbrowser Anklicken.......

  Alt 16. Aug 2009, 12:40
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz