Selenium和VBA:从动态滚动表中获取25行以上

时间:2018-08-16 20:58:24

标签: vba selenium selenium-webdriver

我们用于跟踪字段日志的Web应用程序是B2W。字段日志在自动滚动div中的表格中列出。 我正在使用vba从该表获取字段日志信息以存储在Access中。但是它只会检索前25行。 我尝试使用

driver.ExecuteScript(window.ScrollTo())

但这对我不起作用。 如果滚动,它会告诉我找不到元素。 如果使用FireBug,则可以看到

之间的数据

<span>This would be a field log id number</span>

我假设它不存在,直到我滚动到它为止。我一直在谷歌搜索,但没有尝试过。 我当前的代码是:

Private selDriver as New Selenium.ChromeDriver

'I have also tried using FirefoxDriver (I am using Firefox 46.0.1)
'Same results

Public Sub AppendFieldLogs()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("tblFieldLogs")
Dim i As Integer
With rs
    Dim FLogs As Object, FLog As Object, FLogData As Object
    With selDriver
        .Get "http://tls-okc-b2w/B2W/FieldLogListing.aspx"
        .Wait 600
    End With
    selDriver.ExecuteScript ("window.scrollTo(0, document.body.scrollHeight);")
    For Each FLogs In selDriver.FindElementsByXPath("/html/body/div[1]/div/form/div[2]/div[3]/div/div/div/div/div[2]/div[2]/div[3]/div[1]/table/tbody")
        For i = 1 To FLogs.FindElementsByXPath(".//tr").Count
            If FLogs.FindElementByXPath(".//tr[" & i & "]").IsPresent Then
                Set FLog = FLogs.FindElementByXPath(".//tr[" & i & "]")
                If FLog.FindElementByXPath(".//td[2]").Text = "" Then
                    Exit For
                End If
                .AddNew
                !FieldLogID = FLog.FindElementByXPath(".//td[2]").Text
                !FieldLogDate = FLog.FindElementByXPath(".//td[3]").Text
                !FieldLogSupervisor = FLog.FindElementByXPath(".//td[4]").Text
                !FieldLogStatus = FLog.FindElementByXPath(".//td[6]").Text
                !FieldLogJob = FLog.FindElementByXPath(".//td[7]").Text
                .Update
                .Bookmark = .LastModified
            Else
                Exit For
            End If
        Next i
    Next FLogs
End With
Set rs = Nothing
Set db = Nothing
selDriver.Quit
DoCmd.OpenTable "tblFieldLogs"
End Sub

这适用于前25行。之后,它退出并且不给出任何错误。它只是不获取数据。

编辑:这是指向我的onedrive的链接,我在其中保存了一些页面的HTML和ASPX代码。 OneDrive

编辑:ALMOST自己解决了这个问题: 我找到了一种使用.scrollIntoView方法将其他行滚动到视图中的方法。 我正在使用if语句来检查column =“”的值,如果是,则使用

driver.findelementmethodofyourchoice.scrollIntoView

它在大多数情况下都有效!它只会捕获前200行,但是我可以在页面的源代码中看到只有前200行被加载到表中,但是随着滚动的增加,将加载更多的行。我只需要弄清楚如何获得更多的负载即可。

0 个答案:

没有答案