首页 新闻 搜索 专区 学院

winform开发webBrowser这个件怎么取得js动态创建的元素呀,分少了点~~等我长大了再补了好不好呀

0
悬赏园豆:100 [已解决问题] 解决于 2011-08-20 22:42

谁会的帮我读取一下sina博客右上角的那个“随便逛逛”的div层控件呀

http://blog.sina.com.cn/u/2211270973

我的代码如下:

1 private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
2 {
3
4
5 Thread.Sleep(500);
6 if ( (e.Url.Host == "blog.sina.com.cn"))
7 {
8 if (webBrowser1.Document.GetElementById("ramdomVisitDiv") != null){
9 //每次都是null
10 }
11 }
12 }

问题补充:

string _defualtUrl = "http://blog.sina.com.cn/u/2211270973";
public Form1()
{
InitializeComponent();
textBox1.Text
= _defualtUrl;
}


private void button1_Click(object sender, EventArgs e)
{
webBrowser1.Navigate(textBox1.Text);
}

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{


if ((e.Url.Host == "blog.sina.com.cn"))
{
if (webBrowser1.Document.GetElementById("ramdomVisitDiv") != null)
{//总是为空,不执行这里
webBrowser1.Document.GetElementById(
"ramdomVisitDiv").InvokeMember("click");
}

}



// webBrowser1.Document.ExecCommand("alert('');", true, "");

}



private void Form1_Load(object sender, EventArgs e)
{
webBrowser1.Navigate(textBox1.Text);
}



private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)
{
this.Text = e.Url.OriginalString;

}

ATATA的主页 ATATA | 初学一级 | 园豆:5
提问于:2011-08-16 15:49
< >
分享
最佳答案
0

使用 WebBrowser 控件抓取 js 动态生成的页面内容需要注意下面的几个问题:

1. 在 DocumentCompleted 事件触发的时候,页面刚刚加载完成,这时脚本也还没有执行,所以,此时通过 Document 取不到内容。
2. 需要在页面的脚本执行之后,才能去的脚本执行的内容,这需要等待一段时间,可以通过定时器来进行延时。
3. 所以,处理的策略是在页面加载之后启动定时器,在等待一段时间,脚本处理之后,在定时器的 Tick 事件中停止定时器,然后通过页面的 Document 对象树来获取内容。

收获园豆:80
冠军 | 小虾三级 |园豆:886 | 2011-08-18 14:50
你的回答确实是提到了点上了~我很喜欢这钟针对问题的回答!
ATATA | 园豆:5 (初学一级) | 2011-08-20 22:45
其他回答(1)
0

 HtmlDocument objDoc = webBrowser1.Document;
    HtmlElement obj = null;
    for (int i = 0; i < objDoc.All.Count; i++)//取出查看DIV标签
                {
                    if (objDoc.All[i].TagName.ToUpper().Equals("DIV"))
                    {
      if (objDoc.All[i].Id == "ramdomVisitDiv")
                        {
       obj = objDoc.All[i];
                        }
                    }
                }

收获园豆:20
杯具程序员 | 园豆:1718 (小虾三级) | 2011-08-16 16:03
没有用的呀~~~跟我的一样, 是null
支持(0) 反对(0) ATATA | 园豆:5 (初学一级) | 2011-08-16 16:08
你这跟我的代码差不多嘛,你是通过遍历name为'DIV'让系统多用些时间找查找控件上而已,可是查找的那段时间,也不一定就创建了呀"ramdomVisitDiv"
支持(0) 反对(0) ATATA | 园豆:5 (初学一级) | 2011-08-16 16:11
右上角的那个“随便逛逛”的div层控件 我没有看到 你那个地址?
支持(0) 反对(0) 杯具程序员 | 园豆:1718 (小虾三级) | 2011-08-16 16:20
你是否是等页面加载完了 才执行的?
支持(0) 反对(0) 杯具程序员 | 园豆:1718 (小虾三级) | 2011-08-16 16:22
webBrowser1_DocumentCompleted这个事件不就是加载完成了吗
支持(0) 反对(0) ATATA | 园豆:5 (初学一级) | 2011-08-16 16:28
你能否把你代码发过来
支持(0) 反对(0) 杯具程序员 | 园豆:1718 (小虾三级) | 2011-08-16 16:31
项目
支持(0) 反对(0) 杯具程序员 | 园豆:1718 (小虾三级) | 2011-08-16 16:31
可以的话 发到我邮箱里 xiaowang505635531@163.com
支持(0) 反对(0) 杯具程序员 | 园豆:1718 (小虾三级) | 2011-08-16 16:32
好吧,我把load的代码也发上来吧
支持(0) 反对(0) ATATA | 园豆:5 (初学一级) | 2011-08-16 16:33
我添加完代码了,看一下吧
支持(0) 反对(0) ATATA | 园豆:5 (初学一级) | 2011-08-16 16:42
是不是要登录 了 才看的到哟
支持(0) 反对(0) 杯具程序员 | 园豆:1718 (小虾三级) | 2011-08-16 16:47
哦是啊
支持(0) 反对(0) ATATA | 园豆:5 (初学一级) | 2011-08-16 16:48
我的是已经登录了的~~你有自己的博客吗,用你的登录就可以了呀
支持(0) 反对(0) ATATA | 园豆:5 (初学一级) | 2011-08-16 16:50
因为登录代码有用户名,和密码,我就不放上来了呀,
支持(0) 反对(0) ATATA | 园豆:5 (初学一级) | 2011-08-16 16:52
没有
支持(0) 反对(0) 杯具程序员 | 园豆:1718 (小虾三级) | 2011-08-16 16:53
我登录了的 没有找到
支持(0) 反对(0) 杯具程序员 | 园豆:1718 (小虾三级) | 2011-08-16 16:53
最好把你项目 发过来 我调试 你把你重要的信息删除了就OK了
支持(0) 反对(0) 杯具程序员 | 园豆:1718 (小虾三级) | 2011-08-16 16:57
除了登录的代码,全在上面了,登录的代码就那不放了,~~
支持(0) 反对(0) ATATA | 园豆:5 (初学一级) | 2011-08-16 17:47
写一个用不了多长时间的呀,兄弟!就是sina博客自动登录,自动点击随便逛逛而已~~
支持(0) 反对(0) ATATA | 园豆:5 (初学一级) | 2011-08-16 17:49
那个好像是flash把
支持(0) 反对(0) 杯具程序员 | 园豆:1718 (小虾三级) | 2011-08-16 17:54
我说怎么找不到
支持(0) 反对(0) 杯具程序员 | 园豆:1718 (小虾三级) | 2011-08-16 17:55
懂起了 我明天弄 下班了
支持(0) 反对(0) 杯具程序员 | 园豆:1718 (小虾三级) | 2011-08-16 17:59
搞定了
支持(0) 反对(0) 杯具程序员 | 园豆:1718 (小虾三级) | 2011-08-17 09:19
HtmlDocument objDoc = webBrowser1.Document;

HtmlElement obj = null;
for (int i = 0; i < objDoc.Body.All.Count; i++)//取出查看DIV标签
{
if (objDoc.Body.All[i].TagName.ToUpper().Equals("DIV"))
{
if (objDoc.Body.All[i].Id == "ramdomVisitDiv")
{
obj = objDoc.Body.All[i];
}
}
}
支持(0) 反对(0) 杯具程序员 | 园豆:1718 (小虾三级) | 2011-08-17 09:19
你弄出来没得
支持(0) 反对(0) 杯具程序员 | 园豆:1718 (小虾三级) | 2011-08-17 09:22
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册