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

Synology NAS Docker环境下Selenium driver.get抛出java.util.concurrent.TimeoutException问题求助

解决Selenium Docker容器中的TimeoutException问题

针对你在Synology NAS上运行的Kenbot股票机器人遇到的TimeoutException(Unable to execute request for an existing session: java.util.concurrent.TimeoutException),我整理了几个针对性的解决方案,建议按优先级尝试:

1. 调整Docker容器的资源分配

Synology NAS默认给容器的资源配额往往不足以支撑Chrome浏览器的运行,这是这类超时问题的常见原因:

  • 打开Synology DSM的Docker套件,找到你的selenium/standalone-chrome容器
  • 进入设置 > 资源限制,至少分配2核CPU和2GB内存(如果NAS资源充足,可适当调高)
  • 重启容器后重新测试driver.get方法

2. 同步更新Selenium镜像与Python包版本

你当前使用的selenium/standalone-chrome:latest镜像搭配的是Selenium 4.0.0版本,这个旧版本存在不少兼容性问题:

  • 拉取最新稳定版的Selenium镜像(可到Docker Hub确认当前最新版标签):
    docker pull selenium/standalone-chrome:4.15.0
    
  • 同时升级Python环境中的selenium包:
    pip install --upgrade selenium
    
  • 重新部署容器,确保镜像与Python包版本匹配

3. 在代码中添加超时控制与显式等待

针对页面加载慢或网络波动,通过代码优化避免超时:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException

# 初始化driver后设置页面加载超时
driver.set_page_load_timeout(60)  # 延长至60秒

try:
    driver.get("https://trade.STOCKBROKING.com.my/STOCKBROKING/research/researchvalidate.aspx?StkCode")
    # 等待页面核心元素加载完成,确认页面已就绪
    WebDriverWait(driver, 30).until(
        EC.presence_of_element_located((By.TAG_NAME, "body"))
    )
except TimeoutException:
    # 超时后尝试刷新页面或重新初始化driver
    driver.refresh()

4. 检查NAS的网络连通性

确保NAS能稳定访问目标交易网站:

  • 在NAS的控制面板 > 网络中确认网络连接正常
  • 进入Docker容器内部测试网络:
    docker exec -it <容器ID> ping trade.STOCKBROKING.com.my
    docker exec -it <容器ID> curl -I https://trade.STOCKBROKING.com.my/STOCKBROKING/research/researchvalidate.aspx?StkCode
    

如果网络不通,检查NAS的防火墙规则或DNS配置

5. 优化Chrome启动参数

为无头模式下的Chrome添加适配服务器环境的启动参数,减少资源占用并提升稳定性:

from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument("--headless=new")  # 新版无头模式,兼容性更好
chrome_options.add_argument("--disable-gpu")
chrome_options.add_argument("--no-sandbox")  # 解决NAS环境下的权限问题
chrome_options.add_argument("--disable-dev-shm-usage")  # 避免共享内存不足
chrome_options.add_argument("--window-size=1920,1080")

driver = webdriver.Remote(
    command_executor='http://<容器IP>:4444/wd/hub',
    options=chrome_options
)

以上方案覆盖了资源、版本、代码、网络等核心维度,多数情况下调整资源分配或同步版本就能解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 23:48:13