版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 网友hhzjlsq在我的博客留言需要提取某个网页的日期时间,我按照他的提问访问了网页 http://www.beijing-time.org/,
如果用HttpWebRequest 和 HttpWebResponse,你会发现根本获得不了想要的时间值,
相关代码(hhzjlsq提供的代码),这是可以正确执行的:
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click Dim _StrResponse As String = "" Dim _WebRequest As HttpWebRequest = CType(WebRequest.Create("http://www.beijing-time.org/"), HttpWebRequest) _WebRequest.UserAgent = "MOZILLA/4.0 (COMPATIBLE; MSIE 7.0; WINDOWS NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" _WebRequest.Method = "GET" Dim _WebResponse As WebResponse = _WebRequest.GetResponse() Dim _ResponseStream As StreamReader = New StreamReader(_WebResponse.GetResponseStream(), System.Text.Encoding.Default) _StrResponse = _ResponseStream.ReadToEnd() TextBox1.Text = _StrResponse _WebResponse.Close() _ResponseStream.Close() End Sub但是,网页中的日期时间值是由javascript写上去的。我们使用HttpWebRequest 和 HttpWebResponse返回的值是服务器解析后返回到客户端(我们的程序),但是客户端(我们的程序)并没有运行javascript,因此也就不会得到这些值。
注意红框内,看不到年月日时分秒的值。
如果用ie把这个网页整个(包括相关文件)保存下来,你会发现其中有一个showtime.js文件,内容如下
其中就是将获得的日期时间 写入到相应位置。
那么采用其他的方法是否能获取到对应的值呢?
我们已经知道webbrowser控件可以像ie一样运行,那么它是可以运行网页的javascript的。那么是否从webbrowser可以获取需要的值呢?
访问网页的代码如下:
WebBrowser1.Navigate("http://www.beijing-time.org/")获得网页源代码的代码如下:
TextBox1.Text = WebBrowser1.DocumentText运行如下:
右侧的webbrowser可以正常运行,但是左边获得的网页源代码中仍然没有我们需要的值。
是不是webbrowser也行不通呢?答案是否定的
Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click Dim mydoc As HtmlDocument = WebBrowser1.Document Dim y As HtmlElement = mydoc.GetElementById("y") Dim m As HtmlElement = mydoc.GetElementById("m") Dim n As HtmlElement = mydoc.GetElementById("n") Dim w As HtmlElement = mydoc.GetElementById("w") Dim hrs As HtmlElement = mydoc.GetElementById("hrs") Dim min As HtmlElement = mydoc.GetElementById("min") Dim sec As HtmlElement = mydoc.GetElementById("sec") MessageBox.Show("网页时间是" & vbCrLf & y.InnerText & "年" & m.InnerText & "月" & n.InnerText & "日" & vbCrLf & "星期" & w.InnerText & vbCrLf & hrs.InnerText & ":" & min.InnerText & ":" & sec.InnerText) End Sub我们对日期时间那几个HtmlElement取InnerText就能获得对应的值了:
由于.net平台下C#和vb.Net很相似,本文也可以为C#爱好者提供参考。
学习更多vb.net知识,请参看vb.net 教程 目录