Entwickler-Ecke

Internet / Netzwerk - TWebBrowser neue Seite aufrufen während FOR Schleife


bumbum94 - Do 09.07.20 10:09
Titel: TWebBrowser neue Seite aufrufen während FOR Schleife
Guten Morgen und Hallo,

ich Sitz hier an einem kleinen Programm das mir Videolinks automatisch aus htmlQuellCode kopieren soll.

Ein Link pro Seite
Aufbau der URL https://www.videolink.de/videolink-folge-x/ (x steht für die Nummer der folge)
ich gebe die anzahl der Folgen an

Es wird eine FOR schleife ausgeführt i=1 to anzahl der Folgen
begin
Um den videolink zu erhalten öffnen ich mit TWebBrowser die Seite und hohle mir den HTML Quell Text mit WebBrowser1.OleObject.Document.Body.InnerHtml
diesen Durchforste ich dann nach dem Link kopiere mir den und will auf die nächste Seite navigieren (https://www.videolink.de/videolink-folge-1/ --> https://www.videolink.de/videolink-folge-2/)
end

und genau da ist mein Problem.
wie mache ich das das die schleife erst weitergeht wenn er die neue Seite geladen hat
er führt zwar das WebBrowser1.Navigate(url) allerdings lädt er die neue Seite nicht sondern macht einfach mit der alten Seite weiter.


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:
if cbyAnisenpai.Checked then
begin
for I := 1 to StrToInt(Edit2.Text) do
begin
  begin
    slHtml := TStringList.Create;
    try
      slHtml.Add(WebBrowser1.OleObject.Document.Body.InnerHtml);
      pos1:= Pos('https://vivo.sx/',slHtml.Text);
        if pos1 > 0 then
        begin
          pos2:= Pos('"',slHtml.Text,pos1);
          S := Copy(slHtml.Text,pos1,(pos2-pos1));
          WriteLog(s);
        end;

    finally
    slHtml.Free;
    s := WebBrowser1.LocationURL;
    pos1:= Pos('folge',s)+5;
    S := Copy(s,0,pos1 )+IntToStr(i+1)+'-ger-sub/';
    navigate(s);

    end;
  end;
end;


Th69 - Do 09.07.20 12:34

Hallo und :welcome:

wie du ja selber siehst, funktioniert es so nicht. Du mußt deinen Code auf ereignisorientiert umstellen, d.h. das OnDocumentComplete [http://docwiki.embarcadero.com/Libraries/Rio/de/SHDocVw.TWebBrowser.OnDocumentComplete]-Ereignis verwenden und dort dann die Leselogik implementieren.
Statt der for-Schleife wirst du dann für den Index einen Klassenmember benötigen.


jaenicke - Do 09.07.20 12:55

Du könntest auch einfach TIdHttp verwenden, dann sparst du dir den ganzen Browser, der in diesem Fall gar keinen Sinn macht, wenn du nicht gerade Skripte benötigst.


Th69 - Do 09.07.20 13:48

Da hast du recht, wenn es nur um statische Seiten geht.