Biedaku i bana masz na google i nic nie da się wyszukać? Ech, ręce opadają.
Jeżeli chcesz zapisywać tylko treść strony html z pod linka - to po co używać
do tego TWebBrowsera. To tak jakby do polowania na wróble używac jakiejś
wielkiej armaty :P Pobierz pakiet Synapse. Do katalogu projektu wrzuć pliki:
blcksock.pas
httpsend.pas
sswin32.pas
synacode.pas
synafpc.pas
synaip.pas
synautil.pas
synsock.pas
Nastepnie na formatce umieść Memo1 oraz Button1. W Memo1 podaj jakieś
linki ja dla próby dalem http://google.pl oraz http://pajacyk.pl ale Ty - jak
wnioskuje - masz na http://google.pl blokadę to podaj inny. Ważne - żeby
link zaczynał się od http://synapse.ararat.cz/doku.php/download. Później do
Button1 podczepiasz taki kod jak widzisz poniżej. Ważne by do sekcji uses
dodać moduł httpsend. Całość wygląda tak i będzie zapisywała pliki pod taką
nazwą 001.html, 002.html i tak dalej. No to teraz dorób sobie tylko pracę w
wątku tego pobierania ewentualnie, dorób też wybór katalogu docelowego,
w ktorym mają zostać zapisane pliki oraz pokazywanie postępu i tak dalej.
Poniżej masz cały kod. Na pewno do zapisywania stron Synapse nadaje się
o wiele bardziej i będzie szybszby - niż TWebBrowser czy wielgachne Indy.
A i podaję link, bo google Tobie nie działa, jak podejrzewam, skoro san nie
mogłeś znaleźć ów informacji: http://synapse.ararat.cz/doku.php/download
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
stdCtrls, httpsend;
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
public
end;
var
Form1 : TForm1;
const
Opera_UserAgent = 'Opera/9.80 (Windows NT 5.1; U; pl) Presto/2.2.15 Version/10.10';
implementation
{$R *.dfm}
procedure DownloadToFile(const URL : string; const FileName : string);
const
Location_Prefix = 'Location:' + #32;
var
SynHttp : THttpSend;
I, Position : integer;
Str, DirectLink : string;
begin
SynHttp := THttpSend.Create;
try
SynHttp.UserAgent := Opera_UserAgent;
SynHttp.HTTPMethod('GET', Url);
case SynHttp.ResultCode of
301, 302 :
begin
for I := 0 to SynHttp.Headers.Count - 1 do
begin
Str := SynHttp.Headers[I];
Position := Pos(Location_Prefix, Str);
if Position > 0 then
begin
DirectLink := Copy(Str, Position + Length(Location_Prefix), MaxInt);
Break;
end;
end;
DownloadToFile(DirectLink, FileName);
end;
else
SynHttp.Document.SaveToFile(FileName);
end;
finally
SynHttp.Free;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
const
Http_Prefix = 'http://';
var
S : string;
I : integer;
begin
for I := 0 to Memo1.Lines.Count do
begin
S := Memo1.Lines[I];
if Pos(Http_Prefix, S) = 1 then
begin
DownloadToFile(S, Format('%.3d.html', [I + 1]));
end;
end;
Memo1.Clear;
end;
end.