Entwickler-Ecke

Internet / Netzwerk - Button einer Webseite drücken


Bergmann89 - Fr 28.05.10 02:19
Titel: Button einer Webseite drücken
Hey,

ich habe folgenden HTML Code:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
<TABLE BORDER="0" CELLSPACING="0" CELLPADDING="5">
<TR>
  <TD>
    <INPUT TYPE="TEXT" CLASS="TEXT" MAXLENGTH="10" SIZE="10" NAME="TEXT" ID="INPUTTEXT" VALUE="">
  </TD>
  <TD>
    <INPUT TYPE="SUBMIT" CLASS="BUTTON" NAME="ACTION" VALUE="Anmelden">
  </TD>
</TR>
</TABLE>

Gibt es eine Möglichkeit mit Delphi in die Textbox was reinzuschreiben und dann den Button zu drücken? Wenn ja wie mach ich das? Ich hab schon n bisl Erfahrung mit der IdHTTP-Komponente vlt kann man darauf aufbauen?

MfG & Thx Bergmann.


Xentar - Fr 28.05.10 09:06

Such mal nach HTTP Forms oder sowas in der Art..
Das Thema gibts hier wohl oft genug ;)


bummi - Fr 28.05.10 09:14

nicht wirklich sinnvoller Code aber als Basis:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
var
  WB: SHDocVw_TLB.TWebBrowser;
  Flags,
  TargetFrameName,
  PostData,
  Headers : OleVariant;
 o:olevariant;
begin
  WB := SHDocVw_TLB.TWebBrowser.Create(Self);
  TWinControl(WB).Parent := Panel1;
  WB.Align               := alClient;
      Flags           := 0;
    TargetFrameName := NULL;
    PostData        := NULL;
    Headers         := NULL;
    WB.Navigate('C:\Users\twassermann\Desktop\test.html', Flags, TargetFrameName, PostData, Headers);
  Sleep(1000);
  Application.ProcessMessages;
  Sleep(1000);
  o:=WB.OleObject.document.forms.item(0).all;
  o.tags('input').item(0).setAttribute('value','TEST');
  o.tags('input').item(1).Click;




allerdings brauchst Du in der HTML-Datei auch das dazugehörige Form

also z.B.

<html>
<form action="http://www.wasauchimmer/ebbes.pl" method="get">

und die Closetags


LSanchez - Fr 28.05.10 10:39

Hallo,

ich habe mal eine Unit "U_WWWForm.pas" in Delphi 7 geschrieben, die bei der Auffüllung eines Web-Formulars hilft.


Beispiel-Code für deine Aufgabe:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure Tfrm_WFAdmin.Button1Click(Sender: TObject);
begin
    U_WWWForm.WebFeldFunktion_Durchfuehren(WebBrowser.ControlInterface,
                                           0,
                                           'TEXT',
                                           'INPUT',
                                           'Mein neuer Wert',
                                           1);
    U_WWWForm.WebFeldFunktion_Durchfuehren(WebBrowser.ControlInterface,
                                           0,
                                           'ACTION',
                                           'INPUT',
                                           '',
                                           2);
end;


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
function WebFeldFunktion_Durchfuehren(const pWebbrowser: IWebBrowser2;
                                      const formNumber: integer;
                                      const fieldName, fieldTag, newValue: string;
                                      const fieldFunction: Smallint):boolean;
// *****************************************************************************
// formNumber    = Nummer der Form, wo das Feld sich befindet
//                 (wird nur für fieldFunction 1, 2 und 4 gebraucht)
// fieldName     = Feldname
//                 (wird nur für fieldFunction 1 und 2 gebraucht)
// fieldTag      = TagName des Feldes
// newValue      = Inhalt ist abhängig von fieldFunction
//                 (wird nur für fieldFunction 1 (neuer Wert),
//                                             3 (URL) und
//                                             5 (JavaScript) gebraucht)
// fieldFunction = 1 ("newValue" wird in das Feld geschrieben)
//               = 2 (Klick auf das Feld)
//               = 3 (Navigate zu "newValue")
//               = 4 (Submit der Form mit der Nummer "formNumber")
//               = 5 (JavaScript "newValue" wird durchgeführt)
// *****************************************************************************

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


Bergmann89 - Fr 28.05.10 17:30

Hey,

funktioniert wunderbar, allerdings gibt es noch einen kleinen Fehler. Und zwar kommt jedesmal wenn ich den Button drücken lasse ein RuntimeError und der Just-In-Time-Debuger von Windows springt an: "Unbehandelte Ausnahme ('this.document.INPF.TEXT' ist Null oder kein Objekt)". Dann fragt er ob ich debugen will oder nich, wenn ich nein klickt geht es ohne Probleme weiter. Ich hab auch schon versucht ein try-except-Block drum zu machen, aber das geht auch nicht. Es scheint auch keine normale Exception zu sein, weil da ja normalerweiße der Delphi-Debuger anspringen würde. Hat jmd ne Idee wie ich das beheben kann?

MfG & Thx Bergmann


LSanchez - Mo 31.05.10 11:52

Hallo,

wie seht deine HTML-Seite jetzt aus? macht der Button irgendwas?


Gruß

L. Sanchez


P@u1 - Sa 19.06.10 16:12

Hi,

ich habe jetzt ein ähnliches Problem, und schreib jez einfach mal hier in den Thread, wenn ich nen neuen aufmache kommt sonst, dass es davon schon threads gibt.

Also ich möchte auch auf einen Button bei einer Seite drücken lassen automatisch (ohne das wirklich ein Mausklick ausgeführt wird).

Ich habe die hochgeladene Unit schon benutz und damit einige Tests gemacht.
Leider passiert bei der Seite, für die ich das benutzen wollte rein gar nichts.
Hier der Link:
http://sportwetten-magazin.com/wettbonus-freispielen-clearen.html
Es geht um den "Suche" Button!
Ich hab mir den feldnamen ausm Quelltext geholt und beim feldtag war ich mir nicht ganz sicher, hab aber verschiedenes versucht, es ist jedes mal einfach nichts passiert.
Wenns euch dabei hilft, mir zu helfen, kann ich die Delphi-Dateien vom Programm, mit dem ich das versucht hatte noch hochladen.

Vielen Dank für eure Hilfe schonmal!

Paul