关于DELPHI TWebBrowser获取动态验证码GIF图片

kisshexuxia 2013-07-13 02:50:58
关于获取图片代码


procedure TForm1.DomImg2Image(src:string;wb:TWebBrowser;img:TImage);
var
i:Integer;
rang:IHTMLControlRange;

begin

for i:=0 to IHTMLDocument2(wb.Document).images.length-1 do
begin
{yzm.Text:=(IHTMLDocument2(wb.Document).images.item(i,EmptyParam)as
IHTMLElement).getAttribute('src',0); }
if Pos(src,(IHTMLDocument2(wb.Document).images.item(i,EmptyParam)as
IHTMLElement).getAttribute('src',0))>0 then
begin
rang:=((IHTMLDocument2(wb.Document).body as HTMLBody).createControlRange)as
IHTMLControlRange;

rang.add(IHTMLDocument2(wb.Document).images.item(i,EmptyParam)as
IHTMLControlElement);
rang.execCommand('Copy',False,0);
try
img.Picture.Assign(ClipBoard);
//img.Picture.SaveToFile('C:\1.GIF');
except end;
break;
end;
end;

end;


这样获取的GIF图片只有其中的一帧。保存也不是GIF图片。要输出GIF完整的图片改怎么处理
...全文
393 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
kisshexuxia 2013-07-26
  • 打赏
  • 举报
回复
解决不了了,GIF的图片保存都是PNG的。idhttp会刷新。不能用。IHTMLControlElement取到的是PNG。缓存的读不到。没办法
dongmei757 2013-07-24
  • 打赏
  • 举报
回复
http https 不知道是否有区别
kisshexuxia 2013-07-21
  • 打赏
  • 举报
回复
楼上2位大哥能说的具体些吗
u011157080 2013-07-20
  • 打赏
  • 举报
回复
好好好ResourcesResources
laowang2 2013-07-19
  • 打赏
  • 举报
回复
嗯,好像有什么Htmlrender的接口可以搞定。
kisshexuxia 2013-07-19
  • 打赏
  • 举报
回复
idhttp 会刷新掉的
fzfei2 2013-07-18
  • 打赏
  • 举报
回复
直接用 idhttp 再取一次,一般态验证码片刷新了,后台的校验session会更新,以最后一次的为准
dongmei757 2013-07-18
  • 打赏
  • 举报
回复
idhttp试了么,获得的图片不一致么?
Y.A.K.E 2013-07-16
  • 打赏
  • 举报
回复
所选区域截图. 我以前用其他语言就是这么解决的.另外一种是读缓存.
NTSCPAL 2013-07-16
  • 打赏
  • 举报
回复
如果网页没有禁用缓存的话可以从缓存中读取
kisshexuxia 2013-07-16
  • 打赏
  • 举报
回复
难道真解决不了,火狐和谷歌浏览器另存为图片可以保存为GIF ,IE9只能保存为*.PNG
kisshexuxia 2013-07-16
  • 打赏
  • 举报
回复
还有这个验证码,在火狐浏览器另存为网页。里面的图片是不会变的。 但是IE9另存为。里面保存的验证码是另外一个了
kisshexuxia 2013-07-16
  • 打赏
  • 举报
回复
uses WinINet;

Function TForm1.GetCacheVerifyCodeFile(VerifyCodeURL:String; Var CacheVerifyCodeFile:String):Boolean;
Var
lpEntryInfo: PInternetCacheEntryInfo;
dwEntrySize, dwLastError, Hwd: LongWORD;
i, j: Integer;
f: String;
Begin
Result := false;
dwEntrySize := 0;
j := 0;
CacheVerifyCodeFile := '';
FindFirstUrlCacheEntry(Nil, TInternetCacheEntryInfo(Nil^), dwEntrySize);
GetMem(lpEntryInfo, dwEntrySize);
Hwd := FindFirstUrlCacheEntry(Nil, lpEntryInfo^, dwEntrySize);
If Hwd <> 0 Then
Begin
Repeat
dwEntrySize := 0;
FindNextUrlCacheEntry(Hwd, TInternetCacheEntryInfo(Nil^), dwEntrySize);
dwLastError := GetLastError();
If dwLastError = ERROR_INSUFFICIENT_BUFFER Then
Begin
GetMem(lpEntryInfo, dwEntrySize);
If FindNextUrlCacheEntry(Hwd, lpEntryInfo^, dwEntrySize) Then
begin
If Pos(UpperCase(VerifyCodeURL), UpperCase(lpEntryInfo.lpszSourceUrlName)) > 0 Then
Begin
i := FileAge(lpEntryInfo.lpszLocalFileName);
If i > j Then
Begin
j := i;
f := lpEntryInfo.lpszLocalFileName;
End
Else
DeleteUrlCacheEntry(lpEntryInfo.lpszSourceUrlName);
End;
end;
End;
Application.ProcessMessages;
Until (dwLastError = ERROR_NO_MORE_ITEMS);

If FileExists(f) Then
Begin
CacheVerifyCodeFile := f;
Result := true;
End;
End;
FreeMem(lpEntryInfo);
FindCloseUrlCache(Hwd);
End;
此函数有两个参数,第一个是网络图片地址,第二个是本地缓存地址。第二个作为输出端口。 我按这个代码写的


GetCacheVerifyCodeFile('http://auth.changyou.com/servlet/ImageCode',s);
ShowMessage(s);//取不到缓存地址


kisshexuxia 2013-07-15
  • 打赏
  • 举报
回复
没人回答吗?求指教啊

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧