Autor |
Beitrag |
OliverN_26 
      
Beiträge: 252
Win7 64-Bit, WinXP SP3
Delphi 7 Enterprise
|
Verfasst: Fr 24.02.12 16:18
is ja richtig .. sorry
so gehts:
Delphi-Quelltext 1:
| ResultStream := TStringStream.Create(''); |
Nun bekomme ich an unten angezeigter Position folgende Fehlermeldung: "HTTP/1.1 302 Found"
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); 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
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 24.02.12 17:24
Die Fehlermeldung sagt doch schon was los ist, siehe Dokumentation zum HTTP Protokoll: Du musst also der Weiterleitung folgen, also in IdHttp Weiterleitungen aktivieren, also HandleRedirects auf True stellen.
|
|
OliverN_26 
      
Beiträge: 252
Win7 64-Bit, WinXP SP3
Delphi 7 Enterprise
|
Verfasst: 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
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:
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;
procedure TForm1.FormCreate(Sender: TObject); begin id := 0; WebBrowser1.Navigate('http://pfad_der_hauptseite'); end;
procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant); begin id := id + 1;
case ID of 1: begin 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 Narses: Beiträge zusammengefasstAch menno  Schreib ich es wie folgt, klappt alles wunderbar:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant); begin id := id + 1;
case ID of 1: begin 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: begin showmessage(inttostr(id)); 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
      
Beiträge: 1555
Erhaltene Danke: 70
Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
|
Verfasst: 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 
      
Beiträge: 252
Win7 64-Bit, WinXP SP3
Delphi 7 Enterprise
|
Verfasst: 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
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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 
      
Beiträge: 252
Win7 64-Bit, WinXP SP3
Delphi 7 Enterprise
|
Verfasst: 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.
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
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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 
      
Beiträge: 252
Win7 64-Bit, WinXP SP3
Delphi 7 Enterprise
|
Verfasst: 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):
XML-Daten 1:
| Webbrowser1.OleObject.document.forms.item(0).elements.item('next').click; |
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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 
      
Beiträge: 252
Win7 64-Bit, WinXP SP3
Delphi 7 Enterprise
|
Verfasst: Di 28.02.12 19:28
Hmm .. das klingt einleuchtend .. hast du einen Tip wie ich das Attribut ändern kann?
Danke
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 28.02.12 20:03
Ich nicht direkt, aber Google sagt: 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 
      
Beiträge: 252
Win7 64-Bit, WinXP SP3
Delphi 7 Enterprise
|
Verfasst: Mi 29.02.12 12:32
Klappt super .. Damit komme ich erst mal weiter .. Danke 
|
|