C#中如何自动检查webbrowser1 加载完毕文档加载完毕

最近有个小程序需要采集网页源代码,但有的网页中JS脚本又会生成额外的代码,比如http://www.cnblogs.com/lidabo/p/4169396.html
红框部分便是另外加载的代码。
此处可以看到web前端是有 "操作系统" 几个字的,但查看网页源代码之后却搜不到这几个字
C#有个webbrowser控件可以等网页加载完之后获取浏览器上所有的网页源代码(也包括额外被JS加载进来的代码)
【第一次】试验
WebBrowser webBrowser1 = new WebBrowser();
private void button1_Click(object sender, EventArgs e){
  webBrowser1.Navigate("http://www.cnblogs.com/lidabo/p/4169396.html");
  //加载完毕后触发事件webBrowser1_DocumentCompleted  webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
private void webBrowser1_DocumentCompleted(object sender, EventArgs e)//这个就是当网页载入完毕后要进行的操作{
  //将webBrowser显示的代码传入richTextBox以便调试
  richTextBox1.Text = webBrowser1.DocumentT
结果:webbrowser加载完这个页面之后,richTextBox1.Text获取的代码里面找不到  "操作系统"  几个字 , 获取的代码有1063行
网页在加载的过程中,webBrowser1_DocumentCompleted可能会触发一次以上,且相同网页可能触发次数不尽相同
有的网页会多次触发webBrowser1_DocumentCompleted,腾讯网http://www.qq.com触发了4次
【第二次】试验
//设置全局变量i
private void webBrowser1_DocumentCompleted(object sender, EventArgs e){
  i++;//以便观察这个事件被触发了多少次
  richTextBox1.Text = webBrowser1.DocumentT
结果:最后 &i &的值为 1,richTextBox1.Text获取的代码里面依然找不到  "操作系统"  几个字 , 获取的代码有1063行
按理来说不应该只触发一次、
【第三次】试验
private void webBrowser1_DocumentCompleted(object sender, EventArgs e){
  MessageBox.Show("111");//这个得迅速点掉确定才看到触发了多少次messagebox
  richTextBox1.Text = webBrowser1.DocumentT
&结果:迅速点掉messagebox的“确定”后又出现了一次messagebox,即一共两次触发了webBrowser1_DocumentCompleted事件
实验触发二次webBrowser1_DocumentCompleted事件,里面可以找到"操作系统"几个字,代码共有2095行,这次应该全部获取完毕了
加入没有迅速点掉messagebox,可能这个等待过程中,网页可能被webbrowser真的完全加载完毕从而不再触发webBrowser1_DocumentCompleted事件
【第二次】实验只触发一次webBrowser1_DocumentCompleted事件,而且获取的代码还不完全
【第三次】实验加入了messagebox(然后迅速点掉)能触发一次以上的webBrowser1_DocumentCompleted事件,获取代码完全
【第三次】实验加入了messagebox(没有迅速点掉)只能触发一次webBrowser1_DocumentCompleted事件,获取代码完全
我没弄明白
***********************************************************************************************************
那么换个思路。在第一次进入webBrowser1_DocumentCompleted事件之时开启一个timer时钟,间隔5秒,5秒之后获取一次webbrowser的代码
只触发一次时钟时间,由于时钟是另外的线程,要调用webbrowser需要用到委托
//实例化timer
System.Timers.Timer t = new System.Timers.Timer();
//定义委托变量public happy updateTxt_
public delegate void happy();
public Form1(){  InitializeComponent();
  //设定timer  t.Interval = 5000; //定时,单位ms  t.Enabled = //回调函数允许执行  t.AutoReset = //回调函数循环执行  t.Elapsed += new System.Timers.ElapsedEventHandler(theout); //到达时间的时候执行事件;&  t.Stop();}
private void Form1_Load(object sender, EventArgs e){  updateTxt_ok = new happy(UpdateTxtMethod);}
//委托执行函数
public void UpdateTxtMethod(){
  //此处不用DocumentText是因为它获取中文可能产生乱码  Encoding encoding = Encoding.GetEncoding(webBrowser1.Document.Encoding);  StreamReader stream = new StreamReader(webBrowser1.DocumentStream, encoding);  string aa = stream.ReadToEnd();
  richTextBox1.Text =  stream.Close();
//timer事件
public void theout(object source, System.Timers.ElapsedEventArgs e){  this.BeginInvoke(updateTxt_ok);//委托执行updateTxt_ok}
//按下按钮
private void button1_Click(object sender, EventArgs e){
  webBrowser1.Navigate(richTextBox1.Text);  webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
private void webBrowser1_DocumentCompleted(object sender, EventArgs e)//这个就是当网页载入完毕后要进行的操作{  t.start();//开启时钟}
阅读(...) 评论()
友情链接: |14:09 提问
在VS2013中使用C#编写winform程序,如何让webbrowser加载完成之后执行后续语句
我的方法是判断webbrowser的readytstate是否为Complete,代码:
while (true)
if (webBrowser1.ReadyState == WebBrowserReadyState.Complete)
但是单线程程序加载网页就不能执行循环,执行循环就不能加载网页,所以程序就一直死在while循环上,用进程暂停就停掉了整个进程,王爷爷不加载了。现在相求一个解决办法
按时间排序
现在的网页,使用ajax的方式加载,也就是说WebBrowserReadyState.Complete后,其实网页还在加载,不能这么判断,应该判断网页中特定的元素是否存在。
很简单,用多线程即可。
最简单做法,你用一个Timer控件,在Timer的循环里写:
if (webBrowser1.ReadyState == WebBrowserReadyState.Complete)
timer1.enabled=
//其他处理
不太知道你要做什么,如果是等加载完网页再做一些事的话,这么做毫无意义。对应的Html页面的JS里写也页面加载后的事件也是完全可以的。
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐&>&C#判断webbrowser页面最终加载完成
C#判断webbrowser页面最终加载完成
上传大小:44KB
C#判断webbrowser页面最终加载完成
综合评分:3
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var parentWrap = $(this).parents(".respond_box"),
q = parentWrap.find(".form1").serializeArray(),
resStr = $.trim(parentWrap.find(".res_area_r").val());
console.log(q);
//var res_area_r = $.trim($(".res_area_r").val());
if (resStr == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
//var mess = $(".res_area_r").val();
var mess = resS
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, data.com_username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click", '.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
var parentWrap = $(v).parents(".respond_box");
parentWrap.find(".res_area_r").val($.trim(parentWrap.find(".res_area").val()));
评论共有13条
很不错,学到了,谢谢
下来看看 是不是想要的
不是我想要的
VIP会员动态
CSDN下载频道资源及相关规则调整公告V11.10
下载频道用户反馈专区
下载频道积分规则调整V1710.18
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
资源所需积分/C币
当前拥有积分
当前拥有C币
输入下载码
为了良好体验,不建议使用迅雷下载
C#判断webbrowser页面最终加载完成
会员到期时间:
剩余下载个数:
剩余积分:0
为了良好体验,不建议使用迅雷下载
积分不足!
资源所需积分/C币
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
您的积分不足,将扣除 10 C币
为了良好体验,不建议使用迅雷下载
无法举报自己的资源
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可返还被扣除的积分
被举报人:
举报的资源分:
请选择类型
资源无法下载 ( 404页面、下载失败、资源本身问题)
资源无法使用 (文件损坏、内容缺失、题文不符)
侵犯版权资源 (侵犯公司或个人版权)
虚假资源 (恶意欺诈、刷分资源)
含色情、危害国家安全内容
含广告、木马病毒资源
*详细原因:
C#判断webbrowser页面最终加载完成c#在webbrowser打开网页怎么判断加载完成?_百度知道
c#在webbrowser打开网页怎么判断加载完成?
我有更好的答案
this.webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
obj.Reset();
while (obj.WaitOne(10, false) == false)
{ Application.DoEvents(); }messagebox();webBrowser1_DocumentCompleted事件里面写obj.Set();
采纳率:45%
为您推荐:
其他类似问题
打开网页的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。最近用到WebBrowser控件,遇到很多问题,也学习了不少新的东西。下面是我在C#下写的关于WebBrowser控件使用的代码。
1、WebBrowser常用属性
.Refresh();//刷新
.GoBack();//后退
.GoForward();//前进
.Navigate(new Uri(address)); //打开链接
.Dock = DockStyle.F //完全停靠在父容器中
.ScriptErrorsSuppressed = //关闭错误显示
Uri a = new Uri(WebBrowser.Document.ActiveElement.GetAttribute(&href&));//获取点击中的链接地址
2、WebBrowser常用事件处理
.Navigated += new WebBrowserNavigatedEventHandler(WebBrowser_Navigated);//加载中处理事件
.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(WebBrowser _DocumentCompleted);//页面加载完成处理事件
.NewWindow += new CancelEventHandler(WebBrowser _NewWindow);//新的窗口中打开页面
3、事件处理函数
3.1、打开新连接
&&&&&&& // Navigates to the given URL if it is valid.
&&&&&&& private void Navigate(WebBrowser web,String address)
&&&&&&&&& &&if (String.IsNullOrEmpty(address))
&&&&&&&&&&& if (address.Equals(&about:blank&))
&&&&&&&&&&& if (!address.StartsWith(&http://&)) address = &http://& +
&&&&&&&&&&& try
&&&&&&&&&&& {
&&&&&&&&&&&&&&& WebBrowser.Navigate(new Uri(address));
&&&&&&&&&&&&&&&
&&&&&&&&&&& }
&&&&&&&&&&& catch (System.UriFormatException)
&&&&&&&&&&& {
&&&&&&&&&&&&&&&
&&&&&&&&&&& }
&&&&&&&&&& &// Updates the URL in TextBoxAddress upon navigation.
&&&&& &&&&&&private void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e)
&&&&& &&&&&{
&&&&&&&&&&& &&toolStripTextBox1.Text = WebBrowser.Url.ToString();
&&&&&& &&&&}
3.2、新窗口处理
&&&&&&& private void WebBrowser_NewWindow(object sender, CancelEventArgs e)
&&&&&&&&&&& WebBrowser webb = new WebBrowser();
&&&&&&&&&&
&&&&&&&&&&& WebBrowser = WebBrowsers[webtab.SelectedIndex];
&&&&&&&&&&& webb.Name = &webb& + webtab.TabC
&&&&&&&&&&& Uri a = new Uri(WebBrowser.Document.ActiveElement.GetAttribute(&href&));&&&&&&&&
&&&& &&&&&&&webb.Url =
&&&&&&&&&&& webb.Dock = DockStyle.F
&&&&&&&&&&& TabPage p = new TabPage();&&&&&&&&&&&
&&&&&&&&&&& p.Controls.Add(webb);
&&&&&&&&&&& webtab.TabPages.Add(p);
&&&&&&&&&&& webtab.SelectedTab =
&&&&&&&&&&& webb.NewWindow += new CancelEventHandler(WebBrowser_NewWindow);
&&&&&&&&&&&
&&&&&&&&&&& e.Cancel =//取消在默认浏览器中打开&&&&&&&&
3.3、用户自动登陆处理
#region 用户自动登陆
private void WebBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
& &&&&HtmlDocument log_auto = WebBrowser.D
&&&&& HtmlElement log_btn =
&&&&&& foreach (HtmlElement em in log_auto.All) //轮循
&&&&&&&&&&&& string str = em.N
&&&&&&&&&&&& string id = em.Id;
&&&&&&&&& &&&if ((str == &username&) || (str == &password&) || (str == &submit&)) //减少处理
&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&& switch (str)
&&&&&&&&&&&&&&&&&& &{
&&&&&&&&&&&&&&&&&&&&&&& case &username&: em.SetAttribute(&value&, usernamexml);
&&&&&&&&&&&&&&&&&&& &&&&&&&& //赋用户名
&&&&&&&&&&&&&&&&&&&&&&& case &password&: em.SetAttribute(&value&, userpasswordxml );
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&& case &submit&: log_btn =
&&&&&&&&&&&&&&&&&&&&&&&&&&&
//获取submit按钮
&&&&&&&&&&&&&&&&&&&&&&& default:
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&& }
&&&&&&&&&&& }
&&&&&&&&&&& log_btn.InvokeMember(&click&); //触发submit事件&&&&&&&&&&&&&&&&
#endregion
与非门科技(北京)有限公司 All Rights Reserved.
京ICP证:070212号
北京市公安局备案编号: 京ICP备:号}

我要回帖

更多关于 webbrowser1 加载完毕 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信