You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 16:43:09