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

Selenium调用.get(url)卡顿问题:复用Driver爬取带登录网站异常

解决复用Selenium Driver时.get(url)卡顿的问题

这种情况我之前爬带登录验证的站点时也碰到过!大概率是复用Driver过程中,浏览器的会话残留、页面阻塞或者反爬机制触发导致的,给你几个实用的排查和解决方向:

  • 重置页面上下文再请求
    复用Driver时,前一个页面可能残留未加载完成的请求、JS线程阻塞或隐藏弹窗,导致新URL请求被卡住。你可以在每次调用.get(url)前先跳转到空白页,清空当前页面的上下文:

    driver.get("about:blank")
    # 稍作延迟再请求目标URL
    time.sleep(0.5)
    driver.get(target_url)
    

    也可以用JS强制停止前页面的加载:

    driver.execute_script("window.stop();")
    
  • 调整页面加载策略
    Selenium默认的normal加载策略会等待页面所有资源(包括广告、统计脚本这类第三方资源)完全加载,很容易因资源超时导致卡顿。初始化Driver时可以设置更宽松的加载策略:

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    
    options = Options()
    # eager:等待DOM加载完成就返回,无需等所有资源
    # none:直接返回,不等待任何加载
    options.page_load_strategy = 'eager'
    driver = webdriver.Chrome(options=options)
    
  • 处理未捕获的弹窗/Alert
    复用Driver过程中,之前的页面可能弹出了未处理的确认框、Alert,会阻塞后续的页面请求。可以在每次请求前主动检查并处理:

    from selenium.common.exceptions import NoAlertPresentException
    
    try:
        driver.switch_to.alert.accept()
    except NoAlertPresentException:
        pass
    
  • 平衡复用与重启频率
    虽然复用Driver能节省登录成本,但长时间复用会导致浏览器内存占用过高、会话状态异常。可以设置一个请求次数阈值,比如每爬取20个页面就重启一次Driver,兼顾效率和稳定性。

  • 模拟人类操作避免反爬
    部分站点会检测会话的“活跃度”,复用Driver时连续机械请求会触发反爬,导致页面加载卡住。可以在请求间隔加入随机延迟,或者偶尔模拟滚动、点击页面元素等人类操作。

你可以先从调整页面加载策略和重置页面上下文这两个方向入手试试,大部分这类问题都能解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 06:54:16