Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 27.07.2012, 10:21
BLAGA BLAGA вне форума
Прохожий
 
Регистрация: 21.07.2012
Сообщения: 9
Репутация: 10
По умолчанию captcha - как поймать картинку

Имеем сайт http://www.nemexia.ru после ввода рег данных, (для теста логин testos пароль testos) редиректит на страничку с капчей. Так вот суть в следующем, не могу физически поймать картинку капчи. IE если делать сохранение странички полностью с картинками не может сохранить. а только сохраняет в веб архив. снифером облазил все, не вижу куда подкидывается капча. Хотел ее решить методом исключения не нужных цветов, но для начала мне нужен алгоритм как поймать сам GIF.
Ответить с цитированием
  #2  
Старый 27.07.2012, 10:48
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

да все просто:
Код HTML:
<input type="image" value="" name="submit" src="captcha.php" style="display: block; width: 100px; height: 50px; border: 1px solid #fff;" />
пример:



на картинке всегда будет текущее время
__________________
Пишу программы за еду.
__________________

Последний раз редактировалось NumLock, 27.07.2012 в 10:51.
Ответить с цитированием
  #3  
Старый 28.07.2012, 05:24
BLAGA BLAGA вне форума
Прохожий
 
Регистрация: 21.07.2012
Сообщения: 9
Репутация: 10
По умолчанию

при создании проекта исползовал:
Цитата:
pngextra.pas
pngimage.pas
pnglang.pas
zlibpas.pas



код писан под загрузку 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.
Проект создан в DXE2

требуется помощь, в идентификации ошибки и советы по правильному до писанию кода программы.
Прикрепляю сам проект.
Вложения
Тип файла: rar captcha.rar (167.3 Кбайт, 14 просмотров)

Последний раз редактировалось BLAGA, 28.07.2012 в 07:41.
Ответить с цитированием
  #4  
Старый 28.07.2012, 10:11
MiraLaklamon MiraLaklamon вне форума
Новичок
 
Регистрация: 07.06.2012
Сообщения: 59
Версия Delphi: 6, 7
Репутация: 10
По умолчанию

Тип картинки можно определить по заголовку файла (т.е. по нескольким первым байтам).
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);
И ещё нужно быть уверенным, что такая подстрока в строке существует, иначе функция Pos возвращает ноль, что не является корректным параметром для Delete и SetLength.

Последний раз редактировалось MiraLaklamon, 28.07.2012 в 10:19.
Ответить с цитированием
  #5  
Старый 28.07.2012, 17:24
BLAGA BLAGA вне форума
Прохожий
 
Регистрация: 21.07.2012
Сообщения: 9
Репутация: 10
По умолчанию

Цитата:
Сообщение от MiraLaklamon
Тип картинки можно определить по заголовку файла (т.е. по нескольким первым байтам).
GIF-картинки начинаются с символов 'GIF89';
такой параметр проскакивает в хттп анализаторе.
Код:
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  
Старый 28.07.2012, 18:48
MiraLaklamon MiraLaklamon вне форума
Новичок
 
Регистрация: 07.06.2012
Сообщения: 59
Версия Delphi: 6, 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от BLAGA
при компиляции матерится на строку
Код:
Delete(html,1,pos('name="submit" src="',html)+length('name="submit" src="'));
, и спотыкается на ней.
У меня компилируется без мата.
Ответить с цитированием
  #7  
Старый 30.07.2012, 09:27
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

нужно смотреть 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  
Старый 30.07.2012, 10:07
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

По сигнатуре, наверное, проще.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #9  
Старый 30.07.2012, 10:36
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

а для GdipLoadImageFromStream вообще все-равно какой формат картинки) + GdipGetImageRawFormat и с сигнатурой заморачиваться не нужно
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:34.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter