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

Selenium如何避免网站会话超时?现有方案失效求解决

解决网页会话超时的可行方案

你的当前方案单纯依赖time.sleep后刷新页面,无法模拟真实用户行为,很多网站会基于无交互时长触发超时,所以这种方式无效。以下是更有效的替代方案:

1. 模拟真实用户交互操作

网站的超时机制通常是检测用户是否有持续操作,每隔一段时间执行简单的交互(滚动、点击、输入),让网站认为用户处于活跃状态:

import time
from selenium.webdriver.common.by import By

def keep_alive(self, interval_minutes):
    while True:
        # 模拟页面滚动
        self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
        time.sleep(1)
        self.driver.execute_script("window.scrollTo(0, 0);")
        # 点击页面空白区域(避免触发功能按钮)
        try:
            self.driver.find_element(By.TAG_NAME, "body").click()
        except Exception:
            pass
        # 间隔指定分钟执行一次
        time.sleep(60 * interval_minutes)

2. 改用定时任务线程,不阻塞主流程

如果你的脚本还有其他任务要执行,不要用time.sleep阻塞主线程,用定时任务线程来单独处理保活操作:

import schedule
import threading
import time

def session_keep_alive(self):
    # 执行轻量交互
    self.driver.execute_script("window.scrollBy(0, 50);")

def start_keep_alive(self, interval_minutes):
    # 每隔指定分钟执行一次保活
    schedule.every(interval_minutes).minutes.do(session_keep_alive, self)
    # 启动后台线程运行定时任务
    def run_scheduler():
        while True:
            schedule.run_pending()
            time.sleep(1)
    t = threading.Thread(target=run_scheduler)
    t.daemon = True
    t.start()

3. 排查网站超时触发逻辑

  • 先确认网站是无操作超时还是固定会话时长超时:
    • 无操作超时:用上述交互方案即可解决;
    • 固定会话时长超时:需要在会话到期前自动执行重新登录流程,保存登录后的session信息(如cookie)。

4. 避免盲目刷新页面

你的原方案中refresh()可能会导致会话重置,尤其是部分网站刷新后需要重新验证身份,反而加速超时。优先用交互替代刷新。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 17:33:15