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.
1.html里存放的是文本 "success=true"使用上边的代码无法正确输出success=true这一串字符而在VCL Forms Application 中则可以,请问是哪的原因?如何解决呢?
解决方案 »
- 求助:啟動時窗體在最底層,定期激活彈出同時讓memo擁有焦點!
- 请问怎么样才能将DBGrid中的数据保存到文本文件
- 请问wise打包,如何将一activeX注册到安装机器上?
- 如何取得文本文件中用字符分隔的数值?
- 50分求Lotus ScreenCam软件
- qreport中用qrshape画的竖线能自动延伸吗?
- ------如何取的后台服务器的时间?急!!!========
- 有一个字段,只有三个可能值,在DBgrid 中,如何实现只允许用户选择值,而不允许输入
- DBrichedit 是不是不能输入字母啊!
- 初学Delphi,简单问题若干
- 请求高手把我的代码优化下!关于图片拉伸的代码!
- MCI_PLAY_PARMS dwCallback 如何获取回调事件
我也知道IDHTTP简单的就可以办到,
但在这里我必须使用Webbrowser获得它的源码,不好意思了
I know I can use IDHTTPBut,Procedures require the use of Webbrowser!Thans!
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;
PS Calling sleep isn't a good option. That's why I implemented a Pause method which in turn keep calling Application.processMessages so that it doesn't give end user an image of application hangs.Hope it helps.
//Ali
while webbrowser.ReadyState < READYSTATE_COMPLETE do Application.ProcessMessages;
判断,ReadyState的值一直都是3,也就是没有加载完成,这是如果改为webbrowser.ReadyState < 3,可以向下执行就是显示的数据不正确