Entwickler-Ecke

Sonstiges (Delphi) - Submit Button im Browser anklicken !


admiralkirk - So 02.11.08 16:37
Titel: Submit Button im Browser anklicken !
Ich möchte auf der Seite http://www.google.de den "Auf gut Glück" Button anklicken.
Dazu öffne ich einfach mit ShellExecute den browser unter http://www.google.de

Was ich ausprobiert habe:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ShellApi, StdCtrls, ImgList, ExtCtrls;

type
  TForm3 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure XPColorMap1ColorChange(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form3: TForm3;

implementation

{$R *.dfm}

procedure TForm3.Button1Click(Sender: TObject);
begin
ShellExecute(Application.Handle, nil , 'http://google.de/'nilnil, SW_SHOWNORMAL);
sleep(2500);
Keybd_Event (VK_TAB, 100);
sleep(20);
Keybd_Event (VK_TAB, 100);
sleep(100);
Keybd_Event (VK_RETURN, 100);
sleep(1500);
close();
end;
end.

Funktioniert super mit Mozilla Firefox und auch mit IE. Aber nicht mit einem Script da die Anzahl der zu drückenden Tabs unterschiedlich sind ...


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
unit Unit4;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ShellApi, StdCtrls, ImgList, SHDocVw, ActiveX, ComObj, ExtCtrls, mshtml;

type
  TForm4 = class(TForm)
    Button1: TButton;
    Image1: TImage;
    procedure Button1Click(Sender: TObject);
    procedure Image1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm4.Button2Click(Sender: TObject);
begin
var
  vDoc, vForm, vElem: OleVariant;
begin
  WebBrowser1.Navigate('http://google.de/');
  repeat
    Application.ProcessMessages;
  until WebBrowser1.ReadyState >= READYSTATE_COMPLETE;
  vDoc := WebBrowser1.OleObject.document;
  vElem := vDoc.getElementById('btnI');                //btnI ist der Name vom Button aus dem Quelltext
  if VarIsNull(vElem)
    then ShowMessage('Element "btnI" not found')
    else vElem.click;
end;
procedure TForm4.Image1Click(Sender: TObject);
begin

end;

end.

Funktioniert nich da ein paar Befehle, wie button2Click, var, WebBrowser1.Navigate rot unterstrichen sind !
Den Code habe ich GEFUNDEN ! Nicht meiner ...

Hier also meine frage, funktioniert der 2. Code indem ich etwas ändere oder gibt es eine andere Möglichkeit den Button direkt anzuklicken ohne Maussteurung etc was bei jedem PC bzw Browser unterschiedlich sein kann ?

Danke im Vorraus

mfg
AdmiralKirk


Bob Murphy - So 02.11.08 21:34

Damit kannste den Button klicken.

Delphi-Quelltext
1:
WebBrowser1.OleObject.document.forms.item(0).elements.item('btnI').click;                    


admiralkirk - Mo 03.11.08 19:16

user profile iconBob Murphy hat folgendes geschrieben Zum zitierten Posting springen:
Damit kannste den Button klicken.

Delphi-Quelltext
1:
WebBrowser1.OleObject.document.forms.item(0).elements.item('btnI').click;                    


Könntest du mir einen vollständigen Quelltext posten.
Das problem bei mir ist, dass ich diesen Befehl schon öfters gesehen habe und ich nicht genau weiss was in uses und in die deklaration kommt, damit es einwandfrei funktioniert.

Danke im Vorraus


admiralkirk - Mo 03.11.08 21:50

Kann denn keiner dieses einfache problem lösen ?

Bitte postet mir einen kompletten code mit dem command:

user profile iconBob Murphy hat folgendes geschrieben Zum zitierten Posting springen:
Damit kannste den Button klicken.

Delphi-Quelltext
1:
WebBrowser1.OleObject.document.forms.item(0).elements.item('btnI').click;                    


Da ich nicht weiss was alles drin stehen muss, damit zb die WebBrowser1 funktion oder OleObject funktioniert

Danke im Vorraus !


Xentar - Mo 03.11.08 21:57

Du brauchst die entsprechende Komponente, eine TWebbrowser, auf deinem Formular


admiralkirk - Mo 03.11.08 22:06

Ich habe das schon in so vielen delphi foren gepostet und keine antwort auf meine eigentliche frage bekommen ...
Ich kenne mich mit delphi noch nicht so gut aus und frage ob ein wissender mir kurz ein kompletten code posten kann ...
der dürfte ja net allzu groß sein ...

von Unit# ... bis end;

Danke, .. hoffentlich

mfg

admiralkirk


Xentar - Mo 03.11.08 22:47

Das IST der komplette Code.

Du brauchst nun nur noch einen TWebbrowser und von mir aus 2 Buttons.
Im einen Button schreibst du

Delphi-Quelltext
1:
Webbrowser1.Navigate('www.google.de');                    

um Google zu öffnen.

Im anderen den Code von oben.

Edit:
Nagut, wenn du meinst, dass es dir weiterhilft:
Aber mehr als Zeilen 31 und 36 muss man nicht selber schreiben.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, OleCtrls, SHDocVw, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    WebBrowser1: TWebBrowser;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  WebBrowser1.Navigate('www.google.de');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  WebBrowser1.OleObject.document.forms.item(0).elements.item('btnI').click;
end;

end.


admiralkirk - Mo 03.11.08 23:13

vielen dank endlich einer der mir hilft xD
werds gleich mal ausprobieren


admiralkirk - Mo 03.11.08 23:17

mmh ich habe jez genau alles gemacht wie du es geschrieben hast, das programm zeigt keine fehlermeldung oder ähnliches.
startet ganz normal, aber wenn ich auf die buttons klicke passiert nichts, ist das normal ?

Müsste google in dem Webbrowser fenster auf der form angezeigt werden, im normalen oder garnicht?
Sieht man was das programm im browser macht ?


Xentar - Mo 03.11.08 23:30

Hast du verstanden, was der Code macht?
Man klickt auf den ersten Button -> Google wird im Programm angezeigt -> man tippt nen Suchbegriff ein -> klickt auf Button 2


Bob Murphy - Mo 03.11.08 23:36

hast du den webbrowser auch auf einer sichtbaren größe gestellt? zb 500 x 500
und ja google wird dann im webbrowser (der auf der form) angezeigt

edit//
hast du den internet explorer von windows drauf?


admiralkirk - Mo 03.11.08 23:48

Ich habe auf meinem pc IE 7 und Mozilla Firefox installiert
Ich habe jetzt auf meiner form den Webbrowser um die 800x800 groß gemacht.
Alles was ich sehe wenn ich auf den navigate button klicke ist weiss, es verändert sich nichts


Bob Murphy - Mo 03.11.08 23:55

je nach internetverbindung kann es ein wenig dauern bis du google angezeigt bekommst.
hast du vielleicht eine firewall die dein programm den zugang zum internet verweigert?


Xentar - Mo 03.11.08 23:56

Kommst du mit dem IE7 normal ins Internet?
Hast du eine Firewall?


admiralkirk - Di 04.11.08 00:00

mmh ich habe zonealarm
ich habe mehr als 20 sec gewartet zum aufbauen der seite
ich schau mal wegen der firewall


admiralkirk - Di 04.11.08 00:10

Egal was ich mache es wird nur weiss angezeigt.
Firewall ist aus + programm zugelassen.
Habe 1 min gewartet nichts tut sich


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
unit Unit8;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, OleCtrls, SHDocVw, StdCtrls;

type
  TForm8 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    WebBrowser1: TWebBrowser;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form8: TForm8;

implementation

{$R *.dfm}

procedure TForm8.Button1Click(Sender: TObject);
begin
  WebBrowser1.Navigate('www.google.de');
end;

procedure TForm8.Button2Click(Sender: TObject);
begin
  WebBrowser1.OleObject.document.forms.item(0).elements.item('btnI').click;
end;


procedure TForm8.Button3Click(Sender: TObject);
begin
close;
end;

end.



//Meine Form
[url=http://img385.imageshack.us/my.php?image=form8kd8.jpg]user defined image[/URL][url=http://g.imageshack.us/thpix.php]user defined image[/URL]


Xentar - Di 04.11.08 00:24

Mal ne blöde Frage:

Delphi-Quelltext
1:
procedure TForm8.Button1Click(Sender: TObject);                    

Wie hast du diese Zeile da reinbekommen? Hast du sie einfach per Copy & Paste eingefügt?


admiralkirk - Di 04.11.08 00:26

ne

//edit
über die form ganz normal


Xentar - Di 04.11.08 00:28

Lad mal bitte das ganze Projekt (ohne Exe!) als Zip Datei hier hoch..
da stimmt doch was nicht.

Edit: Wieso heißt das Ding eigentlich schon Form8? Bist du sicher, dass du mit dem richtigen Formular arbeitest?


admiralkirk - Di 04.11.08 00:35

Wooho ich habs nach 2 tagen xD endlich
Vielen danke für deine bemühungen und deine Ausdaur mit mir :)
Tausend dank.

Der fehler war einfach, das es verschiedene Delphi version gibt.
Mit OleVariant geht es perfekt

hier der link

http://www.delphipraxis.net/topic68127.html


admiralkirk - Di 04.11.08 00:43

mmh jez hätte ich doch noch mal ne frage ...

könnte man den button auch nach dem value anklicken, also das was draufsteht und nicht nach name bzw id ?

und nochmals danke für deine bemühungen und deine geduld xD