delphi下载图像而不刷新页面
有一个网页,其中包括一个基本的验证码图像,我解决了验证码从网站下载图像和使用特萨拉特。我正在使用这个函数来显示Timage对象中的图像,无需下载delphi下载图像而不刷新页面,delphi,runtime,captcha,Delphi,Runtime,Captcha,有一个网页,其中包括一个基本的验证码图像,我解决了验证码从网站下载图像和使用特萨拉特。我正在使用这个函数来显示Timage对象中的图像,无需下载 FUNCTION DownloadImage(CONST URL : STRING ; ImageType : TGraphicClass = NIL) : TBitMap; VAR HTTP : TIdHttp; S : TStream; IMG : TGraphic;
FUNCTION DownloadImage(CONST URL : STRING ; ImageType : TGraphicClass = NIL) : TBitMap;
VAR
HTTP : TIdHttp;
S : TStream;
IMG : TGraphic;
STR : AnsiString;
LHandler: TIdSSLIOHandlerSocketOpenSSL;
BEGIN
HTTP:=TIdHttp.Create(NIL);
LHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
TRY
HTTP.IOHandler:=LHandler;
S:=TMemoryStream.Create;
TRY
HTTP.Get(URL,S);
IF NOT Assigned(ImageType) THEN BEGIN
S.Position:=0;
SetLength(STR,5);
S.Read(STR[1],LENGTH(STR));
IF COPY(STR,1,2)='BM' THEN
ImageType:=TBitMap
ELSE IF COPY(STR,1,3)='GIF' THEN
ImageType:=TGIFImage
ELSE IF COPY(STR,2,3)='PNG' THEN
ImageType:=TPngImage
ELSE IF (ORD(STR[1])=$FF) AND (ORD(STR[2])=$D8) THEN
ImageType:=TJPEGImage
END;
IF NOT Assigned(ImageType) THEN RAISE EInvalidImage.Create('Unrecognized file format!');
IMG:=ImageType.Create;
TRY
S.Position:=0;
IMG.LoadFromStream(S);
Result:=TBitMap.Create;
TRY
Result.Assign(IMG)
EXCEPT
Result.Free;
RAISE
END
FINALLY
IMG.Free
END
FINALLY
S.Free
END
FINALLY
HTTP.Free
END
END;
或下载图片
function DownLoadInternetFile(Source, Dest : String): Boolean;
begin
try
Result := URLDownloadToFile(nil,PChar(Source),PChar(Dest),0,nil) = 0
except
Result := False;
end;
end;
问题是这两个函数都连接到web站点以获取图像,因此当我在表单上使用webbrowser浏览页面时,下载的验证码图片和浏览页面的验证码图片是不同的,我试图做的事情是在文档完成时直接从embeddedwb或webbrowser对象获取图片,我还尝试在运行时获取webbrowser的屏幕截图,但失败了,该网页为:https://esgm.sgk.gov.tr/Esgm/“,提前谢谢。很抱歉英文不好如果您的表单上有TWebBrowser,您可以修改该文档。您可以将画布添加到文档中,将图像绘制到画布上,然后使用canvas.toDataURL获取图像的base64编码表示形式 在这个问题上也做了类似的事情,只是用Javascript。 在Delphi中会产生类似的结果
function GetBase64Image(WebBrowser: TWebBrowser; ImageId: string): string;
var
Document, Image, Canvas, Context: OleVariant;
begin
Document := WebBrowser.Document;
Image := Document.getElementById(ImageId);
Canvas := Document.createElement('canvas');
Canvas.Width := Image.Width;
Canvas.Height := Image.Height;
Context := Canvas.getContext('2d');
Context.drawImage(Image, 0, 0);
Result := Canvas.toDataURL('image/png');
// Have to fix this. No time, sorry.
//return dataURL.replace(/^data:image\/(png|jpg);base64,/, "");
end;
验证码是用来阻止你做你想做的事情的。公平的是,如果你打败了它,你就用你自己的技能去战胜它!你对这个问题使用了错误的方法。您首先需要弄清楚验证码是如何工作的,然后弄清楚如何击败它。提示:您永远不会两次获得相同的图像,页面的HTML总是相同的,cookies在每次刷新时都不会更改。它是100%服务器端的,这是它的弱点。我还没有尝试过,但我认为你需要安装IE9才能工作。TWebBrowser用户IE和IE 8不支持HTML5画布。