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

如何使用Selenium遍历Indeed招聘搜索结果的所有分页

问题修复与代码优化方案

分页循环问题根因与解决

你排查的定位优先级问题是直接原因,还有一个隐藏的逻辑错误:你在首次进入搜索结果页时就获取了分页栏的li元素列表作为循环次数依据,翻页后DOM刷新,这个提前获取的列表已经失效,会直接导致循环次数异常。
修复方案:

  1. 修正下一页按钮定位逻辑:不要直接用find_element_by_class_name取第一个匹配元素,而是取所有匹配np类的元素的最后一个(Indeed的下一页按钮固定在分页栏最右侧),或者用xpath匹配按钮文本/属性:
# 方案1:取最后一个np类元素
next_btn = driver.find_elements(By.CLASS_NAME, "np")[-1]
# 方案2:用属性匹配更稳定
next_btn = driver.find_element(By.XPATH, "//a[contains(@aria-label, '下一页') or contains(@aria-label, 'Next')]")
next_btn.click()
  1. 把分页循环从固定次数的for循环改为while循环,直到下一页按钮不存在时停止:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

max_pages = 10 # 可以加个最大页码限制防止死循环
current_page = 1
while current_page <= max_pages:
    # 原有处理当前页岗位数据的逻辑
    # ...
    # 判断是否还有下一页
    next_btns = driver.find_elements(By.XPATH, "//a[contains(@aria-label, '下一页') or contains(@aria-label, 'Next')]")
    if not next_btns:
        break
    next_btns[0].click()
    current_page +=1
    # 加显式等待确保页面加载完成
    WebDriverWait(driver, 10).until(EC.staleness_of(next_btns[0]))

不良编码实践优化点

  • 硬编码ChromeDriver路径:建议使用webdriver-manager库自动管理对应版本的浏览器驱动,无需手动下载配置路径
  • 强制sleep等待:替换为Selenium显式等待WebDriverWait,既可以缩短等待时间,也能避免页面加载慢导致的元素不存在异常
  • 路径字符串未转义:PATH = "C:\Program Files (x86)\chromedriver.exe"中的反斜杠会被识别为转义字符,应该改为原始字符串r"C:\Program Files (x86)\chromedriver.exe"
  • 使用已废弃的定位API:find_element_by_*系列方法在Selenium 4+版本中已被移除,建议统一使用find_element(By.属性名, 值)的写法
  • 异常捕获不规范:仅捕获ValueError覆盖范围太窄,Selenium运行时的超时、元素不可点击等异常都无法捕获,且捕获后仅打印异常类不会输出具体错误信息
  • 字符串操作不符合Python规范:调用魔法方法__contains__判断包含关系,应该直接用in关键字,例如if "\n" in word
  • 变量命名不符合PEP8规范:驼峰命名的函数/变量应该改为下划线分隔,例如removeSpaces改为remove_spaces,numPages改为num_pages
  • 全局driver变量:避免使用全局driver实例,建议封装到类中或者作为参数传递,降低代码耦合度

内容的提问来源于stack exchange,提问作者LerLow

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 02:27:03