Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VB.NET Webbrowser.Document-您看到的不是您能得到的_Vb.net_Webbrowser Control_Dom - Fatal编程技术网

VB.NET Webbrowser.Document-您看到的不是您能得到的

VB.NET Webbrowser.Document-您看到的不是您能得到的,vb.net,webbrowser-control,dom,Vb.net,Webbrowser Control,Dom,我试图编写一个简单的爬虫程序,但我的目标网页(如UI浏览器控件中显示的,或通过典型的浏览器应用程序显示的)不能作为HTMLDocument完全访问(由于框架、javascript等原因),这似乎让我感到困惑 执行下面的代码,甚至可以在控件中看到正确的网页(例如,显示项目50-59的网页),但如果我希望检索到的“下一页”超链接是“…&start=60”,我会看到其他内容–与打开第一个目录页“…&start=10”相对应的网页。 奇怪的是,如果我再按一次按钮,我就会得到我想要的东西。更奇怪的是,如果

我试图编写一个简单的爬虫程序,但我的目标网页(如UI浏览器控件中显示的,或通过典型的浏览器应用程序显示的)不能作为HTMLDocument完全访问(由于框架、javascript等原因),这似乎让我感到困惑

执行下面的代码,甚至可以在控件中看到正确的网页(例如,显示项目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
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