在无图形界面(GUI)的服务器上,你可以通过命令行安装无头浏览器或文本浏览器来实现网页访问。以下是几种常用方案:
一、使用文本浏览器(适合查看内容、调试)
1. curl / wget(最基础)
# 安装 curl(通常已预装)
sudo apt update && sudo apt install -y curl
# 获取网页内容
curl https://example.com
# 或使用 wget
wget -O - https://example.com
✅ 优点:轻量、快速
❌ 缺点:无法执行 JavaScript,不支持复杂交互
2. lynx 或 w3m(带简单导航的文本浏览器)
# Debian/Ubuntu
sudo apt install -y lynx w3m
# 使用 lynx
lynx https://example.com
# 使用 w3m(支持图片预览需终端支持)
w3m https://example.com
✅ 可用方向键浏览链接、表单输入
❌ 仍无法渲染 JS
二、使用无头浏览器(可执行 JavaScript)
✅ 推荐:playwright + Node.js 或 Python + selenium + chromium-headless
注意:这些工具需要额外依赖,但能完整模拟现代浏览器行为。
方案 A:Python + Selenium + Chromium(无头模式)
# 安装 Python 和 pip
sudo apt update && sudo apt install -y python3-pip python3-venv
# 创建虚拟环境并激活
python3 -m venv browser-env
source browser-env/bin/activate
# 安装 selenium 和 webdriver-manager
pip install selenium webdriver-manager
# 编写脚本 test_browser.py:
cat > test_browser.py << 'EOF'
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
options = Options()
options.add_argument("--headless")
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")
options.add_argument("--disable-gpu")
driver = webdriver.Chrome(ChromeDriverManager().install(), options=options)
driver.get("https://example.com")
print(driver.title)
print(driver.find_element(By.TAG_NAME, "h1").text)
driver.quit()
EOF
# 运行
python test_browser.py
方案 B:Node.js + Puppeteer(更轻量,专为无头设计)
# 安装 Node.js
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
# 初始化项目并安装 puppeteer
mkdir my-browser && cd my-browser
npm init -y
npm install puppeteer
# 创建 script.js
cat > script.js << 'EOF'
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({
headless: true,
args: ['--no-sandbox', '--disable-setuid-sandbox']
});
const page = await browser.newPage();
await page.goto('https://example.com', { waitUntil: 'networkidle2' });
console.log(await page.title());
console.log(await page.$eval('h1', el => el.innerText));
await browser.close();
})();
EOF
# 运行
node script.js
💡 Puppeteer 默认会下载 Chromium(约 200MB),首次运行较慢,后续可复用。
三、高级需求:远程访问 GUI 浏览器(不推荐用于生产)
若必须用真实 GUI 浏览器(如 Firefox/Chrome):
- 安装桌面环境(极重,仅测试用):
sudo apt install -y xorg openbox firefox - 启动 X server + VNC:
sudo apt install -y xorgxrdp tigervnc-standalone-server tigervnc-common # 配置 ~/.vnc/xstartup 启动 openbox vncserver :1 # 从本地用 VNC 客户端连接查看⚠️ 此方案资源消耗大、安全性低,仅适用于临时调试。
选择建议
| 场景 | 推荐方案 |
|---|---|
| 抓取静态页面 / API 测试 | curl / wget |
| 需点击按钮、填表单、看动态内容 | Python+Selenium 或 Node+Puppeteer |
| 自动化测试 / 爬虫 | Puppeteer(性能更好)或 Playwright |
| 快速验证某页是否加载成功 | lynx --dump https://... |
需要我帮你生成一个完整的 Dockerfile 或 systemd 服务来部署无头浏览器吗?
PHPWP博客