【问题标题】:Visual Basic - Extracting text from a webpageVisual Basic - 从网页中提取文本
【发布时间】:2013-12-12 18:33:54
【问题描述】:

我的程序旨在搜索亚马逊并从结果中提取一些数据,例如产品名称和价格。

到目前为止,我的程序将用户输入的内容粘贴到txt_Search 并在页面上按“开始”。到目前为止的代码如下:

    Private Sub btn_Search_Click(sender As Object, e As EventArgs) Handles btn_Search.Click
    Dim SearchTerm As String

    'Set SearchTerm as text input
    SearchTerm = txt_Search.Text

    'Identify the search text box
    Dim AmazonElementCollection As HtmlElementCollection = web_Browser.Document.GetElementsByTagName("Input")
    For Each curElement As HtmlElement In AmazonElementCollection
        Dim searchtextbox As String = curElement.GetAttribute("id").ToString
        If searchtextbox = "twotabsearchtextbox" Then
            'Populate the search text box
            curElement.SetAttribute("Value", searchterm)
        End If
    Next

    'BUTTON CLICK: Search button
    '<input type="submit" value="Go" class="nav-submit-input" title="Go">
    For Each curElement As HtmlElement In AmazonElementCollection
        'Find the Go button
        If curElement.GetAttribute("value").Equals("Go") Then
            'Function to click the button
            curElement.InvokeMember("click")
        End If
    Next

所以这一切都很好,因为它在一个名为web_Browser 的网络浏览器对象上完成了所有这些工作。但是,例如,如何将第一个结果的文本从网页中取出并将其放入文本框中。我希望将第一个结果的标题放入名为 txt_Title 的文本框中。谢谢。

【问题讨论】:

    标签: vba amazon webpage visual-studio-2013


    【解决方案1】:

    您需要为 web_browser 控件的DocumentCompleted 事件添加事件处理程序。

    在该事件处理程序中,您可以使用与查找搜索文本框和搜索按钮相同的方法来查找结果元素,即:循环遍历文档的元素并使用元素来识别你想要的。

    这可能看起来像这样:

    添加事件处理程序:

        If curElement.GetAttribute("value").Equals("Go") Then
            'Add the handler
            AddHandler web_Browser.DocumentCompleted, AddressOf myDocumentCompleted
    
            'Function to click the button
            curElement.InvokeMember("click")
        End If
    

    事件处理程序实现:

    Private Sub myDocumentCompleted(ByVal sender As Object, _
        ByVal e As WebBrowserDocumentCompletedEventArgs)
        Dim AmazonElementCollection As HtmlElementCollection = web_Browser.Document.GetElementsByTagName("something you need to figure out")
        For Each curElement As HtmlElement In AmazonElementCollection
            Dim resultText As String = curElement.GetAttribute("id").ToString
            If resultText = "something you need to figure out" Then
                'Populate the text box
                txt_Title.Text = curElement.innerHTML;
            End If
        Next
    End Sub
    

    注意:我没有通过编译器运行它或测试它,所以要为一些问题做好准备,但我希望你能明白。

    【讨论】:

    • 感谢您的回复。我一直在尝试弄清楚如何使用处理程序以及在哪里使用它。到目前为止,我已经使用以下代码在模块中定义了事件:Public Event DocumentCompleted As WebBrowserDocumentCompletedEventHandler 并在我的程序运行我的问题中的代码后使用Dim web_URL = web_Browser.Url AddHandler web_Browser, New WebBrowserDocumentCompletedEventHandler(AddressOf web_URL)。然而,它返回“'AddressOf' 操作数必须是方法的名称(不带括号)”。我哪里错了?
    • 我觉得应该是AddHandler web_Browser.DocumentCompleted, AddressOf myDocumentCompletedMethod
    猜你喜欢
    • 1970-01-01
    • 2020-05-17
    • 2020-09-03
    • 2018-04-03
    • 1970-01-01
    • 2014-07-24
    相关资源
    最近更新 更多