Ну вот наконец-то добрался до того, как бы нам получить капчу с сайтов, для полуавтоматического ввода ее, а если написать алгоритм распознавания капчи или воспользоваться специальными сервисами, то и до автоматического, но прежде всего нам надо эту самую капчу получить. Ну да и до того как нам ее получить, мы должны знать какого она формата, конечно мы же не сможем запихнуть в bmp — jpg или наооборот. Вот тут есть один популярный сервис по удаленной работе, ссылки публиковать не стану, но если скачаете исходник урока, то поймете что за сервис, так вот там есть у него в поле регистрации ввода капчи, вот эту мы самю капчу и получим, а после получения, можно спокойно слать запрос на сервер для регистрации. Там капча формата png, конечно в Delphi нет возможностей по работе с этим форматом картинок, вот поэтому мы и воспользуемся библиотекой pngimage. Работать с переменными данного формата точно также, как с теми же TJPegImage.Ну что нам как всегда для начала, надо получить код нашей страничке и пропарсить ее, то есть посмотреть где этам самая картинка лежит, чтобы потом ее отобразить в TImage.
Что для этого нам понадобится
- TIdHttp
- TIdAntiFreeze
- TButton
- TImage
Про то, где находятся компоненты, скажу только про 2 компонента
- TidHTTP — вкладка Indy Clients
- TidAntiFreeze — вкладка Indy Misc
Так все компоненты находятся на нашей форме теперь можно приступить. Ну что получим код нашей страничке, а получается он так (мы это уже проходили)
procedure TForm1.Button1Click(Sender: TObject);
var
html:WideString;
begin
try
html:=IdHTTP1.Get('https://freelance.ru/registration/?cmd=agree');
except
on e:Exception do
end;
end;
Код получен, начало делу положено, теперь начнем парсить страницу и получим url на нашу картинку. Как парсить страницы, Вы можете уже, так что дополним наш код
procedure TForm1.Button1Click(Sender: TObject);
var
html:WideString;
begin
try
html:=IdHTTP1.Get('https://freelance.ru/registration/?cmd=agree');
Delete(html,1,pos('<td><img src="',html)+length('<td><img src="'));
Delete(html,pos('" id',html),length(html));
ShowMessage(html);
except
on e:Exception do
end;
end;
Отлично url картинки получено, теперь надо ее отобразить в TImage, для этого в Uses подключим модуль pngimage. Скопируйте с архива все модули в ваш проект (в папку с проектом и смело подключайте). Далее создадим переменную памяти, куда первоначально загрузим нашу картинку
procedure TForm1.Button1Click(Sender: TObject);
var
html:WideString;
Stream:TStream;
begin
try
html:=IdHTTP1.Get('https://freelance.ru/registration/?cmd=agree');
Delete(html,1,pos('<td><img src="',html)+length('<td><img src="'));
Delete(html,pos('" id',html),length(html));
Stream:=TStringStream.Create(IdHTTP1.Get('https://freelance.ru/'+html));
Stream.Free;
except
on e:Exception do
begin
Stream.Free;
end;
end;
end;
Так картинка у нас в переменной памяти, теперь надо ее отобразить, как помните, она у нас png формата, поэтому создаем переменную данного типа и отображаем ее в TImage.
procedure TForm1.Button1Click(Sender: TObject);
var
html:WideString;
Stream:TStream;
png:TPNGObject;
begin
try
png:=TPNGObject.Create;
html:=IdHTTP1.Get('https://freelance.ru/registration/?cmd=agree');
Delete(html,1,pos('<td><img src="',html)+length('<td><img src="'));
Delete(html,pos('" id',html),length(html));
Stream:=TStringStream.Create(IdHTTP1.Get('https://freelance.ru/'+html));
png.LoadFromStream(Stream);
Image1.Picture.Assign(png);
Stream.Free;
png.Free;
except
on e:Exception do
begin
png.Free;
Stream.Free;
end;
end;
end;
Теперь у меня отлично отображается картинка в TImage, можете теперь отсылать Post запрос на данный сайт и регистрироваться из программы. Ну вот и подошла к концу очередь статей по парсингу данных, теперь только парсинг данных с помощью регулярных выражений.
Интересует где не дорого можно заказать проектирование и установку систем видеонаблюдения? Обратитесь в компанию Евро-Ива. Инженеры компании сделают все необходимые работы быстро, качественно и не дорого.
Вот так у меня выглядит мой проект