Indeed英国站网页爬取分页导航异常:循环跳转1-2页问题求助
解决Indeed英国站爬取的分页循环问题
我仔细看了你遇到的分页循环问题,还有你提供的Indeed英国站的分页HTML结构,问题出在你之前定位分页按钮的方式上——原来的代码直接点击了np类的span元素,但实际上触发页面跳转的是它的父级<a>标签,而且Indeed的分页结构更新后,直接用getElementsByClassName("np")已经不能准确触发跳转逻辑了。
问题根源
从你给出的HTML可以看到,"Next"按钮的跳转逻辑绑定在<a aria-label="Next">这个标签上,而你之前点击的是里面的<span class="np">元素,这个元素本身没有绑定跳转的事件处理函数,所以虽然看起来点击了,但实际上没有触发正确的页面跳转,导致程序在第1、2页之间循环。
修正后的代码
你可以通过定位带有aria-label="Next"属性的<a>标签来准确获取下一页按钮,这个属性是分页按钮的稳定标识,不容易因为页面样式更新而失效。下面是修正后的VBA代码:
Do If pageNumber >= 6 Then Exit Do On Error Resume Next ' 定位带有aria-label="Next"的a标签,这是真正触发跳转的元素 Set nextPageElement = HTML.querySelector("a[aria-label='Next']") On Error GoTo 0 ' 恢复错误处理 If nextPageElement Is Nothing Then MsgBox "找不到下一页按钮,退出循环" Exit Do End If ' 等待页面就绪,增加等待时间确保元素加载完成 Application.Wait (Now + TimeValue("0:00:05")) nextPageElement.Click ' 点击a标签,触发正确的跳转 ' 等待新页面加载完成,加入DoEvents避免Excel假死 Do While objIE.Busy = True Or objIE.readyState <> 4 DoEvents Loop ' 更新页码计数 pageNumber = pageNumber + 1 Loop
额外优化建议
- 不要一直依赖
On Error Resume Next,定位元素后恢复正常错误处理,方便排查其他问题 - 可以考虑直接构造分页URL的方式(比如
start=10对应第2页,start=20对应第3页),这种方式比模拟点击更稳定,完全避免DOM结构变化带来的问题:objIE.Navigate "https://uk.indeed.com/jobs?q=manager&l=london&start=" & (pageNumber * 10)
内容的提问来源于stack exchange,提问作者Sharid
相关产品推荐
相关产品推荐

