网页导航 点击进入下一页
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
我通常使用它来点击网站上的下一页,效果很好。但是这次我很难解决它,因为它是 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