Python Playwright自动化在VDS连接关闭时停止的解决求助(无法使用无头模式)
解决方案:让Playwright脚本独立于VDS连接持续运行
你的问题核心是:断开VDS远程连接(SSH/RDP)时,当前会话的图形上下文会被终止,而依赖可视化界面的Playwright浏览器会随之停止运行。以下是针对不同系统的具体解决方案:
Linux VDS环境
方案1:用tmux创建持久图形会话
适合临时或轻量运行场景:
- 先安装依赖工具:
sudo apt update && sudo apt install tmux xorg xinit - 新建一个tmux会话:
tmux new-session -s playwright_gui - 在tmux会话内启动独立的X服务器:
startx -- :1 - 设置图形显示环境变量并运行脚本:
export DISPLAY=:1 python /path/to/your_script.py - 按下
Ctrl+B再按D分离tmux会话,之后断开VDS连接,脚本会持续运行。重新连接后用tmux attach-session -t playwright_gui即可回到会话查看状态。
方案2:用x11vnc创建可远程复用的桌面会话
适合需要随时查看浏览器状态的场景:
- 安装桌面环境和VNC工具:
sudo apt install x11vnc xfce4 - 设置VNC访问密码:
x11vnc -storepasswd - 启动持久化Xfce桌面并绑定VNC:
xinit /usr/bin/startxfce4 -- :2 & x11vnc -display :2 -usepw -forever - 用VNC客户端连接VDS的
5902端口(显示编号:2对应端口5902),在这个桌面内运行脚本。断开VNC连接后,会话和脚本仍会继续运行,重新连接即可恢复查看。
方案3:用systemd服务托管会话(长期稳定运行)
适合需要开机自启、故障自动恢复的场景:
- 创建systemd服务文件
/etc/systemd/system/playwright-gui.service:[Unit] Description=Persistent Playwright GUI Session After=network.target [Service] User=your_vds_username Environment=DISPLAY=:3 ExecStart=/usr/bin/startxfce4 ExecStartPost=/usr/bin/x11vnc -display :3 -usepw -forever ExecStartPost=/bin/bash -c "export DISPLAY=:3 && python /absolute/path/to/your_script.py" Restart=always [Install] WantedBy=multi-user.target - 替换文件中的
your_vds_username和脚本绝对路径,然后启用服务:sudo systemctl daemon-reload sudo systemctl enable playwright-gui.service sudo systemctl start playwright-gui.service - 用VNC连接
5903端口即可访问会话,服务会自动维持图形环境和脚本运行,VDS重启后也会自动恢复。
Windows VDS环境
Windows断开RDP后会自动锁定会话并暂停图形进程,解决方法:
- 打开组策略编辑器(运行
gpedit.msc) - 导航到计算机配置>管理模板>Windows组件>远程桌面服务>远程桌面会话主机>会话时间限制,设置「设置断开连接的会话的时间限制」为已禁用
- 导航到用户配置>管理模板>控制面板>个性化,禁用「屏幕保护程序超时」和「恢复时显示登录屏幕」
- 运行脚本后直接断开RDP连接,会话不会被终止,脚本会持续运行
内容的提问来源于stack exchange,提问作者eymentakak
相关产品推荐
相关产品推荐

