2013-12-12 134 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