procedure TForm1.Button1Click(Sender: TObject);
var
doc, framedoc: IHTMLDocument2;
frame_dispatch: IDispatch;
ole_index: OleVariant;
i: Integer;
begin
doc := WebBrowser1.Document as IHTMLDocument2;
if doc = nil then Exit;
for i := 0 to doc.frames.length - 1 do
begin
ole_index := i;
frame_dispatch := doc.frames.item(ole_index);
if frame_dispatch = nil then Continue;
framedoc := (frame_dispatch as IHTMLWindow2).document;
if framedoc = nil then Continue;
ShowMessage(framedoc.body.innerHTML);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
ole_index: OleVariant;
FrameDis: IDispatch;
FrameWin: IHtmlWindow2;
psi:IServiceProvider;
frameb: IWebBrowser2;
pPersist: IPersistStreamInit;
ss: TStringStream;
str1, str2: String;
begin
if WebBrowser1.Busy then Exit;
Memo1.Lines.Clear;
//获取主网页网址
Memo1.Lines.Add(WebBrowser1.OleObject.document.url);
//获取主网页源码
Memo1.Lines.Add(WebBrowser1.OleObject.document.documentElement.outerHTML);
//添加空行
Memo1.Lines.Add(' ');
for i := 0 to WebBrowser1.OleObject.document.frames.length - 1 do
begin
ole_index := i;
FrameDis := (WebBrowser1.Document as IHtmlDocument2).frames.item(ole_index);
FrameDis.QueryInterface(IID_IHTMLWindow2, FrameWin) ;
if FrameWin = nil then Continue;
FrameWin.QueryInterface(IServiceProvider, psi);
if psi = nil then Continue;
psi.QueryService(IID_IWebBrowserApp,IID_IWebBrowser2,frameb);
if frameb=nil then continue;
frameb.Document.QueryInterface(IPersistStreamInit, pPersist);
if pPersist = nil then Continue;
//获取框架页网址
Memo1.Lines.Add((frameb.Document as IHtmlDocument2).url);
ss := TStringStream.Create('');
try
//获取框架页源码
if Succeeded(pPersist.Save(TStreamAdapter.Create(ss), True)) then
begin
str1 := ss.DataString;
str2 := Utf8ToAnsi(str1); //有些网页使用UTF-8编码方式,不进行转换中文会乱码
if str2 = '' then
Memo1.Lines.Add(str1)
else
Memo1.Lines.Add(str2);
end;
finally
FreeAndNil(ss);
end;
Memo1.Lines.Add(' '); //添加空行
end;
end;