如题, 有各别网站无法将WebBrowser中的内容存盘,请问 各位高手如何通过WebBrowser编程实现IE中[查看]菜单中[源文件]的功能(在记事本中打开源文件),最好能直接存为文件(不通过记事本打开).
多谢了! 十分紧急, 帮忙UP者有分.

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      docHTML: IHTMLDocument3;
      sl: TStringList;
    begin
      sl := TStringList.Create;
      try
        docHTML := Webbrowser1.document as IHTMLDocument3;
        sl.Add(docHTML.documentElement.outerHTML);
        sl.SaveToFile(ExtractFilePath(Application.ExeName) + 'temp1.htm');
      finally
        sl.Free;
      end;
    end;
      

  2.   

    cronuz(cronus)兄:
     
     docHTML: IHTMLDocument3;
     编译报错, Undeclared Indentifier IHTMLDocument3 应 uses 哪个单元?
     多谢!
      

  3.   

    uses MSHTML_TLB, ComObj, ActiveX;
      

  4.   

    无法实现, 我要的是
    [查看]菜单中[源文件]功能cronuz(cronus)兄:的是将IE中的内容存储类似
    [文件]菜单中[保存]请问如何查看 !!!!!!!!! 源文件!!!!!!!!!!!!
      

  5.   

    用idhttp控件,然后idhttp.get(网址),就是源代码
      

  6.   

    Query HTMLDocument object for IPersistStream interface
      

  7.   

    ft、用TMemo控件看行不?Memo1.Lines.Text := docHTML.documentElement.outerHTML;
      

  8.   

    uses MSHTML_TLB, ComObj, ActiveX;HtmlText := IHtmlDocument2(self.WebBrowser.Document).Body.OuterHtml ;
    MEMO1.LINES.TEXT :=  HtmlText;
    MEMO1.LINES.SAVETOFILE('C:\TEXT.HTML')
      

  9.   

    icu000(icu) : 使用Indy控件对于 HTTPS 的SSL有效吗? 使用WebBrowser 可以完成吗? jiangsheng(蒋晟.MSMVP2004Jan)兄:  是使用代码如下: 
       
       Doc  :=  (WebBrowser1.Document)  as  IHTMLDocument2;  
       if  Doc<>  nil  then   Doc.execCommand('??????',False,EmptyParam);     ???? 应为什么参数,才能实现[查看]菜单中[源文件]功能
       请多多指教, 帮帮小弟!!!
       我没有试过多框架如何保存为HTML, 如[文件]中[保存]cronuz(cronus): 试过了, 不行啊.
    masterjames(james) : 试过了不行啊!   小弟要求的是在WebBrowser控件中通过编程实现如IE中[查看]菜单[源文件]的功能, 可以以MEMO控件打开源文件, 救救小弟了!!
       
        多谢各位帮助, 帮助UP者有分,决不失言.
        在线急等. 
        [8-]
     
      

  10.   

    如果只是在记事本里面查看源文件的话
    DEFINE_GUID(CGID_IWebBrowser,0xED016940L,0xBD5B,0x11cf,0xBA,
          0x4E,0x00,0xC0,0x4F,0xD7,0x08,0x16);       #define HTMLID_FIND 1
          #define HTMLID_VIEWSOURCE 2
          #define HTMLID_OPTIONS 3    LPDISPATCH lpDispatch = NULL;
             LPOLECOMMANDTARGET lpOleCommandTarget = NULL;         lpDispatch =m_webBrowser.GetDocument();
             ASSERT(lpDispatch);         // Get an IDispatch pointer for the IOleCommandTarget interface.
             lpDispatch->QueryInterface(IID_IOleCommandTarget,
          (void**)&lpOleCommandTarget);
             ASSERT(lpOleCommandTarget);         lpDispatch->Release();         // Invoke the given command id for the WebBrowser control
                  return lpOleCommandTarget->Exec(&CGID_IWebBrowser, nCmdID, 0,
                                             NULL, NULL);
    不过通常我都是用IPresistStream来获得和设置HTML内容
    http://dev.csdn.net/article/18/18465.shtm
      

  11.   

    jiangsheng(蒋晟.MSMVP2004Jan) 兄:
       多谢了! 小弟正在将 C 转为 Delphi :(
       有没有 Delphi 的代码 :)
       调试中...
      

  12.   

    jiangsheng(蒋晟.MSMVP2004Jan) 兄:
      测试失败, 以下为从Stream中保存下的HTML文档, 当前页中的数据不存在, 而在IE中查看源文件可以找到数据. 救救小弟!!!
    <html>
    <head>
    <title>LOGIN</title>
    <meta http-equiv="Content-Type" content="text/html; charset=big5"></head>
    <frameset rows="*,0" frameborder="NO" border="0" framespacing="0"> 
    <frame name="ddnet_corp_index" src="new_index.php?type_chk=&langx=">
    <frame name="ddnet_corp_func" scrolling="NO" noresize src="ok.php">
    </frameset>
    <noframes> 
    <body bgcolor="#FFFFFF" text="#000000">
    </body>
    </noframes> 
    </html> 查看源文件可见的内容(部分)<table width="780" border="0" cellspacing="1" cellpadding="0" class="m_tab" bgcolor="#000000">
        <tr class="m_title" > 
          <td width="50" > **</td>
          <td width="100"> **</td>
          <td width="350"> **</td>
          <td width="140"> **</td>
          <td width="140"> **</td>
        </tr>
        <tr class="m_rig" align="left" onmouseover="setPointer(this, 0, 'over', '#FFFFFF', '#FFCC66', '#FFCC99');" onmouseout="setPointer(this, 0, 'out', '#FFFFFF', '#FFCC66', '#FFCC99');" > 
          <td align="center">09-15<br>
            04:58:35</td>
          <td align="center">cbb2103<font color="#CC0000"> 0</font></td>
          <td>英格兰超级联赛<br>  曼联  <font color=#0000BB><b>VS.</b></font> 利物浦 &nbsp;&nbsp;<font class="td_13_c" color="red"><B></B></font><BR><font color=#CC0000>小盘  2.5</font> @ <font color=#CC0000><B>0.850</B></font></td>
          <td>1000.0</td>
          <td>-1000.0</td>
        </tr>
        <tr class="m_rig" align="left" onmouseover="setPointer(this, 0, 'over', '#FFFFFF', '#FFCC66', '#FFCC99');" onmouseout="setPointer(this, 0, 'out', '#FFFFFF', '#FFCC66', '#FFCC99');" > 
          <td align="center">09-15<br>
            05:18:30</td>
          <td align="center">cds0896<font color="#CC0000"> 0.75</font></td>
          <td>英格兰超级联赛<br>  曼联  <font color=#0000BB><b>VS.</b></font> 利物浦 &nbsp;&nbsp;<font class="td_13_c" color="red"><B></B></font><BR><font color=#CC0000>小盘  2.5</font> @ <font color=#CC0000><B>0.850</B></font></td>
          <td>100000.0</td>
          <td>-99250.0</td>
        </tr>
        <tr class="m_rig" align="left" onmouseover="setPointer(this, 0, 'over', '#FFFFFF', '#FFCC66', '#FFCC99');" onmouseout="setPointer(this, 0, 'out', '#FFFFFF', '#FFCC66', '#FFCC99');" > 
          <td align="center">09-15<br>
            12:13:16</td>
          <td align="center">cc88111<font color="#CC0000"> 0.75</font></td>
          <td>英格兰超级联赛<br>  曼联  <font color=#0000BB><b>VS.</b></font> 利物浦 &nbsp;&nbsp;<font class="td_13_c" color="red"><B></B></font><BR><font color=#CC0000>小盘  2.5</font> @ <font color=#CC0000><B>0.800</B></font></td>
          <td>5000.0</td>
          <td>-4962.5</td>
        </tr>
     
         ...........
      

  13.   

    jiangsheng(蒋晟.MSMVP2004Jan)兄: 
      是DocumentComplete啊!
      55555555555555555555
      没有办法吗?
      

  14.   

    你一共就使用了哪些控件?
    有用IDHTTP没有??
      

  15.   

    这是我写的一个工具里的一段代码,呵呵~~其实你只看一句就可以了
    如下:
    procedure TForm1.Button1Click(Sender: TObject);
    var
     Soure: TMemoryStream;
     Response: TStringStream;
    begin
       //加入URL地址
       if url.Items.IndexOf(url.Text) = -1 then
         url.Items.Add(URL.Text) ;
       Screen.Cursor := crHourGlass;
       Button2.Enabled := True;
       Button1.Enabled := False;
       try
          Memo1.Clear;
          //设置HTTP的各属性
          case Method.ItemIndex of
          0:
            begin
             HTTP.Head(url.Text);
             memo1.Lines.Add('Content-Type: ' + HTTP.Response.ContentType);
             Memo1.Lines.Add('Date: ' + DateToStr(HTTP.Response.Date));
            end;
          1://获取包体内容
            begin
             Memo1.Lines.Text := HTTP.Get(url.Text);
    //         HTTP.Post(url.Text,memo1.Lines);
             WebBrowser1.Navigate(url.Text);
            end;
          end;
       finally
          Screen.Cursor := crDefault;
          Button2.Enabled := False;
          Button1.Enabled :=true;
       end;
    end;
      

  16.   

    你要用的就是上边的HTTP(TIDHTTP)的GET()方法~~~
      

  17.   

    你要访问框架页的源文件啊
    查询IHTMLFrameElement的IWebBrowser2接口之后得到Document重新分析……
      

  18.   

    jiangsheng(蒋晟.MSMVP2004Jan)兄:
        感谢您多次观照, 我尝试过公别得到各框架有源文件, 依然得不到我所需结果.
        其代码如下: shitianj(仲) 兄:
        您使用IIndy控件是吗? 我估计不行, 不过我会试的.使用Indy控件对于 HTTPS 的SSL有效吗? 使用WebBrowser 可以完成吗?
      

  19.   

    //------------------------------------------------------------------------------
    function TMainFrame.GetFrame(FrameNo: Integer): IWebbrowser2;
    var
      OleContainer: IOleContainer;
      enum: IEnumUnknown;
      unk: IUnknown;
      Fetched: PLongint;
    begin
      while Webbrowser1.ReadyState <> READYSTATE_COMPLETE do
        Application.ProcessMessages;
      if Assigned(Webbrowser1.document) then
      begin
        Fetched := nil;
        OleContainer := Webbrowser1.Document as IOleContainer;
        OleContainer.EnumObjects(OLECONTF_EMBEDDINGS, Enum);
        Enum.Skip(FrameNo);
        Enum.Next(1, Unk, Fetched);
        Result := Unk as IWebbrowser2;
      end
      else
        Result := nil;
    end;
      

  20.   

    你这个代码似乎也可以,Frame是作为HTMLDocument的Embeddings的
    难道你搞错了访问时间?要等框架集页面的DocumentComplete的