我试图自动提交一个表单,并保存TWebBrowser对象中显示的结果图像。TWebBrowser - 挂钩接收事件
的图像被加载在几个链接的JavaScript请求(AJAX),直到最后出现在文档中。
什么是获得此图像的最佳方式? 我想到挂钩接收功能能够看到http响应(这将基本上是我的形象)。
另一种可能是负载从缓存/内存图像...
我没有任何想法如何在实践中做到这一点,我希望有人可以提供帮助。
谢谢。
我试图自动提交一个表单,并保存TWebBrowser对象中显示的结果图像。TWebBrowser - 挂钩接收事件
的图像被加载在几个链接的JavaScript请求(AJAX),直到最后出现在文档中。
什么是获得此图像的最佳方式? 我想到挂钩接收功能能够看到http响应(这将基本上是我的形象)。
另一种可能是负载从缓存/内存图像...
我没有任何想法如何在实践中做到这一点,我希望有人可以提供帮助。
谢谢。
您可以使用IHTMLDocument2对象的images属性检索所有的url图像。
使用OnDocumentComplete事件查看此示例。
procedure TForm2.WebBrowser1DocumentComplete(ASender: TObject; const pDisp: IDispatch; var URL: OleVariant);
var
HTMLDocument2: IHTMLDocument2;
i : Integer;
Item : IHTMLElement;
ImageUrl : string;
begin
HTMLDocument2 := (WebBrowser1.Document AS IHTMLDocument2);
for i := 0 to HTMLDocument2.images.length -1 do
begin
Item := HTMLDocument2.images.item(i, null) As IHTMLElement;
ImageUrl:=item.getAttribute('src',0);
//do your stuff with the url image retrieved
end;
end;
可以使用OnDocumentComplete
或OnNavigateComplete2
事件(见SHDOCVW帮助)或等待WebBrowser
是在一个ReadyState READYSTATE_COMPLETE
,然后从WebBrowser.Document
读取。
但是你也可以(更简单的IMO)使用TIdHTTP.Get
直接得到响应流。
我需要知道TidHTTP.Get的确切图像url,这并不那么容易。 此外,我无法从文档中读取图像,因为它不是标记,而是通过AJAX加载到容器中。 – maxedmelon 2010-09-01 23:14:09
“我无法从文档中读取图像”...不正确。您可以使用图像集合,并且可以访问文档中的其他所有内容。 – 2010-09-02 01:28:38
是的,对不起。我现在开始工作了。你是对的:) – maxedmelon 2010-09-02 10:15:56
为了与您的应用程序更具可扩展性,你可以直接尝试EmbeddedWB。它包装IWebBrowser2,非常方便使用。 Embarcadero在其RADStudio中使用EmbeddedWB。
将得到新的RAD Studio并试一试。我也看到了一些TIEDownload对象。如果我很幸运,它会使用与TWebBrowser对象相同的会话数据下载文件... – maxedmelon 2010-09-02 10:34:13
谢谢你,这工作。任何想法如何我可以通过TWebBrowser下载图像(我需要相同的会话数据/ cookie,所以我不能使用urlmon/indy/...) – maxedmelon 2010-09-02 00:45:06