我在编写一个简单的爬虫程序时,似乎被我的目标网页(如在UI浏览器控件中或通过典型的浏览器应用程序)不能作为HTMLDocument完全访问(由于框架,javascript等)VB.NET Webbrowser.Document - 你看到的并不是你可以得到的
下面的代码执行,并且正确的网页(例如显示项目50-59的网页)甚至可以在控制,但我期望检索到的“下一页”超链接是“... & start = 60”,我看到别的东西 - 对应于打开第一个目录页“... & start = 10”的那个。 奇怪的是,如果我再次按下按钮,我就会得到我要找的东西。甚至对我来说,如果我插入一个MsgBox,就等我等到WebBrowserReadyState.Complete后再说,那我就能找到我想要的东西。
Private Sub ButtonGo_Click(sender As System.Object, e As System.EventArgs) Handles ButtonGo.Click
'start at this URL
'e.g. http://www.somewebsite.com/properties?l=Dallas+TX&co=US&start=50
catalogPageURL = TextBoxInitialURL.Text
WebBrowser1.Navigate(catalogPageURL)
While WebBrowser1.ReadyState <> WebBrowserReadyState.Complete
Application.DoEvents()
End While
'Locate the URL associated with the NEXT>> hyperlink
Dim allLinksInDocument As HtmlElementCollection = WebBrowser1.Document.GetElementsByTagName("a")
Dim strNextPgLink As String = ""
For Each link As HtmlElement In allLinksInDocument
If link.GetAttribute("className") = "next" Then
strNextPgLink = link.GetAttribute("href")
End If
Next
End Sub
我GOOGLE了周围有足够的尝试之类的东西使用WebBrowser1.DocumentCompleted 事件,但仍然没有工作。我试过插入睡眠命令。
我已经避免使用WebClient和正则表达式,这是我通常会这样做的方式,因为我确信使用DOM对于我计划的其他事情会更容易,而且我意识到HTML敏捷包,但没有足够的野心去学习它。因为看起来必须有一个简单的方法才能让此dang webbrowser.document对象与您实际可以看到的内容同步。
如果这是因为JavaScript,有没有办法告诉webbrowser只执行它们?
论坛上的第一个问题,期待着更多(希望聪明的)
你只是想提取链接?如果是这样,请尝试HTML敏捷包http://htmlagilitypack.codeplex.com – 2012-02-01 23:59:33
谢谢,我正在研究HTML敏捷包,但我确实想使用WebBrowser,因为最终我会调用jscripts; GetElementById和GetAttribute的简单性也很吸引人。 – SteveValarenti 2012-02-02 16:35:33