|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
webbrowser сохранить картинку с капчей
Доброе время суток. Подскажите Как с Twebbrowser вытащить картинку с капчей.
Пробовал из кэша по примеру из интернета капча Solve Media Код:
procedure SaveImageFromIHtmlDocument2(AIHtmlDocument2: IHtmlDocument2; const ADir: string); var Images: IHTMLElementCollection; i, P: Integer; ImgElement: IHTMLImgElement; Buff: Pointer; BuffSize: DWORD; URL: String; NewName: string; ElementRender: IHTMLElementRender; Bitmap: TBitmap; begin if not Assigned(AIHtmlDocument2) then exit; Images := AIHtmlDocument2.images; if not Assigned(Images) then exit; for i := 0 to Images.length - 1 do if Succeeded(Images.item(i, 0).QueryInterface(IHTMLImgElement, ImgElement)) then try URL := ImgElement.src; NewName := URL; P := LastDelimiter('/', NewName); if P > 0 then Delete(NewName, 1, P); NewName := ChangeFileExt(ADir + inttostr(i), '.png'); Buff := nil; BuffSize := 0; if not RetrieveUrlCacheEntryFile(PChar(URL), TInternetCacheEntryInfo(Buff^), BuffSize, 0) and (GetLastError = ERROR_INSUFFICIENT_BUFFER) then begin GetMem(Buff, BuffSize); try if RetrieveUrlCacheEntryFile(PChar(URL), TInternetCacheEntryInfo(Buff^), BuffSize, 0) then try if Succeeded(ImgElement.QueryInterface(IHTMLElementRender, ElementRender)) then try Bitmap := TBitmap.Create; try with ImgElement as IHTMLElement, Bitmap, Canvas do begin Width := offsetWidth; Height := offsetHeight; Brush.Color := clWhite; FillRect(ClipRect); ElementRender.DrawToDC(Handle); SaveToFile(NewName); end; finally Bitmap.Free; end; finally ElementRender := nil; end; finally; end; finally ImgElement := nil; end; end; finally end; end; Поиск по форуму побывал, и гугл не помог Сайт где пытаюсь картинку вытащить http://moonbit.co.in/ подскажите куда смотреть что не так делаю |
#2
|
||||
|
||||
Проверьте код, сохраняется ли скриншот всей страницы с капчей:
Код:
procedure WebBrowserScreenShot(const wb: TWebBrowser; const fileName: TFileName) ; var viewObject : IViewObject; r : TRect; bitmap : TBitmap; begin if wb.Document <> nil then begin wb.Document.QueryInterface(IViewObject, viewObject) ; if Assigned(viewObject) then try bitmap := TBitmap.Create; try r := Rect(0, 0, wb.Width, wb.Height) ; bitmap.Height := wb.Height; bitmap.Width := wb.Width; viewObject.Draw(DVASPECT_CONTENT, 1, nil, nil, Application.Handle, bitmap.Canvas.Handle, @r, nil, nil, 0) ; with TJPEGImage.Create do try Assign(bitmap) ; SaveToFile(fileName) ; finally Free; end; finally bitmap.Free; end; finally viewObject._Release; end; end; end; //uses as: procedure TForm1.FormCreate(Sender: TObject) ; begin WebBrowser1.Navigate('http://moonbit.co.in/') ; end; procedure TForm1.WebBrowser1NavigateComplete2(ASender: TObject; const pDisp: IDispatch; var URL: OleVariant) ; begin WebBrowserScreenShot(WebBrowser1,'c:\WebBrowserImage.jpg') ; end; |
Этот пользователь сказал Спасибо Vayrus за это полезное сообщение: | ||
terskovma (09.01.2019)
|
#3
|
|||
|
|||
Спасибо за ответ, да сохраняется. то есть надо делать снимок и его обрабатывать дальше, а напрямую из Twebbrowser вытащить картинку не получиться?
|
#4
|
||||
|
||||
Ну, тут уж сами, отправная точка есть)
|