webbrowser如何获得完整的HTML源码?

forDream_ 2010-06-24 01:24:43
现在网上百度出来很多的一个GetHtml函数的一个方法、不过这个函数貌似获取的HTML代码并不完全、只有开头的一部分、所以请教有什么办法能获得所有的?
(像我原本使用的VB可以采用webbrowser.document.all(0).outerhtml的形式来获得)
...全文
1929 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
forDream_ 2010-06-25
  • 打赏
  • 举报
回复
我原本是用idhttp的、可是苦于无法登陆、(提示验证码错误)、于是乎我现在想用webbrowser进行登陆、登陆完成后、在用idhttp进行操作
nkym0626 2010-06-25
  • 打赏
  • 举报
回复
用idhttp比较好
forDream_ 2010-06-25
  • 打赏
  • 举报
回复
确实是可以、可是不知道是我这个老电脑配置问题、还是网络问题、
当我设置断点、想看看DownloadComplete的时候、竟然网页就打不开了、、
单步调试发现DownloadComplete发生了一次、不满足条件、之后DownloadComplete就没有再次触发过、程序则陷入假死、猜想可能是我系统原因、、
Xp Sp3 + IE 7
devhp 2010-06-25
  • 打赏
  • 举报
回复
已發給你了
forDream_ 2010-06-25
  • 打赏
  • 举报
回复
To 12F
fordreamer@vip.qq.com

To 13F
容我看看..
dongmei757 2010-06-25
  • 打赏
  • 举报
回复
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;
except

end;
devhp 2010-06-25
  • 打赏
  • 举报
回复
不知道你是怎麼處理的

我得到的很正常,留個郵箱。發個給你看看

forDream_ 2010-06-25
  • 打赏
  • 举报
回复
谢谢你的帮助
采用
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给忽略掉了?亦或是其他原因?
devhp 2010-06-25
  • 打赏
  • 举报
回复
Html:=IHtmlDocument2(WebBrowser1.document).body.outerHTML;
{上面这句依然提示内存访问出错...}

這句改成這樣試試!

Html:=(wb.Document AS IHTMLDocument2).body.outerHTML;
devhp 2010-06-25
  • 打赏
  • 举报
回复
frmMain.wb1.OleObject.Document.documentElement.innerHtml;不能包括<html>標籤

frmMain.wb1.OleObject.Document.documentElement.outerHtml;試試呢。

不行的話你用按鈕直接試試。看是不是JS未執行完成。你的Timer沒有及時判斷到,等網頁顯示完成后直接

memo1.text:=frmMain.wb1.OleObject.Document.documentElement.outerHtml;看看!理論上不會出現你說情況

forDream_ 2010-06-25
  • 打赏
  • 举报
回复
网页源码大致如下:

<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;


这都是什么原因造成的呢?
forDream_ 2010-06-25
  • 打赏
  • 举报
回复
先谢谢各位的帮助、让我试试看
haochin 2010-06-24
  • 打赏
  • 举报
回复
idhttp的,我会

mmo1.Lines.Text := IdHTTP1.Get('http://www.163.com');
devhp 2010-06-24
  • 打赏
  • 举报
回复
procedure TForm1.wbDownloadComplete(Sender: TObject);//寫到事件里是最常規的
begin
if wb.ReadyState=3 then //通過交互進度判斷
html:= wb.OleObject.Document.documentElement.innerHTML;//這才是網頁全源碼,
end;

上面的 body.outerHTML; 僅僅是BODY里的內容。TITLE與樣式取不到
forDream_ 2010-06-24
  • 打赏
  • 举报
回复
假设有两个窗体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的时候、页面依旧没有加载完毕?那么如何才能判断页面是否已经成功载入了呢?
老之 2010-06-24
  • 打赏
  • 举报
回复
WebBrowser里没打开一个网页当然错
forDream_ 2010-06-24
  • 打赏
  • 举报
回复
我这里提示内存访问错误、、、
老之 2010-06-24
  • 打赏
  • 举报
回复

uses MSHTML;

IHtmlDocument2(WebBrowser1.document).body.outerHTML

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧