2013-12-12 75 views
1

我的程序旨在搜索Amazon并从结果中提取数据位(如产品名称和价格)。Visual Basic - 从网页中提取文本

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

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的web浏览器对象的这一切工作正常。但是,如何将文本从第一个结果的网页中截取并放入文本框中。我希望将第一个结果的标题放入名为txt_Title的文本框中。谢谢。

回答

0

您需要为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 

注:我没有运行这通过编译器或测试它,所以是准备好了一些问题,但我希望你明白这个主意。

+0

谢谢您的回复。我一直在努力研究如何使用处理程序以及在何处使用它。到目前为止,我已经在使用以下代码的模块中定义了事件:'Public Event DocumentCompleted As WebBrowserDocumentCompletedEventHandler' and using'Dim web_URL = web_Browser.Url AddHandler web_Browser,New WebBrowserDocumentCompletedEventHandler(AddressOf web_URL)''题。但是,它返回“'AddressOf'操作数必须是方法的名称(不带圆括号)”。我哪里错了? –

+0

我觉得应该是AddHandler的web_Browser.DocumentCompleted,AddressOf myDocumentCompletedMethod – GTG