Excel VBA 中的网站问题解析赔率

Parsing Odds From Website Problem in Excel VBA

我正在努力学习 VBA 来解析网站信息。目前我正在尝试从网站解析赔率,但显示错误,我不知道自己做错了什么。有人可以帮助我吗?

这是我的代码:

Public Sub GetOddsInfo()
    Dim IE As New InternetExplorer, URL As String
    Dim i As Long, ws As Worksheet
    Dim headers()
    Dim linkgame, linkbtts, linkover As String
    Dim teams, oddHome, oddDraw, oddAway, oddBtts, oddNbtts, oddOver, oddUnder As String
    Const MAX_WAIT_SEC As Long = 10
    URL = "https://www.oddsportal.com/soccer/germany/2-bundesliga/results/#/page/3/"
    Set ws = ThisWorkbook.Worksheets("Plan1")
    headers = Array("Teams", vbNullString, "Home Odds", "Draw Odds", "Away Odds", "BTTS", _
                    "NBTTS", "O2.5", "U2.5")

    With IE
        .Visible = True
        .Navigate2 URL

        While .Busy Or .ReadyState < 4: DoEvents: Wend

        For i = 0 To 1
        '.document.getElementsByClassName(" deactivate").Length -1
            .Navigate2 URL

            linkgame = .document.getElementsByClassName(" deactivate")(i).getElementsByClassName("name table-participant")(0).Children(0).href
            teams = .document.getElementsByClassName(" deactivate")(i).getElementsByClassName("name table-participant")(0).Children(0).innerText

            .Navigate2 linkgame

            oddHome = .document.getElementsByClassName("aver")(0).getElementsByClassName("right")(0).innerText
            oddDraw = .document.getElementsByClassName("aver")(0).getElementsByClassName("right")(1).innerText
            oddAway = .document.getElementsByClassName("aver")(0).getElementsByClassName("right")(2).innerText

            linkbtts = linkgame & "#bts;2"
            .Navigate2 linkbtts

            oddBtts = .document.getElementsByClassName("aver")(0).getElementsByClassName("right")(0).innerText
            oddNbtts = .document.getElementsByClassName("aver")(0).getElementsByClassName("right")(1).innerText

            linkover = linkgame & "#over-under;2;2.50;0"
            .Navigate2 linkover

            oddOver = .document.getElementsByClassName("aver")(0).getElementsByClassName("right")(1).innerText
            oddUnder = .document.getElementsByClassName("aver")(0).getElementsByClassName("right")(2).innerText

            ws.Range("A" & i + 2) = teams
            ws.Range("C" & i + 2) = oddHome
            ws.Range("D" & i + 2) = oddDraw
            ws.Range("E" & i + 2) = oddAway
            ws.Range("F" & i + 2) = oddBtts
            ws.Range("G" & i + 2) = oddNbtts
            ws.Range("H" & i + 2) = oddOver
            ws.Range("I" & i + 2) = oddUnder
        Next i
    End With
End Sub

.Navigate2 linkgame 中显示错误,我不明白为什么 linkgame 将成为游戏的 link。

尝试使用CreateObject("InternetExplorer.Application")方法创建IE对象,修改代码如下:

Public Sub GetOddsInfo()
    Dim IE As Object, URL As String
    Dim i As Long, ws As Worksheet
    Dim headers()
    Dim teams, oddHome, oddDraw, oddAway, oddBtts, oddNbtts, oddOver, oddUnder As String
    Const MAX_WAIT_SEC As Long = 10
    URL = "https://www.oddsportal.com/soccer/germany/2-bundesliga/results/#/page/3/"
    Set ws = ThisWorkbook.Worksheets("Plan1")
    headers = Array("Teams", vbNullString, "Home Odds", "Draw Odds", "Away Odds", "BTTS", _
                    "NBTTS", "O2.5", "U2.5")
    Set IE = CreateObject("InternetExplorer.Application")
    With IE
        .Visible = True
        .Navigate2 URL

        While .Busy Or .ReadyState < 4: DoEvents: Wend

        For i = 0 To 1

    Dim linkgame, linkbtts, linkover As String
        '.document.getElementsByClassName("deactivate").Length -1

            .Navigate2 URL
            While .Busy Or .ReadyState < 4: DoEvents: Wend

            linkgame = .document.getElementsByClassName("deactivate")(i).getElementsByClassName("name table-participant")(0).Children(0).href
            teams = .document.getElementsByClassName("deactivate")(i).getElementsByClassName("name table-participant")(0).Children(0).innerText

            .Navigate2 linkgame
            While .Busy Or .ReadyState < 4: DoEvents: Wend
            oddHome = .document.getElementsByClassName("aver")(0).getElementsByClassName("right")(0).innerText
            oddDraw = .document.getElementsByClassName("aver")(0).getElementsByClassName("right")(1).innerText
            oddAway = .document.getElementsByClassName("aver")(0).getElementsByClassName("right")(2).innerText

            linkbtts = linkgame & "#bts;2"

            .Navigate2 linkbtts
             While .Busy Or .ReadyState < 4: DoEvents: Wend 

            oddBtts = .document.getElementsByClassName("aver")(0).getElementsByClassName("right")(0).innerText
            oddNbtts = .document.getElementsByClassName("aver")(0).getElementsByClassName("right")(1).innerText

            linkover = linkgame & "#over-under;2;2.50;0"

            .Navigate2 linkover

             While .Busy Or .ReadyState < 4: DoEvents: Wend

            oddOver = .document.getElementsByClassName("aver")(0).getElementsByClassName("right")(1).innerText
            oddUnder = .document.getElementsByClassName("aver")(0).getElementsByClassName("right")(2).innerText

            ws.Range("A" & i + 2) = teams
            ws.Range("C" & i + 2) = oddHome
            ws.Range("D" & i + 2) = oddDraw
            ws.Range("E" & i + 2) = oddAway
            ws.Range("F" & i + 2) = oddBtts
            ws.Range("G" & i + 2) = oddNbtts
            ws.Range("H" & i + 2) = oddOver
            ws.Range("I" & i + 2) = oddUnder 
        Next i
    End With
End Sub

输出如下: