Entwickler-Ecke

Internet / Netzwerk - WebBrowser - Cookie/Cache leeren?


An(t)on Ym - Sa 27.06.09 16:47
Titel: WebBrowser - Cookie/Cache leeren?
Hallo.
Ich code gerade an einem kleinen Tool, was überpüft, ob sich eine Seite verändert hat.
Dazu ruft es diese Seite immer wieder auf, und überprüft ob sich im Quelltext ein bestimmter String befindet.
Leider funktioniert das nicht - bzw. nur beim ersten Besuch. Ich denke, dass er die Seite cached oder ein Cookie verhindert, dass er einen neuen Versuch starten kann.
Meine Frage daher:
Wie kann ich den Cache oder die Cookies von einem TWebBrowser löschen?
Vielen Dank und einen schönen Samstag wünsche ich,
Anton.


matze - Sa 27.06.09 17:06

Da der TWebbrowser den Internet Explorer verwendet, könntest du einfach vom IE die Cookies und den Cache löschen. Das ist aber nicht der Hit.

Besser ist es, wenn du einfach für deine Aufgabe die Indy Http Komponente verwendest. Du brauchst ja nur den HTML Quelltext und musst die Seite nicht darstellen oder?


An(t)on Ym - Sa 27.06.09 19:36

Erst einmal Danke für die Antwort.
Hab mir jetzt mal die Indy Komponente angeschaut und blick das leider gar nicht.
Ich arbeite mit Delphi 7 und habe nun keine Ahnung, wie ich mir den Quelltext downloaden soll.
Hättest du vielleicht eine kleine Hilfestellung parat?
Dankeschön und schönen Abend,
Anton.


matze - So 28.06.09 09:41

Also im Endeffekt müsstest du hier im Forum einiges dazu finden.

Hier mal die Kurzfassung:
Auf http://www.indyproject.org/ gehen und dort die Komponenten herunterladen. Also hier: http://indyproject.org/Sockets/Docs/Indy10Installation.DE.aspx
Auf dieser Seite steht dann auch schon, was du machen musst um die Komponenten zu installieren.
Danach findest du in deiner Toolbox einen Haufen neue Komponenten. Davon ziehst du dir die idHTTP auf dein Formular und kannst dann mit z.b. s := idhttp1.get('http://www.google.de'); Den Quelltext der Google Seite in den String s laden.


jaenicke - So 28.06.09 10:26

Wobei die Installation nicht einmal nötig ist. Es reicht die Pfade in den Bibliothekspfad aufzunehmen, dann kann man das schon benutzen. Nebenbei funktioniert es so dann auch problemlos in Turbo Delphi.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
uses
  IdHttp;

var
  HttpLoader: TIdHttp;
  PageContents: String;
begin
  HttpLoader := TIdHttp.Create;
  try
    PageContents := HttpLoader.Get('http://www.example.com');
  finally
    HttpLoader.Free;
  end;
end;


An(t)on Ym - So 28.06.09 10:49

user profile iconmatze hat folgendes geschrieben Zum zitierten Posting springen:
Also im Endeffekt müsstest du hier im Forum einiges dazu finden.

Hier mal die Kurzfassung:
Auf http://www.indyproject.org/ gehen und dort die Komponenten herunterladen. Also hier: http://indyproject.org/Sockets/Docs/Indy10Installation.DE.aspx
Auf dieser Seite steht dann auch schon, was du machen musst um die Komponenten zu installieren.
Danach findest du in deiner Toolbox einen Haufen neue Komponenten. Davon ziehst du dir die idHTTP auf dein Formular und kannst dann mit z.b. s := idhttp1.get('http://www.google.de'); Den Quelltext der Google Seite in den String s laden.



Nunja: Beim Ausführen von

Delphi-Quelltext
1:
quelltext := idhttp1.Get('https://ssl.rapidshare.com/cgi-bin/premiumzone.cgi?login=+' + lstAccounts.Items.Item[i].SubItems.Strings[0] + '&password=' + lstAccounts.Items.Item[i].SubItems.Strings[1]);                    


krieg ich nen schicken Fehler:

IOhandler is not valid.

Dabei hab ich es genauso gemacht, wie du es geschrieben hast.
Gäbs vielleicht nicht doch die Möglichkeit, dem WebBrowser zu verbieten, Cache + Cookies zu speichern?

Danke fürs Lesen und schönen Sonntag,
Anton.


jaenicke - So 28.06.09 10:57

Sag doch gleich, dass es um Rapidshare geht...
Du musst für den Zugriff auf SSL auch noch OpenSLL einbauen.
http://www.delphi-forum.de/viewtopic.php?p=567361#567361


Narses - So 28.06.09 13:15

Moin!

user profile iconAn(t)on Ym hat folgendes geschrieben Zum zitierten Posting springen:
Wie kann ich den Cache oder die Cookies von einem TWebBrowser löschen?
user profile iconmatze hat folgendes geschrieben Zum zitierten Posting springen:
Da der TWebbrowser den Internet Explorer verwendet, könntest du einfach vom IE die Cookies und den Cache löschen.
Um mal kurz die ursprüngliche Frage zu beantworten, so z.B.: ;)

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:
67:
68:
69:
70:
71:
72:
// -----------------------------------------------------------------------------
// IE-Cache leeren (threadbasierte Version)
// -----------------------------------------------------------------------------
//
// V1.00 05.01.2008, Narses
//   - erste Version
//
// (C) 2008 Narses
// -----------------------------------------------------------------------------

unit IECache;

interface

uses
  Classes;

type
  TClearIECacheThread = class(TThread)
  private
    FCount: Integer;
  public
    constructor Create(const AOnTerminate: TNotifyEvent = NIL);
    procedure Execute; override;
    property Count: Integer read FCount;
  end;

implementation

uses
  WinINet;

constructor TClearIECacheThread.Create;
begin
  inherited Create(FALSE);
  FreeOnTerminate := TRUE;
  OnTerminate := AOnTerminate;
end;

// WinINet-Functions: http://msdn2.microsoft.com/en-us/library/aa385473(VS.85).aspx
procedure TClearIECacheThread.Execute;
  var
    lpEntryInfo: PInternetCacheEntryInfo;
    hCacheDir: LongWord;
    dwEntrySize: LongWord;
begin
  dwEntrySize := 0;
  FindFirstUrlCacheEntry(nil, TInternetCacheEntryInfo(nil^), dwEntrySize);
  GetMem(lpEntryInfo, dwEntrySize);
  try
    if (dwEntrySize > 0then
      lpEntryInfo^.dwStructSize := dwEntrySize;
    hCacheDir := FindFirstUrlCacheEntry(nil, lpEntryInfo^, dwEntrySize);
    if (hCacheDir <> 0then
      repeat
        if DeleteUrlCacheEntry(lpEntryInfo^.lpszSourceUrlName) then // http://msdn2.microsoft.com/en-us/library/aa383983.aspx
          Inc(FCount);
        FreeMem(lpEntryInfo, dwEntrySize);
        dwEntrySize := 0;
        FindNextUrlCacheEntry(hCacheDir, TInternetCacheEntryInfo(nil^), dwEntrySize);
        GetMem(lpEntryInfo, dwEntrySize);
        if (dwEntrySize > 0then
          lpEntryInfo^.dwStructSize := dwEntrySize;
      until (NOT FindNextUrlCacheEntry(hCacheDir, lpEntryInfo^, dwEntrySize))
            or Terminated;
  finally
    FreeMem(lpEntryInfo, dwEntrySize);
  end;
  FindCloseUrlCache(hCacheDir)
end;

end.

user profile iconmatze hat folgendes geschrieben Zum zitierten Posting springen:
Das ist aber nicht der Hit.

Besser ist es, wenn du einfach für deine Aufgabe die Indy Http Komponente verwendest.
Das ist allerdings richtig. :)

cu
Narses


matze - Mo 29.06.09 08:50

Klappts denn mittlerweile auch mit den Indys?


noobie123 - Di 15.02.11 22:14

hi, danke für die arbeit mit dieser unit.

ich habe win7, IE 9 Beta und TembeddedWB von bsalsa und habe auch das problem dass ich nicht den cache leeren kann.

ich wollte mal fragen wie ich denn diese unnit richtig aufrufe damit der cache gelöscht wird?

die unit hab ich schon bei den uses eingetragen, bloß wenn ich dann als befehlszeile folgendes eingebe werde ich überrolt mit befehlen:

IECache.TClearIECacheThread. ... ... ... ...

mfg


Narses - Di 15.02.11 22:32

Moin!

user profile iconnoobie123 hat folgendes geschrieben Zum zitierten Posting springen:
ich wollte mal fragen wie ich denn diese unnit richtig aufrufe damit der cache gelöscht wird?IECache.TClearIECacheThread. ... ... ... ...
Das ist es doch schon fast: ;)

Delphi-Quelltext
1:
TClearIECacheThread.Create;                    
für den ganz einfachen Fall. Wenn du wissen willst, wann das Ganze fertig ist, einfach eine entsprechenden Methode als Parameter mit übergeben. :idea:

cu
Narses