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

如何在Python Selenium中不使用current_url实现多页导航循环?

解决方案:避免driver.current_url问题,实现多页导航

问题根源

  1. driver.get() 无返回值,url_test = driver.get(...)属于冗余代码,完全没用。
  2. 依赖driver.current_url拼接分页参数易出问题:页面未完全加载时获取URL会拿到错误值;若原URL已有查询参数,直接加?page={}会导致参数格式错误(比如变成xxx?a=1?page=2)。
  3. 跳转分页后未等待页面加载完成就获取元素,容易触发找不到元素的错误。

修复后的代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.service import Service
from time import sleep

# 初始化驱动
driver_service = Service(executable_path=r"C:\Program Files (x86)\chromedriver.exe")
driver = webdriver.Chrome(service=driver_service)
driver.maximize_window()
wait = WebDriverWait(driver, 10)  # 延长等待时间适配页面加载速度

# 手动定义分页模板,彻底规避current_url的不确定性
base_url = "https://www.seek.com.au/data-jobs-in-information-communication-technology/in-All-Perth-WA?page={}"

# 遍历第1到第4页(range(1,5)对应1、2、3、4页)
for page in range(1, 5):
    # 加载当前分页
    driver.get(base_url.format(page))
    # 等待页面核心元素加载完成,确保页面就绪
    wait.until(EC.presence_of_element_located((By.XPATH, "//a[@data-automation='jobTitle']")))
    
    # 获取当前页所有job链接
    link_job = [x.get_attribute('href') for x in driver.find_elements(By.XPATH, "//a[@data-automation='jobTitle']")]
    
    # 遍历每个job链接
    for job in link_job:
        driver.get(job)
        try:
            # 等待申请按钮可点击
            quick_apply = wait.until(EC.element_to_be_clickable((By.XPATH, "//a[@data-automation='job-detail-apply' and @target='_self']")))
            quick_apply.click()
        except Exception as e:
            print(f"无法找到或点击申请按钮: {job}")
            # 可选:打印具体错误信息便于调试
            # print(f"错误详情: {str(e)}")
        finally:
            sleep(2)  # 留短暂时间处理页面跳转,可根据实际情况调整

driver.quit()  # 程序结束后释放驱动资源

关键修改点

  • 移除driver.current_url依赖:手动构造分页URL模板,彻底避免页面加载状态带来的不确定性。
  • 强化页面等待逻辑:每次加载分页后,等待job标题元素出现,确保页面完全就绪再获取数据。
  • 修正循环范围:原range(2,5)会跳过第一页,改成range(1,5)覆盖前4页。
  • 优化异常处理:捕获具体异常并输出清晰提示,用finally确保sleep执行,避免逻辑混乱。
  • 添加驱动关闭:程序结束后调用driver.quit()释放系统资源。

额外建议

  • 尽量用Selenium的显式等待(WebDriverWait)替代sleep(),让代码更稳定、执行效率更高。
  • 若网站有反爬机制,可添加随机等待时间、自定义User-Agent等策略,避免被限制访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 19:01:15