Autor Beitrag
OliverN_26 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 252

Win7 64-Bit, WinXP SP3
Delphi 7 Enterprise
BeitragVerfasst: Fr 24.02.12 16:18 
is ja richtig .. sorry :-(
so gehts:
ausblenden Delphi-Quelltext
1:
ResultStream := TStringStream.Create('');					


Nun bekomme ich an unten angezeigter Position folgende Fehlermeldung: "HTTP/1.1 302 Found"
ausblenden 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:
procedure TForm1.Button4Click(Sender: TObject);
var
  PostData : TStringList;
  ResultStream : TStringStream;
const
  URI = 'http://pfad/';
begin
  PostData := nil;
  ResultStream := nil;
  try
    PostData := TStringList.Create;
    ResultStream := TStringStream.Create('');

    PostData.Values['techId'] := '22222';
    PostData.Values['woId']   := '59478';

    IdHTTP1.Post(URI, PostData, ResultStream);
    showmessage(ResultStream.DataString);   // HTTP/1.1 302 Found
  finally
    PostData.Free;
    ResultStream.Free;
  end;
end;



EDIT:
könnte daran liegen das ich an die falsche Seite sende, denn wenn ich abschicke ist ja bereits die Session_id generiert, welche ich mitsenden muß. Dafür müsste ich aber die Startseite erst mal laden (ohne anzuzeigen) um die 1.Session_id zu generieren. Wie kann ich denn dann im weiteren die Parameter aus der Adresszeile auslesen?

:-/
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 24.02.12 17:24 
Die Fehlermeldung sagt doch schon was los ist, siehe Dokumentation zum HTTP Protokoll:
www.w3.org/Protocols...6/rfc2616-sec10.html hat folgendes geschrieben:
The requested resource resides temporarily under a different URI. [...]
Du musst also der Weiterleitung folgen, also in IdHttp Weiterleitungen aktivieren, also HandleRedirects auf True stellen.
OliverN_26 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 252

Win7 64-Bit, WinXP SP3
Delphi 7 Enterprise
BeitragVerfasst: Mo 27.02.12 19:01 
Hi .. ich probier mir hier nen Wolf. Mit der Indy-HTTP Variante komm ich nich so wirklich weiter, aber ich bleib trotzdem dran. Hab jetzt eine Frage zu der TWebBrowser Variante, da bis auf 1 Seite alles so läuft, wie ich es gerne hätte nd für eventuell spätere Auswertungen, bzw. Darstellungen, scheint mir diese Lösung erst mal die besser umsetzbarere zu sein .. A B E R .. auf einer Seite hab ich kleines AJAX-Script laufen. Ich habe jede der 5 Folgeseiten in eine eigene Funktion gepackt und lasse diese der Reihe nach beim öffnen des Programmes ablaufen (da später alles automatisch laufen soll). Wenn ich nun auf der entsprechenden Seite
ausblenden Delphi-Quelltext
1:
Webbrowser1.OleObject.Document.forms.item(0).elements.item(0).click;					

schreibe, kommt die Fehlermeldung "Javascript required - Java Script ist nicht aktiv. Bitte aktivieren Sie das Scribt in Ihrem Browser.". Klicke ich allerdings in der WebBrowser-Komponente mit der Maus auf den entsprechenden Button, geht es. Wenn ich einen Button auf die Form lege und bei onClic den obigen Code einfüge geht es auch. Nur wenn ich es automatisch laufen lasse kommt jedesmal die Fehlermeldung, dass ich kein Javascript anhabe. Warum??? Habt ihr da einen Tip was ich falsch mache?

Alle Seiten laufen so wie sie es sollen .. bis auf Seite 2 .. eben dort wo das Script geschalten ist. Hier ist mein jetziger Versuch:
ausblenden 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:
var
  Form1: TForm1;
  id: Integer;

// die Hauptseite wird geladen
procedure TForm1.FormCreate(Sender: TObject);
begin
  id := 0;
  WebBrowser1.Navigate('http://pfad_der_hauptseite');
end;

// Steuerung der einzelnen Seiten
procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
  id := id + 1;

  case ID of
     1begin
          WebBrowser1.OleObject.document.forms.item(0).elements.item('techId').value := '22222';
          WebBrowser1.OleObject.document.forms.item(0).elements.item('woId').value := '74656';
          WebBrowser1.OleObject.document.forms.item(0).elements.item(2).click;
        end;
     2: Webbrowser1.OleObject.Document.forms.item(0).elements.item(0).click;
     3: WebBrowser1.OleObject.document.forms.item(0).elements.item(1).click;
     4: WebBrowser1.OleObject.document.forms.item(0).elements.item(2).click;
  end;
end;


vielen Dank

Moderiert von user profile iconNarses: Beiträge zusammengefasst

Ach menno :-( Schreib ich es wie folgt, klappt alles wunderbar:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
// Steuerung der einzelnen Seiten
procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
  id := id + 1;

  case ID of
     1begin
          WebBrowser1.OleObject.document.forms.item(0).elements.item('techId').value := '22222';
          WebBrowser1.OleObject.document.forms.item(0).elements.item('woId').value := '74656';
          WebBrowser1.OleObject.document.forms.item(0).elements.item(2).click;
        end;
     2begin
          showmessage(inttostr(id)); // das showmessage reagiert anscheinend wie ein Click auf einen Button, aber warum muß ich das vorschalten?
          Webbrowser1.OleObject.Document.forms.item(0).elements.item(0).click;
        end;
     3: WebBrowser1.OleObject.document.forms.item(0).elements.item(1).click;
     4: WebBrowser1.OleObject.document.forms.item(0).elements.item(2).click;
  end;
end;

Aber ich will es natürlich ohne ein lästiges PopUp laufen lassen. Bei Textaktualisierungen kenn ich "Application.ProcessMessages;" muß/kann ich hier was derartiges auch nutzen? Ich steh total auf dem Schlauch :-(
Boldar
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1555
Erhaltene Danke: 70

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: Di 28.02.12 13:32 
Sowas geht btw auch ohne Probleme mit php.
Auch dafür gibt es diverse html-Parser und ähnliches.
OliverN_26 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 252

Win7 64-Bit, WinXP SP3
Delphi 7 Enterprise
BeitragVerfasst: Di 28.02.12 14:34 
Für unsere Zwecke ist diese Lösung optimal. Für eine spätere Weiterverarbeitung der Daten wäre dein Kommentar allerdings sehr interessant. Hast du da einen Ansatz/Stichwort für mich? Evt. auch eine Lösung zu meinem hierigen Problem? Danke
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 28.02.12 15:18 
Da wirst du schauen müssen was im Skript alles passiert...
Irgendetwas wird da gemacht, das dazu führt, dass es ohne nicht geht. Vermutlich wird irgendein Feld gesetzt und das Skript schlicht noch nicht fertig.

Das lässt sich aber eben nur durch eine Analyse herausfinden. Sei es im Browser mit dem Skript oder mit Wireshark im Vergleich der Datentransfers (so viel wird da aber kaum passieren, deshalb ist ersteres sinnvoller).
OliverN_26 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 252

Win7 64-Bit, WinXP SP3
Delphi 7 Enterprise
BeitragVerfasst: Di 28.02.12 17:46 
Kann ich da irgendetwas mit dem "WebBrowser1.ReadyState" Status anfangen? Das Problem wird, wie du schon sagtest, das Script sein, was erst läuft, wenn wirklich alles fertig geladen ist.

ausblenden XML-Daten
1:
2:
3:
<script type="text/javascript">
   $(document).ready(function() { $("#next").attr("name""_eventId_next_ajax"); });
</script>


Das ist alles was da an Script drin steht .. Das muß doch irgendwie gehen :-(
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 28.02.12 18:08 
Da hast du es doch: Es wird das Feld mit der ID next ausgefüllt. ;-) Mach das manuell und es sollte gehen.

Genau das würdest du halt als Unterschied bei der Übermittlung sehen im Vergleich zu dem was du schickst. (Kann natürlich noch mehr sein, was du vielleicht nicht siehst gerade.)
OliverN_26 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 252

Win7 64-Bit, WinXP SP3
Delphi 7 Enterprise
BeitragVerfasst: Di 28.02.12 18:12 
Wie kann ich das manuell machen? Das Feld "next" is der Button den ich wie wild versuch zu drücken :-)
Hatte bereits folgendes versucht (was aber auch nich läuft):
ausblenden XML-Daten
1:
Webbrowser1.OleObject.document.forms.item(0).elements.item('next').click;					
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 28.02.12 18:17 
Ok, ich habe mich verschrieben: Es wird das Attribut name des Buttons gesetzt, das habe ich wohl als selbstverständlich vorausgesetzt. ;-)

Und über den Namen des Buttons wird dann am Server festgestellt, dass es die nächste Seite ist. Das Attribut musst du also vor dem Abschicken setzen.
OliverN_26 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 252

Win7 64-Bit, WinXP SP3
Delphi 7 Enterprise
BeitragVerfasst: Di 28.02.12 19:28 
Hmm .. das klingt einleuchtend .. hast du einen Tip wie ich das Attribut ändern kann?
Danke
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 28.02.12 20:03 
Ich nicht direkt, aber Google sagt:
ausblenden Delphi-Quelltext
1:
Webbrowser1.OleObject.document.forms.item(0).elements.item('next').setAttribute('name''_eventId_next_ajax');					

Ansonsten bliebe noch als Notlösung den JavaScript Code selbst auszuführen:
www.delphidabbler.com/articles?article=21

Für diesen Beitrag haben gedankt: Narses
OliverN_26 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 252

Win7 64-Bit, WinXP SP3
Delphi 7 Enterprise
BeitragVerfasst: Mi 29.02.12 12:32 
Klappt super .. Damit komme ich erst mal weiter .. Danke :-)