网页导航 点击进入下一页

Web page Navigation Click to NEXT Page

我通常使用它来点击网站上的下一页,效果很好。但是这次我很难解决它,因为它是 ul Class,然后是 li class。我尝试了几种变体,从 .getAttribute.getElementsByTagName,但是我无法解决'

我试过添加儿童点头,所以它选择了正确的 li,但似乎没有任何效果,我被卡住了。

有人可以看一下吗,总是提前谢谢

这是HTML

点击下一页的代码

Searches Number of Pages entered in Sheet20 
    If pageNumber >= Replace(Worksheets("Sheet20").Range("J9").Value, "", "+") Then Exit Do
        On Error Resume Next
        Set nextPageElement = Html.getElementsByClassName("a-pagination")(0) '''' THIS LINE ''''''
    If nextPageElement Is Nothing Then Exit Do
        nextPageElement.Click 'next web page 
    Do While objIE.Busy = True Or objIE.readyState <> 4
    Loop
        Set Html = objIE.document
        pageNumber = pageNumber + 1
'DoEvents

以下任一解决方案都应该有效:

Sub InitiateClick()
    Dim IE As New InternetExplorer
    Dim nextPage As Object
   
    With IE
        .Visible = True
        .navigate "https://www.amazon.com/s?k=phones&page=2&qid=1612460431&ref=sr_pg_1"
        Do While .Busy = True Or .readyState <> 4: DoEvents: Loop
        'if it still fails to click on that buttton, make sure to put some delay in this line
'        Set nextPage = .document.getElementsByClassName("a-pagination")(0).getElementsByClassName("a-last")(0).getElementsByTagName("a")(0)
        Set nextPage = .document.querySelector(".a-pagination > li.a-last > a")
        If Not nextPage Is Nothing Then
            nextPage.Click
        End If
    End With
End Sub

有一种开销较小的替代方法。只需确定从第一页开始的页数。然后,判断是否小于请求的页面数,循环到较小的那个数。在循环期间,只需将当前页码连接到 url 作为 page 参数;不需要 ref 参数。 url 是一个查询字符串。

这意味着更少的对象变量设置和更短更健壮和更快的css路径。

我认为这符合您循环指定页数的要求。

Dim requestedNumber As Long, numPages As Long, pageNumber As Long

numPages = ie.document.querySelector(".a-disabled[aria-disabled]").innerText
requestedNumber = Replace$(ThisWorkbook.Worksheets("Sheet20").Range("J9").Value, "", "+") 
requestedNumber = IIf(numPages < requestedNumber, numPages, requestedNumber) ' so cannot loop more than available page count

' you are already on page1 so next page will be 2
For pageNumber = 2 To requestedNumber
    ie.Navigate2 "https://www.amazon.com/s?k=phones&qid=1612497504&page=" & pageNumber 'ref param not needed for page navigation
    While ie.Busy Or ie.ReadyState <> 4: DoEvents:Wend
    'do something with new page
Next