如何使用Selenium遍历Indeed招聘搜索结果的所有分页
问题修复与代码优化方案
分页循环问题根因与解决
你排查的定位优先级问题是直接原因,还有一个隐藏的逻辑错误:你在首次进入搜索结果页时就获取了分页栏的li元素列表作为循环次数依据,翻页后DOM刷新,这个提前获取的列表已经失效,会直接导致循环次数异常。
修复方案:
- 修正下一页按钮定位逻辑:不要直接用
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()
- 把分页循环从固定次数的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
相关产品推荐
相关产品推荐

