Search code examples
vb.netjsobject

JSObject to JSArray


I'm trying to read all URLs from a html document.

I am using the following code:

    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

However, the line

 Dim urls As JSArray = linksArray.ToArray()

throws the error "The object reference was not set to an object instance".

Does anybody know how to do it correctly?

Thank you!

enter image description here

enter image description here


Solution

  • Got it:

            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