|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
captcha - как поймать картинку
Имеем сайт http://www.nemexia.ru после ввода рег данных, (для теста логин testos пароль testos) редиректит на страничку с капчей. Так вот суть в следующем, не могу физически поймать картинку капчи. IE если делать сохранение странички полностью с картинками не может сохранить. а только сохраняет в веб архив. снифером облазил все, не вижу куда подкидывается капча. Хотел ее решить методом исключения не нужных цветов, но для начала мне нужен алгоритм как поймать сам GIF.
|
#2
|
||||
|
||||
да все просто:
Код HTML:
на картинке всегда будет текущее время Пишу программы за еду. __________________ Последний раз редактировалось NumLock, 27.07.2012 в 10:51. |
#3
|
|||
|
|||
при создании проекта исползовал:
Цитата:
код писан под загрузку png, Но в мозиле, при подгруженной страничке, капча предлагается сохранить в gif. Так что я не знаю в каком формате вобще картинка приходит. Код:
procedure TForm1.Button1Click(Sender: TObject); var html:WideString; Stream:TStream; png:TPNGObject; begin try png:=TPNGObject.Create; html:=IdHTTP1.Get('http://game.nemexia.ru/bot_check.php?redir=%2Fplanet.php'); Delete(html,1,pos('name="submit" src="',html)+length('name="submit" src="')); Delete(html,pos('" style="display',html),length(html)); Stream:=TStringStream.Create(IdHTTP1.Get('http://game.nemexia.ru/'+html)); png.LoadFromStream(Stream); Image1.Picture.Assign(png); // тут непонятно какой тип картинки придет, если пробовать сохранить в мозила, то там gif Stream.Free; png.Free; except on e:Exception do begin png.Free; Stream.Free; end; end; end; procedure TForm1.Button2Click(Sender: TObject); begin webBrowser1.Navigate('http://www.nemexia.ru') end; end. требуется помощь, в идентификации ошибки и советы по правильному до писанию кода программы. Прикрепляю сам проект. Последний раз редактировалось BLAGA, 28.07.2012 в 07:41. |
#4
|
|||
|
|||
Тип картинки можно определить по заголовку файла (т.е. по нескольким первым байтам).
GIF-картинки начинаются с символов 'GIF89'; PNG-картинки начинаются с символов #$89'PNG'; P.S. Вместо Код:
Delete(html,pos('" style="display',html),length(html)); Код:
Delete(html,pos('" style="display',html),MaxInt); Код:
SetLength(html,pos('" style="display',html)-1); Последний раз редактировалось MiraLaklamon, 28.07.2012 в 10:19. |
#5
|
|||
|
|||
Цитата:
Код:
procedure TForm1.Button1Click(Sender: TObject); var html:WideString; Stream:TStream; Gif: TGIFImage; begin try GIF:=TGIFImage.Create; html:=IdHTTP1.Get('http://game.nemexia.ru/bot_check.php?redir=%2Fplanet.php'); Delete(html,1,pos('name="submit" src="',html)+length('name="submit" src="')); SetLength(html,pos('" style="display',html)-1); Stream:=TStringStream.Create(IdHTTP1.Get('http://game.nemexia.ru/'+html)); Gif.LoadFromStream(Stream); Image1.Picture.Assign(Gif); Stream.Free; Gif.Free; except on e:Exception do begin Gif.Free; Stream.Free; end; end; end; Код:
Delete(html,1,pos('name="submit" src="',html)+length('name="submit" src="')); Последний раз редактировалось BLAGA, 28.07.2012 в 17:39. |
#6
|
|||
|
|||
Цитата:
|
#7
|
||||
|
||||
нужно смотреть Content-Type в ответе:
Код:
type TForm1 = class(TForm) IdHTTP1: TIdHTTP; Edit1: TEdit; procedure FormCreate(Sender: TObject); ... procedure TForm1.FormCreate(Sender: TObject); var AFileStream: TFileStream; begin AFileStream:=TFileStream.Create('temp.png', fmCreate); try IdHTTP1.Get('http://j2me.webservis.ru/notedelphi.php', AFileStream); Edit1.Text:=IdHTTP1.Response.ContentType; finally AFileStream.Free; end; end; для PNG картинки будет image/png Пишу программы за еду. __________________ |
#8
|
||||
|
||||
По сигнатуре, наверное, проще.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#9
|
||||
|
||||
а для GdipLoadImageFromStream вообще все-равно какой формат картинки) + GdipGetImageRawFormat и с сигнатурой заморачиваться не нужно
Пишу программы за еду. __________________ |