Капча Яндекса 2 [Delphi]

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by TENMAX, 10 Jul 2011.

  1. TENMAX

    TENMAX Member

    Joined:
    20 Nov 2009
    Messages:
    0
    Likes Received:
    35
    Reputations:
    5
    Встретился со второй проблемой: не посылается нормально ответ из антигейта в поле для капчи яндекса.

    Код:
    Code:
    var i,a,c,b,g,o,y,j,k,p,t,h,pr,tic,ya,la,s,n,cc:string;
    R,m: Integer;
    Item: TListItem;
    list:tstringlist;
    fs:tfilestream;
    begin
    for R := 0 to Form2.Memo1.Lines.Count - 1 do
    begin
    o:=Form2.Memo1.Lines.Strings[R];
    list:=tstringlist.create;
    list.text:=Form2.idhttp1.get('http://yandex.ru/yandsearch?serverurl='+o);
    list.text:=Utf8ToAnsi(list.text);
    for m:=0 to list.count-1 do
    if pos('<img src="',list.strings[m])>0 then
    begin
    s:=copy(list.strings[m],pos('<img src="',list.strings[m])+17,(pos('" class',list.strings[m]))-(pos('<img src="',list.strings[m])+17));
    s:='http://'+s;
    try
    fs:=tfilestream.create(extractfilepath(Application.ExeName)+'captcha.gif',fmcreate);
    Form2.IdHTTP1.Get(s,fs);
    finally
    fs.free;
    Form2.rsltedit.Text:='разгадываем капчу...';
    Form2.rsltedit.Text:=recognize('captcha.gif',Form2.apikeyedit.Text,false,false,false,0,0);
    end;
    s:=StringReplace(s,'yandex.ru/','',[rfReplaceAll]);
    s:=StringReplace(s,'http://','',[rfReplaceAll]);
    j:=Form2.rsltedit.Text;
    n:=Form2.rsltedit.Text;
    if Form2.rsltedit.Text <> 'разгадываем капчу...' then
    cc:=Form2.idhttp1.get('http://yandex.ru/checkcaptcha?key='+s+'&retpath=http://yandex.ru/yandsearch?serverurl='+o+'&rep='+n);
    cc:=Utf8ToAnsi(cc);
    Form2.Memo2.Text:=cc;
    Form2.Memo3.Text:='http://yandex.ru/checkcaptcha?key='+s+'&retpath=http://yandex.ru/yandsearch?serverurl='+o+'&rep='+n;
    
    как видно, переменная cc должна присваивать страницу с введённой капчей, но WTF??? всё время пишет вы ввели неправильный код, что делать, подскажите пожалуйста?
     
  2. Pir4tt

    Pir4tt Elder - Старейшина

    Joined:
    3 Jan 2008
    Messages:
    73
    Likes Received:
    36
    Reputations:
    5
    CooKies!

    Где же ваши куки?! Ведь вся суть капчи в куках))
     
  3. Pir4tt

    Pir4tt Elder - Старейшина

    Joined:
    3 Jan 2008
    Messages:
    73
    Likes Received:
    36
    Reputations:
    5
    google.com/vingrad.ru/sources.ru/realcoding.net -> Delphi+idCookieManager

    Раз ты работаешь через инди, то оптимальный вариант прикрутить к нему ещё один компонент idCookieManager, как с ним работать ищи по примерам выше. При заходе на страничку поиска, тебе ставятся куки, которые потом передаются на урл, который тебе выдаёт капчу, после заполнения полей, опятьже запрос сопровождается твоими куками, т.е. алгоритм коротко такой:

    Заходим на http://yandex.ru/yandsearch?serverurl=..
    Сохраняем себе куки в кукиманагере
    Идём на http://yandex.ru/checkcaptcha?key=.. с уже зацепленнымим куками
    Распознаём картинку, и делаем финальный запрос, опятьже с куками
    Очищаем их и повторяенм всё сначала для следующего запроса
     
  4. TENMAX

    TENMAX Member

    Joined:
    20 Nov 2009
    Messages:
    0
    Likes Received:
    35
    Reputations:
    5
    уже всё проделывал посредством куков, разобрался вчера.
    походу в яндексе надо как то по другим ссылкам куки получать до работы с другой ссылкой.