Na pierwszej (tej która się wczytuje po wklejeniu linku do pliku) stronie nie ma, wspomniany kod pojawia się na stronie drugiej tej po kliknięciu Slow Download odczekaniu 30 sekund. To 30 sekund to tylko pierwszym razem (przy tym samym linku) później nie wiem strona zapamiętuje IP czy coś w każdym razie na ten sam link nie trzeba czekać przynajmniej jeżeli wywoła się go ponownie w ciągu kilkunastu minut.
EDIT//
Nie wiem jak Ty ale ja robię tak:
//funkcja by olesio
function TForm1.Parse(StrBegin, StrEnd, Str : string) : string;
var
B, E : integer;
begin
Result := '';
if StrBegin = '' then
begin
B := 1;
end
else
begin
B := Pos(StrBegin, Str);
end;
if B > 0 then
begin
Str := Copy(Str, B + Length(StrBegin), MaxInt);
if StrEnd = '' then
begin
E := Length(Str) + 1;
end
else
begin
E := Pos(StrEnd, Str);
end;
if E > 0 then
begin
Result := Copy(Str, 1, E - 1);
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
const
USER_AGENT = 'User-Agent: Mozilla/5.0 (Windows; U; Windows NT ' +
'5.1; pl; rv:1.9.2.10) Gecko/20100914 Firefox/3.6.17 ( .NET CLR 3.5.30729)';
CAPTCHA_API_URL = 'http://www.google.com/recaptcha/api/challenge?k=';
LINK = 'http://www.filesonic.pl/file/993501854/ChromePortable11.0.696.68.rar';
var
inStr, outStr: string;
i: Integer;
begin
try
IdHTTP1.Request.UserAgent:= USER_AGENT;
IdHTTP1.HandleRedirects:= True;
outStr:= IdHTTP1.Get(LINK);
//link z przycisku Slow Download
inStr:= Parse('<th class="freeAccount"><a href="', '" id="free_download">', outStr);
if Length(inStr) = 0 then
raise Exception.Create('Błąd pobierania linku Slow Download');
//prymitywne czekanie 30 sekund pewnie można to lepiej zrobić ale to test
for i:= 0 to 30 do
begin
outStr:= IdHTTP1.Get(inStr);
inStr:= Parse('Recaptcha.create("', '", "capt", {', outStr);
if Length(inStr) > 0 then break;//jest już link to po co czekać dalej
Sleep(1000);
Application.ProcessMessages;
end;
if Length(inStr) = 0 then //po 30 sekundach nadal nie ma linku?
raise Exception.Create('Błąd pobierania linku Captcha');
inStr:= CAPTCHA_API_URL + inStr;
outStr:= IdHTTP1.Get(inStr);
Memo1.Text:= outStr;
except
on E: Exception do
ShowMessage(E.Message);
end;
end
;
EDIT// Dziwne a teraz nie działa :/ Już zgłupiałem nie wiem od czego to zależy.