如何实现本地执行Playwright脚本,在远程VM上完成Chromium操作?
实现本地脚本触发远程VM执行Playwright Chromium操作的两种方案
方案1:通过SSH直接远程执行脚本
适合将本地脚本同步到远程后,直接在远程环境中运行完整流程。
同步本地脚本到远程
使用scp命令快速传输文件:scp /本地脚本绝对路径/your-script.py 远程用户名@远程VM地址:/远程存储路径/若脚本存于Git仓库,也可直接在远程VM上执行
git pull拉取最新版本。远程执行脚本
无需登录交互,直接通过SSH命令触发执行:Python脚本示例ssh 远程用户名@远程VM地址 "cd /远程存储路径/ && python your-script.py"Node.js脚本示例ssh 远程用户名@远程VM地址 "cd /远程存储路径/ && npx playwright test your-script.spec.js"关键注意事项
- 确认远程已安装对应浏览器:执行
playwright install chromium确保依赖完整 - 如需可视化查看浏览器操作,本地开启X11转发后执行:
ssh -X 远程用户名@远程VM地址,再运行脚本即可在本地看到远程Chromium窗口;无头模式下无需此操作,脚本中设置headless=True(Python)或headless: true(Node)即可。
- 确认远程已安装对应浏览器:执行
方案2:本地脚本连接远程Playwright服务
适合无需同步脚本到远程,直接在本地控制远程浏览器的场景。
远程启动Playwright服务
在远程VM上启动浏览器服务,指定端口(示例用9222):playwright run-server --port=9222如需后台运行避免终端关闭中断,用
nohup:nohup playwright run-server --port=9222 &本地脚本修改为连接远程服务
Python示例from playwright.sync_api import sync_playwright with sync_playwright() as p: # 连接远程服务,替换为你的VM地址 browser = p.chromium.connect("ws://远程VM地址:9222/ws") page = browser.new_page() # 原有脚本逻辑直接复用 page.goto("https://example.com") print(page.title()) page.close() browser.close()Node.js示例const { chromium } = require('playwright'); (async () => { const browser = await chromium.connect('ws://远程VM地址:9222/ws'); const page = await browser.newPage(); // 原有脚本逻辑直接复用 await page.goto('https://example.com'); console.log(await page.title()); await page.close(); await browser.close(); })();安全优化提示
若不想对外开放9222端口,可通过SSH端口转发实现本地访问:ssh -L 9222:localhost:9222 远程用户名@远程VM地址此时本地脚本可改为连接
ws://localhost:9222/ws,无需暴露远程端口。
内容的提问来源于stack exchange,提问作者KarmaniJ
相关产品推荐
相关产品推荐

