通过VS Code Remote-SSH远程运行Puppeteer代码失败求助
解决远程运行Puppeteer爬虫的问题及触发方法
一、解决Puppeteer启动失败的核心问题
错误提示Missing X server or $DISPLAY是因为Puppeteer默认尝试启动带图形界面的浏览器,但远程SSH连接无图形环境,两种解决方式:
1. 启用无头模式(推荐)
修改Puppeteer启动代码,添加无头模式配置,无需依赖X服务器:
const puppeteer = require('puppeteer'); (async () => { const browser = await puppeteer.launch({ headless: "new", // Puppeteer v19+使用此参数,旧版本用headless: true args: [ '--no-sandbox', '--disable-setuid-sandbox', '--disable-dev-shm-usage', '--disable-gpu' ] }); // 后续爬虫逻辑... })();
2. 安装虚拟X服务器(需图形界面场景)
如果必须运行带界面的浏览器,在Ubuntu上安装Xvfb虚拟显示服务:
- 安装依赖:
sudo apt update && sudo apt install xvfb
- 用xvfb-run包裹命令运行代码:
xvfb-run node advancedSearch.js
补充:安装浏览器依赖库
确保Ubuntu上安装了Puppeteer所需的系统库,避免启动失败:
sudo apt install libnss3 libatk-bridge2.0-0 libdrm-dev libxkbcommon-dev libgbm-dev libasound-dev libatspi2.0-0 libxshmfence-dev
二、远程触发Ubuntu上代码运行的方法
1. VS Code远程终端直接运行
通过Remote-SSH连接后,打开VS Code终端(确保为远程环境),执行:
cd ~/repo/scraper && node advancedSearch.js
2. Mac本地终端SSH远程执行
无需打开VS Code,直接在Mac终端用SSH命令触发:
ssh admin@你的UbuntuIP地址 "cd ~/repo/scraper && node advancedSearch.js"
如需后台运行(断开SSH不中断),用nohup:
ssh admin@你的UbuntuIP地址 "cd ~/repo/scraper && nohup node advancedSearch.js > scraper.log 2>&1 &"
日志会输出到scraper.log文件。
3. VS Code调试运行
配置VS Code的launch.json(远程环境下),示例配置:
{ "version": "0.2.0", "configurations": [ { "type": "node", "request": "launch", "name": "Run Advanced Scraper", "program": "${workspaceFolder}/scraper/advancedSearch.js", "cwd": "${workspaceFolder}/scraper" } ] }
点击调试按钮即可远程触发代码运行并调试。
内容的提问来源于stack exchange,提问作者AFK
相关产品推荐
相关产品推荐

