Entwickler-Ecke
Sonstiges (Delphi) - Mit Hilfe von IDHTTP Seite laden und durchsuchen- Fehler!
Sithlord - Sa 12.07.08 22:10
Titel: Mit Hilfe von IDHTTP Seite laden und durchsuchen- Fehler!
Hallo !
Ich lade mit Hilfe von IDHTTP.get eine Seite herunter und speichere sie in einem String!
Diesen String durchsuche ich nach einem Satz mithilfe von POS !
Klappt auch ganz gut, aber ...
...Obwohl sich die Seite verändert hat und dieser Satz nicht mehr auf der Seite steht, wird angezeigt das er das steht.
Und wenn ich mit IDHTTP.get das ganze auch noch in einer html Datei speichere, bleibt diese Datei immer gleich, obwohl sich ja die quelle verändert hat!
Was mache ich falsch ?
PeterPain - So 13.07.08 03:11
Titel: Re: Mit Hilfe von IDHTTP Seite laden und durchsuchen- Fehler!
Sithlord hat folgendes geschrieben: |
Was mache ich falsch ? |
du postest keinen quellcode.
gruss :)
Sithlord - So 13.07.08 09:51
Ohja, sorry, war gestern so sauer darüber ^^, da hab ichs wohl vergessen :
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| uses mmsystem; var check:integer;
var str:string; begin check:=1; str:=''; str:=idhttp.Get(edit1.text); sleep(600); if pos('Keine passenden Ergebnisse.',str) > 0 then check:=0; if check=1 then PlaySound('Ding', 0, SND_SYNC); |
Der Integer "check" ist global deklariert, da dieser noch woanders gebraucht wird ;-)
Und bitte keine meckereien zu meinem Quellcode - höchstens verbesserungen, da ich wie man bestimmt erkennt ein Anfänger bin in Sachen guter Quellcode ;-)
Mfg Sithlord
Sithlord - So 13.07.08 13:15
Sorry für Doppelpost -
aber neuere Erkenntniss :
Das Problem liegt genau an dieser einen bestimmten Seite!
Obwohl sich der Quelltext nachweißlich ändert - bleibt er für IDhttp trotzdem gleich ;-)
Kann man mit der Webbrowserkomponente nicht was anfangen und das alles in einen String laden ?
Mfg Sithlord
IceBube - So 13.07.08 13:22
Mach mal so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| uses mmsystem; var check:integer;
var str:string; begin str:=idhttp.Get(edit1.text);
if pos('keine passenden ergebnisse.',LowerCase(str)) <> 0 then check:=0 else check := 1; if check=1 then PlaySound('Ding', 0, SND_SYNC); end; |
Edit: Vielleicht liegt es am "UserAgent" ??
User-Agent umstellen:
Delphi-Quelltext
1:
| idHttp.Request.UserAgent := 'IE7'; |
lg
Sithlord - So 13.07.08 13:29
Danke - geht trotzdem nicht !
Wie gesagt - es geht mit stinknormalen Webpages, ich habe es im Intranet getestet ;-)
Aber Online (Firefox findet ihn mit integrierter Suche auf HTML Ebene wie auch auf Quelltextebene ) findet er es auch - aber IMMMER ! Auch wenn sich die Seite verändert hat, lädt idHTTP immer noch die alte Seite runter - die gar nicht mehr existiert (Per Browser nachgewiesen).
Das ist irgendwie komisch!
Edit:
Habe dein Code mal ins Oncreate Ereignis gepackt - geht trotzdem nicht !
IceBube - So 13.07.08 13:34
Naja ist komisch das er die alte Seite noch immer lädt, ich denke mir das kann am User-Agent liegen, aber ich weiß es nicht genau :(
Probier mal das vorher einzustellen:
Delphi-Quelltext
1: 2: 3: 4:
| idhttp.Request.UserAgent := 'IE'; idhttp.AllowCookies := False; idhttp.HandleRedirects := True; |
Edit: Kannst ma mal die Seite sagen? Dann kann ichs auch probieren! Oder ist die geheim? Du hast ja meine Talkbox könn ma chatten....
Sithlord - So 13.07.08 13:39
Kann man nicht die Twebbrowser Komponente in einen String laden ?
Das wäre glaube ich besser ;-)
Geht immer noch nicht! :(
Das ist komisch - obwohl sich die Seite nachweißlich ändert und der Satz gar nicht mehr da steht und ich eingeloggt bin - geht es nicht.
Edit :
Die Seite ist nur verfügbar, wenn man eingeloggt ist auf
http://www.pcfreunde.de ;-)
Das sind die eigenen, ungelesenen Beiträge, ich hänge gleich mal Screenshoots an ;-)
IceBube - So 13.07.08 13:45
Ich glaub schon nur weiß ich nicht genau wie - such mal bei Google!
Dadurch das du die einloggen musst, lädt er nicht die gewünschte Seite herunter. Da musst du mit Cookies arbeiten, und da kann ich dir leider nicht helfen :(
lg
IceBube - So 13.07.08 13:54
Bei mir schon ;)
Hier mein Quelltext:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| function Find(Link:string):boolean; var idHttp : TidHttp; str:string; begin idhttp := TidHttp.Create(nil); idhttp.Request.UserAgent := 'IE9'; idhttp.AllowCookies := False; idhttp.HandleRedirects := True; str:=idhttp.Get(Link);
if pos('keine passenden ergebnisse.',LowerCase(str)) <> 0 then Result:= True else Result := False;
idhttp.Free; end;
Find(Die Linkadresse); |
Edit: Auch wenn ich eine andere Seite wähle wo das nicht darsteht wird funktioniert es..
Andreas L. - So 13.07.08 13:57
Irgendwie steht das sogar mehrmals da.
Sithlord - So 13.07.08 14:11
Oh ihr könnt sogar so darauf zugreifen ? Lusti xD
Naja, ok, ich werde den Code mal probieren!
Ja - steht zweimal da ;-)
Edit :
Hab nen Fehler gefunden :
Wenn man nicht eingeloggt ist, wird immer "Keine Ergebnisse" angezeigt ;-)
Daher kommt auch der Fehler, wie melde ich denn nun das Script automatisch an ?
IceBube - So 13.07.08 14:21
Komsich bei mir werden Ergebnisse angezeigt, wenn ich Bei Bereich wechle und dann Anwenden drücke?!?
Vielleicht funktioniert es über die URL:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| function GetLink(account:string;page:integer;Kategorie:string):string; begin hLink := 'http://www.pcfreunde.de/forum/themenabfrage/?type=accountTopics&' page := 'page='+strToInt(Seite)+'&'; accID := 'accountId='+account+'&'; cat := 'categoryForumId='+ Kategorie+'&'; eLink := '&btnApply.x=70&btnApply.y=6'; Result := hLink+page+accID+cat+eLink; end;
Link := GetLink('50202',1,'F13'); |
Sithlord - So 13.07.08 14:30
Du brauchst den Bereich nicht mal zu wechseln ;-)
Mein Programm soll die eigenen, noch ungelesenen Beiträge anzeigen - wenn du auf Anwenden drückst, kommst du zu meinen ganzen Beiträgen, die ich geschrieben habe, es sollen jedoch nur die angezeigt werden, welche auch wirklich vom User noch ungelesen sind ;-)
Sithlord - So 13.07.08 15:40
Danke ;-)
So, ich habe mein Gehirn nochmal angestrengt und einen halbwegs umständlichen Weg gewählt - der aber zuverlässig geht ^^ .
Es geht ja auch nicht um Geschwindigkeit bei diesem Programm - hauptsache es macht "Ding" ^^.
Ok vielen dank an euch alle !
So bin ich zur lösung gekommen (Umständlich aber geht) :
1)Seite in TWebbrowser einlesen
2)Seitenquelltext nach Tmemo kopieren
3)Tmemo in String kopieren
4)String durchsuchen
5)Entprechende Meldung ausgeben
Das ganze dauert inklusive Laden der Seite 3-4 Sekunden, ist also relativ schnell ;-)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!