Доброго времени суток требуется помощь плиз как Вывести captcha.php из WebBrowser1 на фому в Image1 Делал так но нечего не получается Code: procedure TForm1.Button3Click(Sender: TObject); var body, imgs, controlRange: olevariant; begin body := WebBrowser1.OleObject.document.body; imgs := WebBrowser1.OleObject.document.images.item(0).src='captcha/captcha-ff/captcha.php'; controlRange := body.createControlRange; controlRange.add(imgs); controlRange.execCommand('Copy', False, EmptyParam); if ClipBoard.HasFormat(CF_BITMAP) then begin Image1.Picture.Bitmap.LoadFromClipboardFormat(cf_BitMap, ClipBoard.GetAsHandle(cf_Bitmap), 0); Clipboard.Clear; end; end; end. Надо выкавернуть с этого сайта http://www.vip-prom.net HTML: <div class="captcha"><img id="siimage" src="captcha/captcha-ff/captcha.php" alt="" /></div> Надеюсь найдутся профисиональные люди!!! Зарание спасибо!
1-й вариант загрузить страницу , потом в ней выполнить JS , в котором считать в массив цвета картинки, потом этот массив преобразовать в строку с разделителями и запихнуть в какой-нибуть созданый элемент пример получения массива данных о картинке PHP: function GetImg(Canva) { return Canva.getContext('2d').getImageData(0,0,Canva.width, Canva.height); } потом получить значение этого элемента и распарсить строку собрать в битмам, вывести битмап где нужно 2-й вариант поднять на каком нибуть локальном порту прокси через эту же программу, прописать в вебброузере этот прокси и в этом прокси ловить уже нужные данные
Советую почитать еще немного книги по Delphi и посмотреть примеры авторизаций в интернете, на Indy например. Не тупите!
BigSnake, Все это канешно заманчиво звучит ну ток это каким нужно быть профисиональным програмистом чтоб всё это понять я же пока мало опотен в этом.
Предлагаю несколько вариантов ответа на задачу ТС: Вариант 1. Работаем с изображением в WebBrowser Вариант 2. Два способа загрузки капчи Вариант 3.Для него необходимы компоненты PNGImage, jpeg и GIFimage 3.1: Как получить капчу 3.2.Свой вариант: 3.2.0.В uses добавляем PNGImage, jpeg или GIFimage, тут все зависит от того, какой формат изображения собираемся парсить, иногда браузер выдает формат GIF, а оказывается, что там Png и соответственно будут вылазить ошибки.В таком случае проще всего скачать картинку и посмотреть ее заголовок hex или текстовым редактором. 3.2.1.Добавляем на форму компонент IdHttp1 и IdCookieManager1. Да, иногда для парсинга капчи придется еще и куки получить. Выделяем компонент IdHttp1 и в инспекторе объектов выставляем свойство AllowCookies в true, так же в свойстве CookieManager выбираем IdCookieManager1. 3.2.2.После «{$R *.dfm}» пишем: HTML: function Pars(T_, ForS, _T: string): string; var a, b: integer; begin Result := ''; if (T_ = '') or (ForS = '') or (_T = '') then Exit; a := Pos(T_, ForS); if a = 0 then Exit else a := a + Length(T_); ForS := Copy(ForS, a, Length(ForS) - a + 1); b := Pos(_T, ForS); if b > 0 then Result := Copy(ForS, 1, b - 1); end; Эта функция как раз и будет парсить необходимый нам кусок кода для получения капчи. 3.2.3.Добавляем на форму компоненты TImage, TButton и 3 TEdit.В обработчик события Onclick кнопки пишем следующий код: HTML: procedure TForm1.Button1Click(Sender: TObject); var Page, Image :string; //тут мы объявляем переменные captcha:TStream; gif:TGIFImage; begin gif:=TGifImage.Create; try Page:=IdHTTP1.Get('http://www.zyll.net/games/game.php?id='+Edit1.text+''); //Тут указываем страницу, с которой мы будем получать капчу.Ее можно было получить с определенной страницы, но я сделал возможность ввода для параметра id в Edit1 except end; Image:=(Pars('<input name="kod1" type="hidden" value=',Page,' ></td>')); //Здесь функция Pars запишет в строковую переменную Image нужный нам кусок кода try captcha:=TStringStream.Create(IdHTTP1.Get('http://www.zyll.net/games/kod'+Image+'.gif')); //тут мы в памяти создаем изображение формата gif, получив его полный адрес except end; Edit2.Text:=Image; //Для наглядности выведем в Edit2 кусок кода, который получили в результате работы функции pars gif.LoadFromStream(captcha); //Загружаем изображение из памяти Form1.Image1.Picture.Assign(gif); //Выводим полученное изображение на компонент Image1 end; Вот, собственно и все. 3.2.4.Дополнение. Выше я писал о том, что в uses нужно подключать компонент того формата изображения, с которым мы работаем. Если бы мы выводили изображение формата jpg, то наш код изменился бы так: HTML: procedure TForm1.Button1Click(Sender: TObject); var Page, Image :string; captcha:TStream; jpg:TJPEGImage; begin jpg:=TJPEGImage.Create; try Page:=IdHTTP1.Get('http://www.zyll.net/games/game.php?id='+Edit1.text+''); except end; Image:=(Pars('<input name="kod1" type="hidden" value=',Page,' ></td>')); try captcha:=TStringStream.Create(IdHTTP1.Get('http://www.zyll.net/games/kod'+Image+'.jpg')); except end; Edit2.Text:=Image; jpg.LoadFromStream(captcha); Image1.Picture.Assign(jpg); end; Для Png так: HTML: procedure TForm1.Button1Click(Sender: TObject); var Page, Image :string; captcha:TStream; png:TPNGObject; begin png:=TPNGObject.Create; try Page:=IdHTTP1.Get('http://www.zyll.net/games/game.php?id='+Edit1.text+''); except end; Image:=(Pars('<input name="kod1" type="hidden" value=',Page,' ></td>')); try captcha:=TStringStream.Create(IdHTTP1.Get('http://www.zyll.net/games/kod'+Image+'.png')); except end; Edit2.Text:=Image; png.LoadFromStream(captcha); Image1.Picture.Assign(png); end; 3.1.5.Дополнение 2. Как можно было заметить, я писал парсер капчи для сайта http://www.zyll.net.Движок там самопальный (там и XSS, и скули есть, но это уже тема другого плана) и как я впоследствии выяснил, что капча там фиксированная и у каждого изображения есть порядковый номер, который, собственно, мы и выводили выше в Edit2.Всего там ровно 7 изображений.На основе этого я написал простейший, если так можно выразиться, механизм распознавания: HTML: begin if Form1.Edit2.Text=IntToStr(StrToInt('0')) //считываем порядковый номер изображения из Edit2, если он = 0 then //тогда Form1.Edit3.Text:=IntToStr(StrToInt('1111')); //ответ будет такой end; Далее по аналогии: begin if Form1.Edit2.Text=IntToStr(StrToInt('1')) then Form1.Edit3.Text:=IntToStr(StrToInt('1164')); end; begin if Form1.Edit2.Text=IntToStr(StrToInt('2')) then Form1.Edit3.Text:=IntToStr(StrToInt('1217')); end; begin if Form1.Edit2.Text=IntToStr(StrToInt('3')) then Form1.Edit3.Text:=IntToStr(StrToInt('1270')); end; begin if Form1.Edit2.Text=IntToStr(StrToInt('4')) then Form1.Edit3.Text:=IntToStr(StrToInt('1323')); end; begin if Form1.Edit2.Text=IntToStr(StrToInt('5')) then Form1.Edit3.Text:=IntToStr(StrToInt('1376')); end; begin if Form1.Edit2.Text=IntToStr(StrToInt('6')) then Form1.Edit3.Text:=IntToStr(StrToInt('1429')); end; 3.1.6.Исходник. Если у ТС возникнут непонятки, то на всякий случай выкладываю исходник и скомпилированный вариант программы, в которой реализовал парсинг капчи.Компилируется на Delphi XE, но думаю, что переписать под другую версию труда не составит, да и просто нагляднее будет: Скачать Commenter Вариант 4. HTML: procedure TForm1.Button1Click(Sender: TObject); var html:WideString; Stream:TStream; png:TPNGObject; begin try png:=TPNGObject.Create; html:=IdHTTP1.Get('http://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('http://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;