![]() |
Textfeld auslesen Webbrowser
Hi,
Ich habe ein Problem und zwar möchte ich gerne von einer Seite ein Formular auslesen. Das Formular habe ich im Quelltext nicht gefunden, der komplette Quelltext besteht aus Javascript. Jedoch in den Seiteninformationen, unter Formulare bin ich fündig geworden. Das Feld hat folgende Eigenschaften: - Feldname: itemprice - Typ: text - Wert: der für mich relevante bzw. interessante Wert Nun nach lange rumprobieren bin ich bisher noch zu keiner Lösung gekommen. Mein Ansatz war mit dem Webbrowser:
Delphi-Quellcode:
Doch das löst bei mir eine Exception aus.
var test: String;
test := WebBrowser1.OleObject.document.forms.item(0).elements.item('itemprice').value Jemand einen Vorschlag bzw. eine Lösung wie ich das Textfeld in einen String einlesen kann? Gruss Daniel |
Re: Textfeld auslesen Webbrowser
Wann wird der Code aufgerufen.
Kontrollier mal ob irgendeinteil deiner "Verreferenzierung" nil ist (Überwachte Ausdrücke im Debugger sind manchmal Gold wert). |
Re: Textfeld auslesen Webbrowser
Hi,
Delphi-Quellcode:
Würde es denn generell so gehen? Oder bin ich auf dem Holzweg?
Webbbrowser1.Navigate(URL);
test := Webbrowser1.OleObject.document.forms.item(0).elements.item('itemprice').Value; Den Code selbst lese ich nicht aus, weil die Information nicht im Code steht bzw. für mich nicht ersichtlich. Gruss Daniel |
Re: Textfeld auslesen Webbrowser
Hallo Daniel,
wenn diese beiden Code-Zeilen direkt hintereinander ausgeführt werden, dann bekommst du Zugriffsfehler oder bestenfalls falsche Inhalte. Erst wenn der Browser signalisiert, dass er die von dir gewünschte Seite auch geladen hat, kannst du auf das document object model zugreifen. Darauf wollte Bernhard hinaus. Hier noch ein paar Infos, die auch für dich interessant sein sollten: ![]() Grüße vom marabu |
Re: Textfeld auslesen Webbrowser
Zitat:
Delphi-Quellcode:
var item:olevariant;
Webbbrowser1.Navigate(URL); WaitForBrowser(Webbbrowser1); // Warten bis Document geladen if not Assigned(Webbrowser1.OleObject.document) then // Zur Sicherheit raise Exception.Create('kein Dokument geladen'); item := Webbrowser1.OleObject.document.forms.item(0).elements.item('itemprice'); if VarType(item) <> varNull then test := item.Value else test := 'itemprice nicht gefunden';
Delphi-Quellcode:
procedure WaitForBrowser(WebBrowser:TWebBrowser);
begin while WebBrowser.ReadyState <> READYSTATE_COMPLETE do begin Application.ProcessMessages; Sleep(50); end; end; |
Re: Textfeld auslesen Webbrowser
Vielen Dank erstmal für die Antworten.
Ich habe mir hierfür ein Testproject angelegt, später soll alles in einer DLL...
Delphi-Quellcode:
Sorry, das ich euch das verschwiegen habe, aber die Wait-Procedure hatte ich auch schon drin. Aber das konntet ihr ja nicht wissen.
procedure TForm1.Button2Click(Sender: TObject);
begin Halt; end; procedure TForm1.Button1Click(Sender: TObject); var URL, Test: string; begin URL := 'http...'; Webbrowser1.Navigate(URL); Wait(Webbrowser1,400); Test := WebBrowser1.OleObject.document.forms.item(0).elements.item('itemprice').value; end; procedure TForm1.Wait(eWebbrowser: TWebbrowser; Delay: Integer); begin Repeat Sleep(Delay); Application.ProcessMessages; Until (eWebbrowser.ReadyState = READYSTATE_COMPLETE) OR (Application.Terminated); end; Konkrete Exception die er mir ausgibt: "Zugriffsverletztung bei Adresse 0047003B in Modul 'Project1.exe." Und Pointer auf die Zeile, wo ich den Wert in einen String speichern möchte. Noch jemand eine Idee? EDIT: Habe gerade versucht mit dem Code von shmia, aber auch kein Erfolg...bleibt an der gleiche Stelle hängen, wo er versucht das Textfeld auszulesen. Ich hoffe, ihr habt mich nicht komplett falsch verstanden. Ich versuche nicht ein HTML-Textfeld auszulesen, sondern ein Feld, welches ich nur über die Seiteninformationen erreiche. Firefox -> Rechts klick -> Seiteninformationen anzeigen und im Reiter "Formulare" steht das begehrte "textfeld". |
Re: Textfeld auslesen Webbrowser
Hallo Daniel,
Zitat:
Delphi-Quellcode:
Freundliche Grüße
var
vDoc, vForm, vElement: OleVariant; begin // ... load page ... vDoc := WebBrowser.OleObject.Document; if vDoc.forms.length > 0 then begin vForm := vDoc.forms.item(0); vElement := vForm.elements.item('itemprice'); if VarIsNull(vElement) then ShowMessage('element not found') else ShowMessage(VarToStr(vElement.value)); end else ShowMessage('no forms present'); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz