无法滚动网页的分屏

SIM*_*SIM 8 vba scroll excel-vba web-scraping internet-explorer-11

我在vba中编写了一个脚本来从网页中删除一些项目.默认情况下,打开该页面时可以看到4/5项.但是,当网页向下滚动时,网页会显示其余的项目.如果不是分屏,我可以用它来处理它.parentWindow.scrollBy.由于我不知道如何滚动任何网页的部分屏幕,我会陷入困境.任何有关这方面的帮助将受到高度赞赏.

链接到网页:Page_Link

这是我到目前为止所写的:

Sub Get_Result()
    Const URL As String = "replace with above link"
    Dim IE As New InternetExplorer, html As HTMLDocument
    Dim storage As Object, posts As Object, post As Object

    With IE
        .Visible = True
        .navigate URL
        Do Until .readyState = READYSTATE_COMPLETE: Loop
        Set html = .document
    End With

    For i = 1 To 5
        Set storage = html.getElementsByClassName("sc-jqCOkK gkztbk")
        html.parentWindow.scrollBy 0, 100
        'SendKeys "{end}"
        Application.Wait Now + TimeValue("00:00:003")
    Next i

    For Each posts In storage
            row = row + 1: Cells(row + 1, 1) = posts.querySelector("[id='app.components.HouseCard.rentLine']").innerText
    Next posts
    IE.Quit
End Sub
Run Code Online (Sandbox Code Playgroud)

顺便说一句,这就是分割窗口的样子: 在此输入图像描述

发布脚本:我只是在关于滚动分割屏幕的任何解决方案之后,如上面所见.

dee*_*dee 5

对于左边窗口的滚动使用div与类名sc-iqzUVk gZZIKO,并设置scrollTop的一些值,例如使用scrollHeight滚动至底部这样leftWindowDiv.scrollTop = leftWindowDiv.scrollHeight.

完整的例子:

Dim leftWindowColl As IHTMLElementCollection
Set leftWindowColl = html.getElementsByClassName("sc-iqzUVk gZZIKO")

If leftWindowColl.Length > 0 Then
    Dim leftWindowDiv As HTMLDivElement
    Set leftWindowDiv = leftWindowColl.Item(0)
    leftWindowDiv.scrollTop = leftWindowDiv.scrollHeight
End If
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

因为似乎生成了类名(sc-iqzUVk gZZIKO类似于生成的名称),所以很难div根据类名找到合适的名称,因为生成的名称会发生​​变化.这可能是您在评论中写下时无法执行滚动的原因.这可以通过使用querySelector@Florent B已经建议的方法来解决.有关选择器的更多信息.

此选择器选择具有id的元素内的所有div,app其样式属性以scroll;.结尾.

Dim selector As String
selector = "#app div[style$='scroll;']" 

Dim leftWindowDiv As HTMLDivElement
Set leftWindowDiv = html.querySelector(selector)
leftWindowDiv.scrollTop = leftWindowDiv.scrollHeight
Run Code Online (Sandbox Code Playgroud)