VB.NET Webbrowser.Document-您看到的不是您能得到的
我试图编写一个简单的爬虫程序,但我的目标网页(如UI浏览器控件中显示的,或通过典型的浏览器应用程序显示的)不能作为HTMLDocument完全访问(由于框架、javascript等原因),这似乎让我感到困惑 执行下面的代码,甚至可以在控件中看到正确的网页(例如,显示项目50-59的网页),但如果我希望检索到的“下一页”超链接是“…&start=60”,我会看到其他内容–与打开第一个目录页“…&start=10”相对应的网页。 奇怪的是,如果我再按一次按钮,我就会得到我想要的东西。更奇怪的是,如果我插入了一个MsgBox,在我循环等待WebBrowserReadyState.Complete之后说,那么我就得到了我想要的VB.NET Webbrowser.Document-您看到的不是您能得到的,vb.net,webbrowser-control,dom,Vb.net,Webbrowser Control,Dom,我试图编写一个简单的爬虫程序,但我的目标网页(如UI浏览器控件中显示的,或通过典型的浏览器应用程序显示的)不能作为HTMLDocument完全访问(由于框架、javascript等原因),这似乎让我感到困惑 执行下面的代码,甚至可以在控件中看到正确的网页(例如,显示项目50-59的网页),但如果我希望检索到的“下一页”超链接是“…&start=60”,我会看到其他内容–与打开第一个目录页“…&start=10”相对应的网页。 奇怪的是,如果我再按一次按钮,我就会得到我想要的东西。更奇怪的是,如果
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
Private子按钮单击(发件人作为System.Object,e作为System.EventArgs)处理按钮。单击
'从这个URL开始
”“例如。http://www.somewebsite.com/properties?l=Dallas+TX&co=US&start=50
catalogPageURL=TextBoxInitialURL.Text
WebBrowser1.导航(catalogPageURL)
而WebBrowser1.ReadyState WebBrowserReadyState.Complete
Application.DoEvents()
结束时
'找到与下一个>>超链接关联的URL
将allLinksInDocument作为HtmlElementCollection=WebBrowser1.Document.GetElementsByTagName(“a”)进行调整
Dim strNextPgLink As String=“”
对于allLinksInDocument中作为HtmlElement的每个链接
如果link.GetAttribute(“className”)=“next”,则
strNextPgLink=link.GetAttribute(“href”)
如果结束
下一个
端接头
我在谷歌上搜索了足够多的内容,尝试使用WebBrowser1.document之类的工具
事件,但仍然不起作用。我试过插入睡眠命令
我避免了使用WebClient和正则表达式,我通常会这样做,因为我相信使用DOM对于我计划的其他事情来说会更容易,而且我知道HTML Agility Pack,但没有足够的雄心壮志去学习它。因为似乎必须有一种简单的方法使这个dang webbrowser.document对象与您实际看到的内容同步
如果这是因为javascript,有没有一种方法可以让webbrowser只执行它们
论坛上的第一个问题,期待更多(希望是更聪明的)在使用webbrowser1.Document或类似的东西时,请注意-您不会得到“原始html” 示例:(假设wbMain是一个webbrowser控件) 在本例中,RTB_RawHTML的body标记部分中显示的body标记中的代码与RTB_BodyHTML中显示的html不完全匹配。通过(yourwebbrowserhere)访问它。Document.Body.OuterHtml似乎在某种程度上“清理”了它,而不是(yourwebbrowserhere)检索的“原始”html。DocumentText 当我制作网页刮板时,这对我来说是个问题,因为它会不断地甩我——有时我会尝试匹配一个标签,它会找到它,而有时即使我确信它在那里,它也不会找到。原因是我试图匹配原始html,但我需要匹配“已清理”的html
我不确定这是否能帮你解决问题——对我来说确实如此 你只是想提取链接吗?如果是这样的话,试试HTML敏捷包谢谢,我正在研究HTML敏捷包,但我确实想使用WebBrowser,因为最终我会想调用JScript;GetElementById和GetAttribute的简单性也很吸引人。
RTB_RawHTML.Text = wbMain.DocumentText
Try
RTB_BodyHTML.Text = wbMain.Document.Body.OuterHtml
Catch
debugMessage("Body tag not found.")
End Try