Autor Beitrag
Mario Elßner
Hält's aus hier
Beiträge: 10

Win XP, Windows 7 64bit,
RAD Studio XE2
BeitragVerfasst: Di 08.05.12 23:45 
Hallöle,

hab mal wieder nen anliegen und weiß nicht so richtig wie ich es umsetzen soll.

Ich hatte mal vor langer Zeit nen Tool geschrieben welches URL's aus einer Webseite ausliest und bis dato ganz gut funktionierte.
Nun wurde allerdings die Webseite umgestellt und es funzt nicht mehr.

Das war mein altes Script (Abfrage):
ausblenden volle Höhe 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:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
procedure TForm1.Button6Click(Sender: TObject);
var
  htmlDoc: IHTMLDocument2;
  allLinks: IHTMLElementCollection;
  firstLink: IHTMLElement;
  url, s : String;
  count, x, link, i : integer;
  aHref : IHTMLElement;
  v, b : Integer;

begin
  ini := TIniFile.Create(ExtractFilePath(Application.ExeName)+'system.ini');
  try
    v := ini.ReadInteger('System''start'1);
    b := ini.ReadInteger('System''end'300000);
    while v < b do
      begin
        edit4.Text := IntToStr(v);
        embeddedWB2.Navigate('http://url.de/highscore.php?mode=1&von=' + IntToStr(v) +'&submit=Anzeigen#hs');
        delay(StrToInt(Edit6.Text));

        htmlDoc := embeddedwb2.Document as IHTMLDocument2;
        allLinks := htmlDoc.links;
        count := htmlDoc.Links.Length;
//        firstLink := allLinks.Item(0,'') as IHTMLElement;
//        url := firstLink.toString;
//        memo3.Text:= url;

        if count > 0 Then
        begin
        memo3.Clear;
          for x := 0 to -1 + count do
          begin
            aHref := allLinks.Item(x,''as IHTMLElement;
            url := aHref.toString;
            link := Pos('http://url.de/userdetails.php', url);
            if link <> 0 then
            begin
            //  ShowMessage('gefunden an Position: '  + IntToStr(Position))
            memo3.Lines.Add(url);

            ADOTable1.Append;
            ADOTable1.FieldByName('Link').AsString := url;
            ADOTable1.FieldByName('New').AsString := '1';
            ADOTable1.Post;
            
            //s := 'INSERT INTO Charlie (Link) VALUES ("'+ url +'")';
            //AdoQuery1.Close;
            //AdoQuery1.SQL.Clear;
            //AdoQuery1.SQL.Add(WideString(s));
            //ADOQuery1.ExecSQL;
            //AdoQuery1.Close;
            end;

          end;
        end;
        v := v + 50;
        ini.WriteInteger('System''start', v);

        if CheckBox1.Checked = true Then Break;
      end;
  finally
  ini.Free;
  end;

end;


Damit funktioniere das auslesen ganz gut......

Nun wurden allerdings die Links in der Webseite neu eingebettet und sehen wie folgt aus.
ausblenden Quelltext
1:
<a href="#" class="openUserDetails" rel="283527">					


Wie kann ich nun mein Script umstellen das ich zwar nach den vorhandenen Links suche aber nur mir alles ausgegeben wird was nach rel=" erscheint.
Das ich die Zeilen 34-36 umstellen muss ist mir klar aber weiß nicht wie....
Kann mir dabei einer helfen, hab da momentan echt kein Plan. Ne Lösung wäre echt toll.

Danke im voraus....


Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Mi 09.05.2012 um 11:42
Moderiert von user profile iconNarses: Titel geändert, war: "Problem beim Auslesen von Daten.......".
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: Mi 09.05.12 06:40 
Wenn du einmal in die Dokumentation schauen würdest, hättest du sehen können, dass dein IHTMLElement eine Funktion getAttribute hat:
msdn.microsoft.com/e...aa752280(VS.85).aspx
Mario Elßner Threadstarter
Hält's aus hier
Beiträge: 10

Win XP, Windows 7 64bit,
RAD Studio XE2
BeitragVerfasst: Mi 09.05.12 22:00 
Alles gut und schön...

Habe es mit getAttribute probiert nur funzt es ni so wie es sein soll......

wenn ich mit getAttribute das Attribut rel abrufe gibt er mir alles raus was er findet.
Nur wie kann ich es eingrenzen das er mir nur aus bestimmten Zeilen es auswirft was ich haben will.....

die Kompletten zeilen (ca 50) sehen wie Folgt aus, nur der Inhalt in rel ist verschieden:
ausblenden Quelltext
1:
<a href="#" class="openUserDetails" rel="316558">					


Habe es auch versucht mit Attribut class nur bekomme ich eine Exception der Klasse EVariantTypeCastError ( Meldung: Variante des Typs (Null) konnte nicht in Typ (String) konvertiert werden).....

Gibts da keine andere möglichkeit? Ich brauche nur aus dem bestimmten Link aus Attribut rel den Inhalt.....
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: Mi 09.05.12 22:45 
Naja, du musst schon ein Kriterium haben wonach du unterscheiden kannst welchen Link du willst und welchen nicht...
Zum Beispiel in einem Tag davor oder danach.