我需要得到指定url网页的html,并赋值给一个string型变量,请问如何实现.

解决方案 »

  1.   

    s := WebBrowser1.OleObject.document.documentElement.outerHTML;
      

  2.   


    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, MSHTML_TLB, OleCtrls, SHDocVw, StdCtrls, ActiveX;type
      TForm1 = class(TForm)
        WebBrowser1: TWebBrowser;
        Button1: TButton;
        Memo1: TMemo;
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure WB_GetDocumentSourceToStream(Document: IDispatch; Stream: TStream);
    // Save a TWebbrowser Document to a Stream
    var
      PersistStreamInit: IPersistStreamInit;
      StreamAdapter: IStream;
    begin
      Assert(Assigned(Document));
      Stream.Size := 0;
      Stream.Position := 0;
      if Document.QueryInterface(IPersistStreamInit,
        PersistStreamInit) = S_OK then
      begin
        StreamAdapter := TStreamAdapter.Create(Stream, soReference);
        PersistStreamInit.Save(StreamAdapter, False);
        StreamAdapter := nil;
      end;
    end;function WB_GetDocumentSourceToString(Document: IDispatch): string;
    // Save a Webbrowser Document to a string
    var
      Stream: TStringStream;
    begin
      Result := '';
      Stream := TStringStream.Create('');
      try
        WB_GetDocumentSourceToStream(Document, Stream);
        Result := StringReplace(Stream.Datastring, #$A#9, #$D#$A, [rfReplaceAll]);
        Result := StringReplace(Result, #$A, #$D#$A, [rfReplaceAll]);
      finally
        Stream.Free;
      end;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      WebBrowser1.Navigate('http://10.113.58.5');
    end;procedure TForm1.Button1Click(Sender: TObject);
    var vsHTML:string;
    begin
      vsHTML:=WB_GetDocumentSourceToString(WebBrowser1.Document);
      Memo1.Lines.Text:=vsHTML;
    end;end.
      

  3.   

    我就用 WebBrowser1.OleObject.document.documentElement.outerHTML; 得到了全部源码
      

  4.   

    WebBrowser1.OleObject.document.documentElement.outerHTML
    这个只能取到<HTML></HTML>标签内的源码,之外的取不到
      

  5.   

    s := WebBrowser1.OleObject.document.body.outerHTML;
      

  6.   

    Delphi webbrowser获取frame的源码uses
    ActiveX;function TForm1.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;// Load sample page
    // Testseite laden
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    Webbrowser1.Navigate('网址');
    end;// Save all frames in single files
    // Alle Frameseiten in einzelne Dateien speichern
    procedure TForm1.Button2Click(Sender: TObject);
    var
    IpStream: IPersistStreamInit;
    AStream: TMemoryStream;
    iw: IWebbrowser2;
    i: Integer;
    sl: TStringList;
    begin
    for i := 0 to Webbrowser1.OleObject.Document.frames.Length - 1 do
    begin
    iw := GetFrame(i);
    AStream := TMemoryStream.Create;
    try
    IpStream := iw.document as IPersistStreamInit;
    if Succeeded(IpStream.save(TStreamadapter.Create(AStream), True)) then
    begin
    AStream.Seek(0, 0);
    sl := TStringList.Create;
    sl.LoadFromStream(AStream);
    sl.SaveToFile('c:\frame' + IntToStr(i) + '.txt');
    // memo1.Lines.LoadFromStream(AStream);
    sl.Free;
    end;
    except
    end;
    AStream.Free;
    end;
    end;end.  
      

  7.   


    按下按钮后报错:Assert(Assigned(Document));在此句上?
      

  8.   

    试试 用数据流的方式截取:procedure TForm1.Button1Click(Sender: TObject);
    var
    s:string;
    ms: TMemoryStream;
    StrStream:TStringStream;
    begin
      //先读取到流中,暂存于memo1
      if not Assigned(embeddedwb1.Document) then Exit;
      ms := TMemoryStream.Create;
      (embeddedwb1.Document as IPersistStreamInit).Save(TStreamAdapter.Create(ms), True);
      ms.Position := 0;
      Memo1.Lines.LoadFromStream(ms);
      ms.Free;  //再从流中取出数据输出
      s := memo1.text;      
    end;