![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Доброе время суток. Подскажите Как с 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
|
||||
|
||||
|
Ну, тут уж сами, отправная точка есть)
|