2017-07-27 65 views
0

我有下面的代码,将通过数据拉从表中的网站(价格,名称,货币,改变等)代码不拉第一个网页后的数据导入Excel

Public Sub GetTeamData() 
Dim strWebAddress As String 
Dim strH2AnchorContent As String 
Dim IEDocument As MSHTML.HTMLDocument 
Dim objH2 As MSHTML.HTMLHeaderElement 
Dim obTable As MSHTML.HTMLTable 
Dim objRow As MSHTML.HTMLTableRow 
Dim objCell As MSHTML.HTMLTableCell 
Dim lngRow As Long 
Dim lngColumn As Long 

' initialize some variables that should probably better be passed as paramaters or defined as constants 
strWebAddress = "https://toolkit.financialexpress.net/santanderam" 

dateNow = Now 
bExitLoop = False 
lngTimeoutInSeconds = 5 
Do While Not bExitLoop 
    If Now > DateAdd("s", lngTimeoutInSeconds, dateNow) Then Exit Do 
Loop 

' open page 
Set IEDocument = GetIEDocument(strWebAddress) 
If IEDocument Is Nothing Then 
    MsgBox "Timeout reached opening this address:" & vbNewLine & strWebAddress, vbCritical 
    Exit Sub 
End If 

    Dim ButtonData As Variant 
    Set ButtonData = IEDocument.getElementsByClassName("paginator fe-paging-navContainer") 

Dim button As MSHTML.HTMLLinkElement 
For Each button In ButtonData 

    Debug.Print button.nodeName 

     button.Click 

      ' retrieve anchor element 
      Set oTable = IEDocument.getElementById("Price_1_1") 
      Debug.Print oTable.innerText 

       ' iterate over the table and output its contents 
       lngRow = 1 
       For Each objRow In oTable.Rows 
       lngColumn = 1 
       For Each objCell In objRow.Cells 
        Cells(lngRow, lngColumn) = objCell.innerText 
        lngColumn = lngColumn + 1 
       Next objCell 
       lngRow = lngRow + 1 
      Next 
     Next button 
End Sub 

的第一页上的我问题在于我无法从下一页获取数据(1..7)。

任何人都可以请帮忙,为什么上面不会从下一页拉数据? 谢谢!

+0

他们是否已知其他页面的URL?您可以始终为每个URL运行子例程,只要它们不是动态命名的。 – Cyril

+0

不幸的是他们都有相同的URL :( – smccull

+0

我的其他建议是检查页面1到7中每个选项卡的DOM(HTML)表达式。在DOM浏览器中必须有一些分隔符(通过IE ),让他们在不同的页面上,你只需要完全检查这些分隔符的元素。 – Cyril

回答

0

在打开页面的代码位后,用下面的代码替换剩下的代码。您可能需要稍微调整一下,但它应该经过所有可用页面:

' Set the object for 'Next' button 
Dim oNext As Variant 
Set oNext = IEDocument.getElementsByClassName("ui-paging-button ui-state-default ui-corner-all ui-paging-next") 

' Loop to go through all pages 
Dim bExitMLoop As Boolean: bExitMLoop = False 
lngRow = 1 
Do While Not bExitMLoop 

    ' Get data from current page 
    Set oTable = IEDocument.getElementById("Price_1_1") 
    For Each objRow In oTable.Rows 
     lngColumn = 1 
     For Each objCell In objRow.Cells 
      Cells(lngRow, lngColumn) = objCell.innerText 
      lngColumn = lngColumn + 1 
     Next objCell 
     lngRow = lngRow + 1 
    Next 

    ' Check if Next button is available 
    If oNext.Length = 0 Then 
     bExitMLoop = True 
    Else 
     oNext.Item(0).Click 

     ' Wait for page to refresh (could check the ready state here as well) 
     dateNow = Now 
     bExitLoop = False 
     lngTimeoutInSeconds = 3 
     Do While Not bExitLoop 
      If Now > DateAdd("s", lngTimeoutInSeconds, dateNow) Then Exit Do 
     Loop 

     ' Reset 'Next' button object 
     Set oNext = Nothing 
     Set oNext = IEDocument.getElementsByClassName("ui-paging-button ui-state-default ui-corner-all ui-paging-next") 
    End If 

Loop 
+0

谢谢!!当我运行这个时我得到一个对象所需的错误 - 我可能错过了一些非常明显的东西,但不知道为什么会这样是的? – smccull

+0

你在哪一行得到这个错误? – Zac

+0

我想我已经发现它了。在你的代码中,你的表在'FOR'循环中被设置,所以当你删除代码时,表不再被设置。在'FOR'循环之前的'Do'循环中的表格 – Zac