控制台中动态创建Webbrowser后获取源码
program Project1;{$APPTYPE CONSOLE}uses SysUtils,SHDocVw,MSHTML;var iall : IHTMLElement; Webbrowser:TWebBrowser;begin WebBrowser :=TWebBrowser.Create(nil); WebBrowser.Navigate('http://192.168.1.101/1.html'); Sleep(1000); if Assigned(WebBrowser.Document) then begin iall := (WebBrowser.Document AS IHTMLDocument2).body; while iall.parentElement <> nil do begin iall := iall.parentElement; end; Writeln(iall.outerHTML); end; Readln; Webbrowser.Free;end.procedure Pause(const ADelay: Cardinal);var Start: Cardinal;begin Start := Windows.GetTickCount; repeat Application.ProcessMessages; until Int64(Windows.GetTickCount) - Int64(Start) >= ADelay;end;function getHTML(WB : TWebBrowser) : String ; var PersistStream: IPersistStreamInit; Stream: IStream; strStream: TStringStream; begin Result := ''; if Assigned(WB.Document) then begin PersistStream := WB.Document as IPersistStreamInit; strStream := TStringStream.Create('') ; try Stream := TStreamAdapter.Create(strStream, soReference) as IStream; if Succeeded(PersistStream.Save(Stream, True)) then Result := strStream.DataString; finally strStream.Free; end; end;end;procedure TForm1.Button1Click(Sender: TObject);var browser : TWebBrowser; Flags : OleVariant;begin Flags := navNoHistory or navNoReadFromCache or navNoWriteToCache; browser := TWebBrowser.Create(nil); try browser.Navigate(Edit1.Text, Flags); while browser.Busy do Pause(5); memo1.Text := getHTML(browser); finally browser.Free; end;end;
[解决办法]
Definitely you can not have any TWinControl descendent in console environment. And plus I don't understand why would you go with WinControl in non-window (console) environment?
//Ali