谁会的帮我读取一下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;
}
使用 WebBrowser 控件抓取 js 动态生成的页面内容需要注意下面的几个问题:
1. 在 DocumentCompleted 事件触发的时候,页面刚刚加载完成,这时脚本也还没有执行,所以,此时通过 Document 取不到内容。
2. 需要在页面的脚本执行之后,才能去的脚本执行的内容,这需要等待一段时间,可以通过定时器来进行延时。
3. 所以,处理的策略是在页面加载之后启动定时器,在等待一段时间,脚本处理之后,在定时器的 Tick 事件中停止定时器,然后通过页面的 Document 对象树来获取内容。
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];
}
}
}