axWebBrowser1使用问题

fally1981 2010-06-07 04:06:06
请高人帮忙看下
private void button2_Click(object sender, EventArgs e)
{
String url = "http://www.skyunion.net/book.php";

System.Object nullObject = 0;
string str = "";
System.Object nullObjStr = str;

axWebBrowser1.Navigate(url, ref nullObject, ref nullObjStr, ref nullObjStr, ref nullObjStr);

this.axWebBrowser1.DownloadComplete += new System.EventHandler(this.button3_Click);
}

private void button3_Click(object sender, EventArgs e)
{

IHTMLDocument2 HTMLDocument = (IHTMLDocument2)axWebBrowser1.Document;

string strHtml = HTMLDocument.body.innerHTML.ToString(); //Get HTML
string[] arHtml = strHtml.Split('\n');

writeFile("out.txt", strHtml);
}
out.txt的内容并不是http://www.skyunion.net/book.php这个地址的内容,而是上个页面的内容,请大家帮忙看下是什么原因
...全文
253 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
写错了,应该是:DocumentCompleted这个事件是可以多次触发的
  • 打赏
  • 举报
回复
顺便说一下,DownloadCompleted这个事件是可以多次触发的,比如你用webbrowser控件去访问雅虎新闻,然后在DocumentCompleted事件里用自定义的dosth()函数来处理,动态跟踪时有可能处理到一半,又跳到DocumentCompleted事件里了,需要用多线程加上ManualResetEvent来阻塞
zkcharge 2010-07-07
  • 打赏
  • 举报
回复
fally1981 2010-06-07
  • 打赏
  • 举报
回复
已解决,谢谢各位!

this.axWebBrowser1.DownloadComplete += new System.EventHandler(this.button3_Click);
改成
this.webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(this.button3_Click);
即可
应该是DocumentCompleted 事件,而不是DownloadComplete 事件
再次谢谢各位!
fally1981 2010-06-07
  • 打赏
  • 举报
回复
我分开两步做就可以的
1.webBrowser1.Navigate(url, ref nullObject, ref nullObjStr, ref nullObjStr, ref nullObjStr); 先导航到需要保存的那个页面
2. IHTMLDocument2 HTMLDocument = (IHTMLDocument2)webBrowser1.Document.DomDocument;

string strHtml = HTMLDocument.body.innerHTML.ToString(); //Get HTML
string[] arHtml = strHtml.Split('\n');

writeFile("out.txt", strHtml);
再来保存需要保存的内容
用两个按钮来做可以
并到一个里面读出来就是错的
fally1981 2010-06-07
  • 打赏
  • 举报
回复
是用2008开发的
苦苦挣扎中 2010-06-07
  • 打赏
  • 举报
回复
我用的2005开发的,没有这个事件
你的axWebBrowser1.DownloadComplete应该是失败了
你在button3_Click里面调试下他的状态看看
fally1981 2010-06-07
  • 打赏
  • 举报
回复
是很简单,我用axWebBrowser做了个最简单的浏览器,
我想通过这个去访问一个页面,然后把那个页面的内容保存下来
要保存的那个页面需要验证
fally1981 2010-06-07
  • 打赏
  • 举报
回复
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using mshtml;
using System.IO;


namespace GetWebHtml
{
public partial class Form1 : Form
{

public Form1()
{
InitializeComponent();
}

static public void writeFile(string path, string str)
{

//如果文件path存在就打开,不存在就新建 .append 是追加写, CreateNew 是覆盖
FileStream fst = new FileStream(path, FileMode.CreateNew);
StreamWriter swt = new StreamWriter(fst, System.Text.Encoding.GetEncoding("utf-8"));

//写入
swt.WriteLine(str);
swt.Close();
fst.Close();

}

private void button1_Click(object sender, EventArgs e)
{
System.Object nullObject = 0;
string str = "";
System.Object nullObjStr = str;
Cursor.Current = Cursors.WaitCursor;
axWebBrowser1.Navigate(textBox1.Text, ref nullObject, ref nullObjStr, ref nullObjStr, ref nullObjStr);
Cursor.Current = Cursors.Default;
}

private void button2_Click(object sender, EventArgs e)
{
String url = "http://fengchao.baidu.com/fc-mc/spread/preview.do?userid=1851750&keyword=%E7%BE%8E%E5%AE%B9&area=2";
//String url = "http://www.skyunion.net/book.php";

System.Object nullObject = 0;
string str = "";
System.Object nullObjStr = str;
//Cursor.Current = Cursors.WaitCursor;

axWebBrowser1.Navigate(url, ref nullObject, ref nullObjStr, ref nullObjStr, ref nullObjStr);
//Cursor.Current = Cursors.Default;

this.axWebBrowser1.DownloadComplete += new System.EventHandler(this.button3_Click);
}

private void button3_Click(object sender, EventArgs e)
{

IHTMLDocument2 HTMLDocument = (IHTMLDocument2)axWebBrowser1.Document;

string strHtml = HTMLDocument.body.innerHTML.ToString(); //Get HTML
string[] arHtml = strHtml.Split('\n');

writeFile("out.txt", strHtml);
}

private void button4_Click(object sender, EventArgs e)
{
System.Net.WebClient wc = new System.Net.WebClient();
Byte[] pageData = wc.DownloadData("http://www.skyunion.net/");
string s = System.Text.Encoding.UTF8.GetString(pageData);
writeFile("out.txt", s);
}

}
}
苦苦挣扎中 2010-06-07
  • 打赏
  • 举报
回复
这样吧,我觉得你的程序应该不是很大,你把代码发出来看下呢
fally1981 2010-06-07
  • 打赏
  • 举报
回复
谢谢smg19831002
换下位子不对啊
我读取网页内容的语句写在this.button3_Click中
如果换了顺序完全不对了
苦苦挣扎中 2010-06-07
  • 打赏
  • 举报
回复
axWebBrowser1.Navigate(url, ref nullObject, ref nullObjStr, ref nullObjStr, ref nullObjStr);

this.axWebBrowser1.DownloadComplete += new System.EventHandler(this.button3_Click);
这2句换个位置看下呢
fally1981 2010-06-07
  • 打赏
  • 举报
回复
System.Net.WebClient wc = new System.Net.WebClient();
Byte[] pageData = wc.DownloadData("网页地址");
string s= System.Text.Encoding.Default.GetString(pageData);

这个方法,如果("网页地址")需要验证,则无法取到该网页的内容啊
fally1981 2010-06-07
  • 打赏
  • 举报
回复
要执行两次才能取到我要跳转的那个页面的代码
fally1981 2010-06-07
  • 打赏
  • 举报
回复
还没有找到原因
捷哥1999 2010-06-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 fally1981 的回复:]

谢谢楼上的几们兄弟
当前WebBrowser的uri已经跳转到了http://www.skyunion.net/book.php页面
[/Quote]

什么原因?
苦苦挣扎中 2010-06-07
  • 打赏
  • 举报
回复
IHTMLDocument2 HTMLDocument = (IHTMLDocument2)axWebBrowser1.Document;

string strHtml = HTMLDocument.body.innerHTML.ToString(); //Get HTML

设置断点看下strHtml的值
fally1981 2010-06-07
  • 打赏
  • 举报
回复
谢谢楼上的几们兄弟
当前WebBrowser的uri已经跳转到了http://www.skyunion.net/book.php页面
Jessezu 2010-06-07
  • 打赏
  • 举报
回复
跟踪看看文档加载完毕没
有状态的
还有当前WebBrowser的uri是不是http://www.skyunion.net/book.php
fally1981 2010-06-07
  • 打赏
  • 举报
回复
我跟踪过了,有触发触发DownloadComplete 事件
加载更多回复(2)
由于一时的头脑发热,花了两个晚上基于AxWebBrowser写了一个浏览器MyIE。现在用这个浏览器发的帖子,有点小市民的成就感,嘿嘿。源代码可以在本人的资源里下载到,这里简单总结如下:

1、VS2005自带的WebBrowser功能较少(网上资源也不多),AxWebBrowser控件暴露的事件更多些。比如打开新窗口的控制,WebBrowser貌似没有简单的方法来实现。

2、实现标签式界面,难点有:1)所有标签共用一个地址条、状态条、导航按钮,要切换上下文,要把界面状态封装起来,我封装到 BrowserData 类里,寄存在 TabPage.Tag 属性里;2)关闭一个Tab页时,默认会激活第一个Tab页,而不会回到上一个标签,我设计了一个标签栈(_pageStack)来管理;

3、实现了状态条,赞叹VS2005的 ToolStrip 功能强大,使用起来太方便了!感谢为我们铺路的工作者们!

4、实现了收藏夹功能,跟IE实时同步,其实也很简单,就是打开 Favorite 目录,遍历目录和子目录,解析链接文件;另一个难题是调出 IE 界面,例如“Internet 选项”“整理收藏夹”“添加到收藏夹”等;

5、集成了Google、百度搜索。

6、实现了输入框的自动完成,跟IE的效果完全一致。这里再次赞叹 ToolStrip 控件的强大~~

7、实现了地址条输入框历史记录管理、搜索关键字历史记录管理

8、花的时间很短,bug很少,不过代码没什么注释,读者就费点眼神吧,呵呵 :-)

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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