AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Textfeld auslesen Webbrowser
Thema durchsuchen
Ansicht
Themen-Optionen

Textfeld auslesen Webbrowser

Ein Thema von · begonnen am 16. Jan 2008 · letzter Beitrag vom 17. Jan 2008
Antwort Antwort
(Gast)

n/a Beiträge
 
#1

Textfeld auslesen Webbrowser

  Alt 16. Jan 2008, 15:01
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:
var test: String;
test := WebBrowser1.OleObject.document.forms.item(0).elements.item('itemprice').value
Doch das löst bei mir eine Exception aus.
Jemand einen Vorschlag bzw. eine Lösung wie ich das Textfeld in einen String einlesen kann?

Gruss Daniel
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Textfeld auslesen Webbrowser

  Alt 16. Jan 2008, 15:24
Wann wird der Code aufgerufen.
Kontrollier mal ob irgendeinteil deiner "Verreferenzierung" nil ist (Überwachte Ausdrücke im Debugger sind manchmal Gold wert).
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
(Gast)

n/a Beiträge
 
#3

Re: Textfeld auslesen Webbrowser

  Alt 17. Jan 2008, 13:08
Hi,

Delphi-Quellcode:
 Webbbrowser1.Navigate(URL);
 test := Webbrowser1.OleObject.document.forms.item(0).elements.item('itemprice').Value;
Würde es denn generell so gehen? Oder bin ich auf dem Holzweg?
Den Code selbst lese ich nicht aus, weil die Information nicht im Code steht bzw. für mich nicht ersichtlich.

Gruss Daniel
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Textfeld auslesen Webbrowser

  Alt 17. Jan 2008, 13:38
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: klick

Grüße vom marabu
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

Re: Textfeld auslesen Webbrowser

  Alt 17. Jan 2008, 13:48
Zitat von finalr:
Delphi-Quellcode:
 Webbbrowser1.Navigate(URL);
 test := Webbrowser1.OleObject.document.forms.item(0).elements.item('itemprice').Value;
Würde es denn generell so gehen? Oder bin ich auf dem Holzweg?
Das ist im Prinzip richtig. Nach .Navigate muss man allerdings warten, bis die Seite geladen wurde !!

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;
Andreas
  Mit Zitat antworten Zitat
(Gast)

n/a Beiträge
 
#6

Re: Textfeld auslesen Webbrowser

  Alt 17. Jan 2008, 15:19
Vielen Dank erstmal für die Antworten.

Ich habe mir hierfür ein Testproject angelegt, später soll alles in einer DLL...

Delphi-Quellcode:
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;
Sorry, das ich euch das verschwiegen habe, aber die Wait-Procedure hatte ich auch schon drin. Aber das konntet ihr ja nicht wissen.

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".
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: Textfeld auslesen Webbrowser

  Alt 17. Jan 2008, 19:16
Hallo Daniel,

Zitat von Bernhard Geyer:
... Kontrollier mal ob irgendeinteil deiner "Verreferenzierung" nil ist ...
die Kontrolle kann auch so aussehen:

Delphi-Quellcode:
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;
Freundliche Grüße
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz