现在网上百度出来很多的一个GetHtml函数的一个方法、不过这个函数貌似获取的HTML代码并不完全、只有开头的一部分、所以请教有什么办法能获得所有的?
(像我原本使用的VB可以采用webbrowser.document.all(0).outerhtml的形式来获得)

解决方案 »

  1.   


    uses MSHTML;IHtmlDocument2(WebBrowser1.document).body.outerHTML
      

  2.   

    WebBrowser里没打开一个网页当然错
      

  3.   

    假设有两个窗体F1 F2
    显示F1时、让F2的webbrowser加载某网页、同时F1内有timer控件检测F2的webbrowser状态、
    我通过判断webbrowser的busy属性来确定是否加载完成、然而这行代码我通过//timer里、就拿说的例子
    var
    html:string;
    begin
    if not f2.webbrowser.busy then
    begin
    html:=IHtmlDocument2(WebBrowser1.document).body.outerHTML;//就这里提示访问错误
    end;
    end;难道说busy为false的时候、页面依旧没有加载完毕?那么如何才能判断页面是否已经成功载入了呢?
      

  4.   

    procedure TForm1.wbDownloadComplete(Sender: TObject);//寫到事件里是最常規的
    begin
      if wb.ReadyState=3 then //通過交互進度判斷
         html:= wb.OleObject.Document.documentElement.innerHTML;//這才是網頁全源碼,
    end;上面的 body.outerHTML; 僅僅是BODY里的內容。TITLE與樣式取不到
      

  5.   

    idhttp的,我会mmo1.Lines.Text := IdHTTP1.Get('http://www.163.com');
      

  6.   

    网页源码大致如下:<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <title>标题</title> 
    <meta name="keywords" content=""/> 
    <meta name="description" content=""/> 
    这里嵌入了一些JS脚本 
    </head> 
    <script language="javascript"> 
    //if (top.location != self.location)</script> 
    <body> 
    中间省略
    </body> 
    </html> 然而我依然在timer里判断  if (frmMain.wb1.ReadyState = 3) and
         (not frmMain.wb1.Busy) then
      begin
        Html:=frmMain.wb1.OleObject.Document.documentElement.innerHtml;
        {上面这句话只能获得head部分的、其他的源码都看不到、原因不明}
        Html:=IHtmlDocument2(WebBrowser1.document).body.outerHTML;
        {上面这句依然提示内存访问出错...}
      end;
    这都是什么原因造成的呢?
      

  7.   

    frmMain.wb1.OleObject.Document.documentElement.innerHtml;不能包括<html>標籤frmMain.wb1.OleObject.Document.documentElement.outerHtml;試試呢。不行的話你用按鈕直接試試。看是不是JS未執行完成。你的Timer沒有及時判斷到,等網頁顯示完成后直接memo1.text:=frmMain.wb1.OleObject.Document.documentElement.outerHtml;看看!理論上不會出現你說情況
      

  8.   

    Html:=IHtmlDocument2(WebBrowser1.document).body.outerHTML;
        {上面这句依然提示内存访问出错...}這句改成這樣試試!Html:=(wb.Document AS IHTMLDocument2).body.outerHTML;
      

  9.   

    谢谢你的帮助
    采用
    frmMain.wb1.OleObject.Document.documentElement.outerHtml;
    的方法、获取的源码很奇怪、包含了html标签、可是html标签内竟然没有body标签、而且js脚本也一并被忽略掉了、、
    Html:=(wb.Document AS IHTMLDocument2).body.outerHTML;
    的方法也依然提示内存访问错误、、我访问的地址是:
    http://www.19mayi.com/index.php/account/login
    看了源码、这页面有相当一部分的内容在注释符中间、难道webbrowser就直接把注释中的HTML给忽略掉了?亦或是其他原因?
      

  10.   

    var
    downok :boolean;
    在f2.WB1.OnDocumentComplete判断网页下载完毕,
    使用not WB1.Busy 或 WB1.ReadyState =  READYSTATE_COMPLETE 或 WB1.Application = pDisp尝试
    downok := True;f1.Time内
    if downok then
    try
      Html := WB1.OleObject.document.documentelement.innerHtml;
      downok := false;
    exceptend;
      

  11.   

    To 12F
    [email protected] 13F
    容我看看..
      

  12.   

    确实是可以、可是不知道是我这个老电脑配置问题、还是网络问题、
    当我设置断点、想看看DownloadComplete的时候、竟然网页就打不开了、、
    单步调试发现DownloadComplete发生了一次、不满足条件、之后DownloadComplete就没有再次触发过、程序则陷入假死、猜想可能是我系统原因、、
    Xp Sp3 + IE 7
      

  13.   

    我原本是用idhttp的、可是苦于无法登陆、(提示验证码错误)、于是乎我现在想用webbrowser进行登陆、登陆完成后、在用idhttp进行操作