关闭远程桌面连接后AWS服务器上的Selenium脚本运行失败
问题原因
关闭AWS EC2 Windows实例的远程桌面连接后,Windows会将当前交互式会话切换为非交互式会话,桌面UI环境随即暂停,Selenium驱动的浏览器(即使启用无头模式)可能无法正常加载或渲染页面元素,最终导致元素识别失败。Vultr的Windows实例默认保留了交互式会话的后台运行支持,因此未出现该问题。
解决方案
1. 启用浏览器无头模式
确保脚本使用浏览器的无头模式运行,摆脱对交互式桌面会话的依赖。以Chrome为例:
from selenium import webdriver from selenium.webdriver.chrome.options import Options chrome_options = Options() chrome_options.add_argument("--headless=new") # Chrome 112+版本的新无头模式,渲染逻辑更接近正常浏览器 chrome_options.add_argument("--disable-gpu") chrome_options.add_argument("--no-sandbox") chrome_options.add_argument("--window-size=1920,1080") # 固定窗口尺寸,避免元素布局异常 driver = webdriver.Chrome(options=chrome_options) # 后续脚本逻辑
2. 配置Windows保留交互式会话
通过本地组策略修改会话行为,让RDP断开后仍保持会话活跃:
- 打开
gpedit.msc(本地组策略编辑器) - 导航至计算机配置 > 管理模板 > Windows组件 > 远程桌面服务 > 远程桌面会话主机 > 会话时间限制
- 禁用「设置断开连接的会话的时间限制」和「设置活动但空闲的远程桌面服务会话的时间限制」
- 切换至会话状态选项,设置「当会话断开连接时」为保持会话处于活动状态
3. 用Windows任务计划程序启动脚本
将脚本配置为系统任务,以独立于用户会话的方式运行:
- 打开「任务计划程序」,创建新任务
- 「常规」选项卡:勾选「不管用户是否登录都要运行」和「使用最高权限运行」
- 「触发器」选项卡:设置脚本启动条件(比如立即启动或定时触发)
- 「操作」选项卡:选择「启动程序」,程序路径填Python解释器路径(如
C:\Python311\python.exe),参数填脚本的完整路径(如"C:\scripts\your_selenium_script.py") - 「设置」选项卡:勾选「如果任务失败,重新启动」,设置合理的重试间隔
4. 检查EC2实例配置
确认EC2实例未启用「停止时终止」等影响会话的设置,重启实例后再应用上述配置,避免残留会话问题。
验证方式
配置完成后启动脚本,断开RDP连接,通过脚本日志(建议用logging模块记录运行状态)确认元素识别是否正常。
内容的提问来源于stack exchange,提问作者S J.
相关产品推荐
相关产品推荐

