zoukankan      html  css  js  c++  java
  • Delphi TWebBrowser[5] 获取含框架的网页完整html源码 及多个框架(跨域)的方法

    Delphi TWebBrowser[5] 获取含框架的网页完整html源码 及多个框架(跨域)的方法

    1、获取html源码的常规方法:

    (WebBrowser1.Document as IHtmlDocument2).body.outerHtml;
    

    2、获取含框架frame的完整html源码(<body>之外如<head>) 

    var
      ole_index, oleObj: OleVariant;
      i: integer;
    begin
    //  if WebBrowser1.Busy then  Exit; //网页加载中,退出。
      with Memo1.Lines do begin   //获取主框架网址及网页源码
        Clear;
        Add(WebBrowser1.OleObject.document.url);
        Add(WebBrowser1.OleObject.document.documentElement.outerHTML);
        Add(' ');  Add(' '); //添加空行
      end;
    //循环获取每一个子框架网址及网页源码
      for i := 0 to WebBrowser1.OleObject.document.frames.length - 1 do
      begin
        ole_index := i;
        oleObj := WebBrowser1.OleObject.document.frames.item(ole_index);
        with Memo1.Lines do begin
          Add(oleObj.document.url);
          Add(oleObj.document.documentElement.outerHtml);
          Add(' ');  Add(' '); //添加空行
        end;
      end;
    end;  

    3、多个框架(跨域)

    Uses MsHtml, ActiveX

    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;

      

      

    创建时间:2020.11.23  更新时间:

    博客园 滔Roy https://www.cnblogs.com/guorongtao 希望内容对你所有帮助,谢谢!
  • 相关阅读:
    ZABBIX自动发现添加主机功能
    Kafka史上最详细原理总结
    python的基本函数
    windows和linux出现timewait过多的解决方法
    Ext.Net使用DirectMethod.request调用一般处理程序(.ashx)并传递参数
    $.post、$.get、$.ajax三者的区别
    .net Web应用程序添加WebService引用时报错的问题
    ASP.NET TreeView控件各个节点总是居中对齐,而不是左对齐的问题
    利用Win8上的IIS来部署ASP网站
    做文件目录DEMO时发现的问题
  • 原文地址:https://www.cnblogs.com/guorongtao/p/14022728.html
Copyright © 2011-2022 走看看