网页here在另一个网页中出现 这里有一个关于从电子表格中检索图像的问题。
如果您导航到FF中的页面,您会发现有两个图像位于 蓝色的标题栏。
但是,如果我将页面加载到TWebBrowser中并运行以下代码
procedure TForm1.GetImageCount;
var
Count : Integer;
Doc : IHtmlDocument2;
begin
Doc := IDispatch(WebBrowser1.Document) as IHtmlDocument2;
Count := Doc.images.length;
ShowMessageFmt('ImageCount: %d', [Count]);
end;
,该消息框报告计数为1而不是预期值(无论如何,对我来说)
2.我可以轻松访问显示的第一张图像并将其保存到磁盘,但不能
第二个或之后的任何一个,因为它们不在已加载页面的IHtmlDocument2 Images
集合中。
所以我的问题是,如何获得第二张图像以将其保存到磁盘?
FF调试器显示网页塞满了JavaScript,我想 可能是第二张图片的显示方式,但是我不知道如何去获取它。
有什么想法吗?
答案 0 :(得分:2)
您链接的网站中的第二张图片位于iframe中。
您可以通过OnDocumentComplete
事件访问iframe:
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.
保存实际图像已经covered in another question