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

为何无人值守时Selenium会卡在空白页,手动查看后恢复正常?

解决服务器关闭界面后Selenium机器人停滞的问题

问题本质

服务器远程界面关闭后,浏览器驱动(这里是undetected-chromedriver)失去显示环境支撑,导致卡在页面加载步骤;重新打开界面后恢复显示上下文,驱动才继续运行。

针对性解决方案

Linux服务器

用xvfb虚拟显示工具模拟桌面环境,让浏览器无需真实界面也能正常工作:

  1. 安装依赖:
    • Debian/Ubuntu:sudo apt-get install xvfb pyvirtualdisplay
    • CentOS/RHEL:sudo yum install xorg-x11-server-Xvfb python3-pyvirtualdisplay
  2. 代码中集成虚拟显示:
    from pyvirtualdisplay import Display
    
    # 启动虚拟显示(分辨率按需调整)
    display = Display(visible=0, size=(1920, 1080))
    display.start()
    
    # 初始化driver的代码放在后面
    driver = uc.Chrome(options=chrome_options, driver_executable_path="chromedriver")
    driver.maximize_window()
    action = ActionChains(driver)
    
    driver.get("https://www.reddit.com/login")
    # 后续业务代码...
    
    # 程序结束后关闭虚拟显示
    display.stop()
    
  3. 也可以直接用命令行启动脚本:xvfb-run python your_bot.py

Windows服务器

  1. 避免直接关闭远程桌面窗口,改用「断开会话」选项,保持桌面会话激活;
  2. 通过任务计划程序运行脚本:设置任务为不管用户是否登录都要运行,并赋予最高权限;
  3. 配置Chrome无头模式(无需显示界面),在chrome_options中添加:
    chrome_options.add_argument("--headless=new")
    chrome_options.add_argument("--disable-gpu")
    chrome_options.add_argument("--no-sandbox")
    

通用代码优化

  • 替换固定time.sleep(3)为显式等待,避免无意义等待同时保证页面加载完成:
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    
    driver.get("https://www.reddit.com/login")
    # 等待登录页面核心元素加载(示例为用户名输入框,根据实际调整)
    WebDriverWait(driver, 15).until(EC.presence_of_element_located((By.ID, "loginUsername")))
    
  • 确保chromedriver版本与服务器上的Chrome版本完全一致,避免兼容性卡顿;
  • 添加超时限制,防止无限停滞:
    driver.set_page_load_timeout(30)  # 页面加载超时30秒
    driver.set_script_timeout(30)     # 脚本执行超时30秒
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 20:24:54