Member 12592475 Ответов: 1

Vb 2010 / VS 2012| - Как получить внутренний текст из идентификатора элемента сайта?


Я пытаюсь получить текст из элемента на веб-сайте

Код Элемента Веб-Сайтов:

<div class="info-box">
<span class="info-box-icon bg-yellow">

</span>
<div class="info-box-content">
<span class="info-box-text">TOTAL MEMBERS</span>
<span class="info-box-number">34,396</span>
</div>
</div>


Я пытаюсь получить 34 396 из номера информационного ящика.

Есть 4 таких ящика, из которых мне нужно их достать. Все они одинаковы, за исключением того, что Инфо-бокс-текст и инфо-бокс-номер различны.

Что я уже пробовал:

Я попытался использовать GetAttribute, но все время получал ошибку.

 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
   Textbox1.Text = WebBrowser1.Document.GetElementsByTagName("info-text-box").GetAttribute("info-text-number").ToString()
End Sub


После того, как я получу номер, я хочу, чтобы он попал в текстовое поле.

-ОБНОВЛЕНИЕ-
Попытка
TextBox1.Text = WebBrowser1.Document.GetElementById("info-box-number").InnerText 


Ошибка, которую я получил:
Необработанное исключение типа "System.NullReferenceException" произошло в MyTool.exe

Дополнительная информация: ссылка на объект не установлена на экземпляр объекта.

[no name]

Похоже, что документ еще не был загружен в то время, когда вы пытались обработать элементы. Сначала убедитесь, что документ загружен, попробуйте на MessageBox отобразить все содержимое документа в событии Load (). Если вы получаете там ошибку, вы знаете, что она не была готова.Я полагаю, что есть также событие, которое уведомляет, когда веб-браузер загрузил документ, но я не уверен.

Member 12592475

Я попытался это сделать и заставил его подождать 5 секунд, а затем получил эту ошибку

Необработанное исключение типа ' System.Отражение.TargetInvocationException ' произошло в mscorlib.dll

Дополнительная информация: исключение было вызвано целью вызова.

1 Ответов

Рейтинг:
12

User 11061201

Используйте

Event DocumentCompleted()
веб-браузера, а не события Form Load ().

Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
        
  TextBox1.Text = WebBrowser1.Document.GetElementById("infobox-number").InnerText
  MsgBox("DOCUMENT_COMPLETED")
End Sub


.. но я заметил, что событие DocumentCompleted() возникало десятки раз, в том числе и при прокрутке вверх и вниз.
Здесь я привожу некоторый код, который я использовал много лет назад в своем проекте. Он не использует веб-браузер, вместо этого он загружает данные напрямую. Попробуйте настроить его под свои нужды.

Private Function GetInfo() As String
dim body as string = ""
        Try 
            Dim ur As New Uri("http://www.find-ip-address.org/")
            Dim req As HttpWebRequest = CType(HttpWebRequest.Create(ur), HttpWebRequest)
            Dim res As HttpWebResponse = CType(req.GetResponse(), HttpWebResponse)
            If (res.StatusCode = HttpStatusCode.OK) Then
                Dim receiveStream As Stream = res.GetResponseStream()
                Dim readStream As StreamReader = Nothing
                If (res.CharacterSet = Nothing) Then
                    readStream = New StreamReader(receiveStream)
                Else
                    readStream = New StreamReader(receiveStream, Encoding.GetEncoding(res.CharacterSet))
                    Dim data As String = readStream.ReadToEnd()
                    'data contains all HTML text
'################################
                    res.Close()
                    readStream.Close()

                    Dim left = "My IP Country Name:"
                    Dim right = "IP Address Lookup Location"
                    Dim indexLeft As Integer = data.IndexOf(left)
                    Dim indexRight As Integer = data.IndexOf(right)
                    body = data.Substring(indexLeft + left.Length, indexRight - indexLeft - left.Length)
                End If
            End If
        End Try
            Return body
End Function


Vijay Manglani

что такое "тело"в последней строке перед концом If?