2010-09-01 101 views
0

我试图自动提交一个表单,并保存TWebBrowser对象中显示的结果图像。TWebBrowser - 挂钩接收事件

图像被加载在几个链接的JavaScript请求(AJAX),直到最后出现在文档中。

什么是获得此图像的最佳方式? 我想到挂钩接收功能能够看到http响应(这将基本上是我的形象)。

另一种可能是负载从缓存/内存图像...

我没有任何想法如何在实践中做到这一点,我希望有人可以提供帮助。

谢谢。

回答

1

您可以使用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; 
+0

谢谢你,这工作。任何想法如何我可以通过TWebBrowser下载图像(我需要相同的会话数据/ cookie,所以我不能使用urlmon/indy/...) – maxedmelon 2010-09-02 00:45:06

1

可以使用OnDocumentCompleteOnNavigateComplete2事件(见SHDOCVW帮助)或等待WebBrowser是在一个ReadyState READYSTATE_COMPLETE,然后从WebBrowser.Document读取。

但是你也可以(更简单的IMO)使用TIdHTTP.Get直接得到响应流。

+0

我需要知道TidHTTP.Get的确切图像url,这并不那么容易。 此外,我无法从文档中读取图像,因为它不是标记,而是通过AJAX加载到容器中。 – maxedmelon 2010-09-01 23:14:09

+0

“我无法从文档中读取图像”...不正确。您可以使用图像集合,并且可以访问文档中的其他所有内容。 – 2010-09-02 01:28:38

+0

是的,对不起。我现在开始工作了。你是对的:) – maxedmelon 2010-09-02 10:15:56

1

为了与您的应用程序更具可扩展性,你可以直接尝试EmbeddedWB。它包装IWebBrowser2,非常方便使用。 Embarcadero在其RADStudio中使用EmbeddedWB。

+0

将得到新的RAD Studio并试一试。我也看到了一些TIEDownload对象。如果我很幸运,它会使用与TWebBrowser对象相同的会话数据下载文件... – maxedmelon 2010-09-02 10:34:13