访问由TWebBrowser显示但未包含在其Images集合中的图像

问题描述 投票:3回答:1

网页qazxsw poi在另一个问题中出现了关于从电子表格中检索图像的问题。

如果您导航到FF中的页面,您将看到在蓝色标题条的LHS处有两个图像。

但是,如果我将页面加载到TWebBrowser并运行以下代码

here

,消息框报告的计数为1而不是预期(由我,无论如何)2。我可以轻松访问并保存到磁盘显示的第一个图像,但不是第二个或任何后续图像,因为它们不在IHtmlDocument2 procedure TForm1.GetImageCount; var Count : Integer; Doc : IHtmlDocument2; begin Doc := IDispatch(WebBrowser1.Document) as IHtmlDocument2; Count := Doc.images.length; ShowMessageFmt('ImageCount: %d', [Count]); end; 加载页面的集合。

所以我的问题是,如何获取第二张图像以将其保存到磁盘?

FF调试器显示网页上挤满了javascript,我想可能是第二个图像的显示方式,但我不知道如何去获取它。

有任何想法吗?

delphi twebbrowser
1个回答
2
投票

您链接的网站中的第二个图片位于iframe中。您可以从Images事件中访问iframe:

OnDocumentComplete

保存实际图像已经是unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.OleCtrls, SHDocVw, MsHtml; type TForm1 = class(TForm) WebBrowser1: TWebBrowser; procedure WebBrowser1DocumentComplete(ASender: TObject; const pDisp: IDispatch; const URL: OleVariant); procedure FormShow(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormShow(Sender: TObject); begin WebBrowser1.Navigate('https://www.nbbclubsites.nl/club/8000/uitslagen'); end; procedure TForm1.WebBrowser1DocumentComplete(ASender: TObject; const pDisp: IDispatch; const URL: OleVariant); var currentBrowser: IWebBrowser; topBrowser: IWebBrowser; Doc : IHtmlDocument2; begin currentBrowser := pDisp as IWebBrowser; topBrowser := (ASender as TWebBrowser).DefaultInterface; if currentBrowser = topBrowser then begin // master document Doc := currentBrowser.Document as IhtmlDocument2; ShowMessageFmt('ImageCount: %d', [Doc.images.length]); end else begin // iframe Doc := currentBrowser.Document as IhtmlDocument2; ShowMessageFmt('ImageCount: %d', [Doc.images.length]); end; end; end.

© www.soinside.com 2019 - 2024. All rights reserved.