2015-12-27 5 views
0

Я пытаюсь прочитать все URL-адреса из html-документа.JSObject to JSArray

Я использую следующий код:

Dim html As String = 
            "var linksArray = new Array(); " & 
            "for (var i = 0; i < document.links.length; i++) {" & 
            "linksArray[i] = [String(document.links[i].innerHTML), String(document.links[i].innerText), String(document.links[i].href)];" & 
            "} " & 
            "return linksArray;" 

    Try 
     Dim linksArray As JSObject = _Browser.WebView.EvalScript(String.Format("(function(){{ {0} }})()", html)) 

     If linksArray Is Nothing Then 
      Stop 'this line is not reached, so it should be fine so far 
     End If 

     'the following line throws an error 
     Dim urls As JSArray = linksArray.ToArray() 

     For Each link As JSObject In urls 
      Dim sInnerHTML As String = link(0).ToString().Trim() 
      Dim sInnerText As String = link(1).ToString().Trim() 
      Dim sHRef As String = link(2).ToString().Trim() 

      If sHRef <> "undefined" Then 

       Dim nItem As New clsURL 
       nItem.HRef = sHRef 
       nItem.InnerHTML = sInnerHTML 
       nItem.InnerText = sInnerText 

       nList.Add(nItem) 
      End If 

     Next 
    Catch ex As Exception 
     Debug.Print(ex.Message.ToString) 
     Stop 
    End Try 

Однако линия

Dim urls As JSArray = linksArray.ToArray() 

бросает ошибку «Ссылка на объект не указывает на экземпляр объекта».

Кто-нибудь знает, как это сделать правильно?

Спасибо!

enter image description here

enter image description here

+0

Что вы видите, когда вы Monitor "linksArray"? – etalon11

+0

@ etalon11 Я добавил скриншот к моему сообщению. – AntonioC

+0

Можете ли вы, пожалуйста, отслеживать один элемент? Также «urls» не объявляется как массив. Вы не можете преобразовать обычный массив в JSArray или? – etalon11

ответ

0

Понял:

 Dim linksArray As JSArray = _Browser.WebView.EvalScript(String.Format("(function(){{ {0} }})()", html)) 

     For Each obj As Object In linksArray 

      Dim sInnerHTML As String = obj(0).ToString().Trim() 
      Dim sInnerText As String = obj(1).ToString().Trim() 
      Dim sHRef As String = obj(2).ToString().Trim() 

     Next