310 lines
6.5 KiB
Markdown
310 lines
6.5 KiB
Markdown
# Ubuntu 环境设置指南
|
||
|
||
## 1. 安装 Google Chrome 或 Chromium
|
||
|
||
### 方式一:安装 Google Chrome(推荐)
|
||
|
||
```bash
|
||
# 下载并安装 Google Chrome
|
||
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
|
||
sudo apt install -y ./google-chrome-stable_current_amd64.deb
|
||
```
|
||
|
||
### 方式二:安装 Chromium(开源版本)
|
||
|
||
```bash
|
||
sudo apt update
|
||
sudo apt install -y chromium-browser
|
||
```
|
||
|
||
## 2. 安装必要的依赖库
|
||
|
||
```bash
|
||
# 更新包列表
|
||
sudo apt update
|
||
|
||
# 安装 Chrome/Chromium 运行时依赖
|
||
sudo apt install -y \
|
||
libnss3 \
|
||
libatk-bridge2.0-0 \
|
||
libdrm2 \
|
||
libxkbcommon0 \
|
||
libxcomposite1 \
|
||
libxdamage1 \
|
||
libxfixes3 \
|
||
libxrandr2 \
|
||
libgbm1 \
|
||
libasound2 \
|
||
libpango-1.0-0 \
|
||
libcairo2 \
|
||
libatk1.0-0 \
|
||
libgdk-pixbuf2.0-0 \
|
||
libgtk-3-0
|
||
```
|
||
|
||
## 3. 安装 Python 依赖
|
||
|
||
⚠️ **注意**: Ubuntu 22.04+ 默认不允许直接使用 pip 安装系统级包。请使用以下方法之一:
|
||
|
||
### 方法一:使用虚拟环境(推荐)✅
|
||
|
||
```bash
|
||
# 1. 确保已安装 python3-venv
|
||
sudo apt install -y python3-venv python3-pip
|
||
|
||
# 2. 进入项目目录
|
||
cd ~/project/jdpl # 或者你的项目路径
|
||
|
||
# 3. 创建虚拟环境
|
||
python3 -m venv venv
|
||
|
||
# 4. 激活虚拟环境
|
||
source venv/bin/activate
|
||
|
||
# 5. 安装依赖
|
||
pip install DrissionPage
|
||
|
||
# 如果使用数据库
|
||
pip install sqlalchemy pymysql
|
||
|
||
# 6. 运行脚本(需要在虚拟环境中)
|
||
python jd/fetch_logistics_ubuntu.py
|
||
|
||
# 7. 退出虚拟环境(不需要时)
|
||
deactivate
|
||
```
|
||
|
||
### 方法二:使用 pipx(适合单命令工具)
|
||
|
||
```bash
|
||
# 1. 安装 pipx
|
||
sudo apt install -y pipx
|
||
pipx ensurepath
|
||
|
||
# 2. 使用 pipx 安装(如果要全局可用)
|
||
# 注意:pipx 主要用于安装应用程序,不太适合库
|
||
```
|
||
|
||
### 方法三:使用 --break-system-packages(不推荐,但快速)
|
||
|
||
```bash
|
||
# ⚠️ 警告:可能破坏系统 Python 环境,不推荐在生产环境使用
|
||
|
||
# 安装 DrissionPage
|
||
pip3 install --break-system-packages DrissionPage
|
||
|
||
# 如果使用数据库
|
||
pip3 install --break-system-packages sqlalchemy pymysql
|
||
```
|
||
|
||
### 方法四:使用 apt 安装(如果可用)
|
||
|
||
```bash
|
||
# 某些包可能通过 apt 安装(但 DrissionPage 通常不行)
|
||
sudo apt install -y python3-drissionpage # 通常不可用
|
||
```
|
||
|
||
**推荐使用方法一(虚拟环境)**,这是最安全和标准的做法。
|
||
|
||
## 4. 配置说明
|
||
|
||
### 无头模式(Headless)vs 有界面模式
|
||
|
||
在 `fetch_logistics_ubuntu.py` 文件中,可以设置 `USE_HEADLESS` 变量:
|
||
|
||
```python
|
||
USE_HEADLESS = True # 无头模式,适合服务器环境,不显示浏览器窗口
|
||
USE_HEADLESS = False # 有界面模式,需要图形界面支持
|
||
```
|
||
|
||
### 无头模式使用场景:
|
||
- 服务器环境(无桌面环境)
|
||
- SSH 远程连接
|
||
- Docker 容器
|
||
- 需要后台运行
|
||
|
||
### 有界面模式使用场景:
|
||
- 本地 Ubuntu 桌面环境
|
||
- 需要调试和查看浏览器行为
|
||
- 有 X11 或 Wayland 显示服务器
|
||
|
||
## 5. 运行脚本
|
||
|
||
```bash
|
||
# 进入脚本目录
|
||
cd /path/to/jdpl/jd
|
||
|
||
# 运行脚本
|
||
python3 fetch_logistics_ubuntu.py
|
||
```
|
||
|
||
## 6. 如果遇到问题
|
||
|
||
### 问题1: 找不到 Chrome/Chromium
|
||
|
||
```bash
|
||
# 检查是否安装
|
||
which google-chrome
|
||
which chromium-browser
|
||
|
||
# 如果找不到,检查常见路径
|
||
ls -la /usr/bin/google-chrome*
|
||
ls -la /usr/bin/chromium*
|
||
```
|
||
|
||
### 问题2: 权限问题
|
||
|
||
```bash
|
||
# 如果提示权限不足,可能需要添加 --no-sandbox 参数
|
||
# 脚本中已经自动添加了这个参数
|
||
```
|
||
|
||
### 问题3: 无头模式无法使用
|
||
|
||
如果设置 `USE_HEADLESS = False` 但仍然无法显示,可能需要:
|
||
|
||
```bash
|
||
# 检查 DISPLAY 环境变量
|
||
echo $DISPLAY
|
||
|
||
# 如果为空,设置显示(如果是本地桌面)
|
||
export DISPLAY=:0
|
||
|
||
# 或者使用 Xvfb(虚拟显示)
|
||
sudo apt install -y xvfb
|
||
xvfb-run -a python3 fetch_logistics_ubuntu.py
|
||
```
|
||
|
||
### 问题4: 缺少共享内存
|
||
|
||
如果看到 `/dev/shm` 相关错误:
|
||
|
||
```bash
|
||
# 检查 /dev/shm 大小
|
||
df -h /dev/shm
|
||
|
||
# 如果太小,可以挂载更大的空间(临时)
|
||
sudo mount -o remount,size=2G /dev/shm
|
||
```
|
||
|
||
### 问题5: 依赖库缺失
|
||
|
||
如果运行时提示缺少某些库:
|
||
|
||
```bash
|
||
# 安装所有可能的依赖
|
||
sudo apt install -y \
|
||
fonts-liberation \
|
||
libappindicator3-1 \
|
||
libasound2 \
|
||
libatk-bridge2.0-0 \
|
||
libatk1.0-0 \
|
||
libcairo2 \
|
||
libcups2 \
|
||
libdbus-1-3 \
|
||
libexpat1 \
|
||
libfontconfig1 \
|
||
libgbm1 \
|
||
libgcc1 \
|
||
libglib2.0-0 \
|
||
libgtk-3-0 \
|
||
libnspr4 \
|
||
libnss3 \
|
||
libpango-1.0-0 \
|
||
libpangocairo-1.0-0 \
|
||
libstdc++6 \
|
||
libx11-6 \
|
||
libx11-xcb1 \
|
||
libxcb1 \
|
||
libxcomposite1 \
|
||
libxcursor1 \
|
||
libxdamage1 \
|
||
libxext6 \
|
||
libxfixes3 \
|
||
libxi6 \
|
||
libxrandr2 \
|
||
libxrender1 \
|
||
libxss1 \
|
||
libxtst6 \
|
||
lsb-release \
|
||
wget \
|
||
xdg-utils
|
||
```
|
||
|
||
## 7. Docker 环境(可选)
|
||
|
||
如果需要:
|
||
|
||
```dockerfile
|
||
FROM ubuntu:22.04
|
||
|
||
RUN apt-get update && apt-get install -y \
|
||
python3 \
|
||
python3-pip \
|
||
wget \
|
||
&& wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb \
|
||
&& apt-get install -y ./google-chrome-stable_current_amd64.deb \
|
||
&& pip3 install DrissionPage
|
||
|
||
WORKDIR /app
|
||
COPY jd/fetch_logistics_ubuntu.py .
|
||
CMD ["python3", "fetch_logistics_ubuntu.py"]
|
||
```
|
||
|
||
## 8. 验证安装
|
||
|
||
### 如果使用虚拟环境:
|
||
|
||
```bash
|
||
# 激活虚拟环境
|
||
source venv/bin/activate
|
||
|
||
# 运行测试
|
||
python -c "
|
||
from DrissionPage import ChromiumPage, ChromiumOptions
|
||
import os
|
||
chrome_path = '/usr/bin/google-chrome'
|
||
if not os.path.exists(chrome_path):
|
||
chrome_path = '/usr/bin/chromium-browser'
|
||
options = ChromiumOptions()
|
||
options.set_browser_path(chrome_path)
|
||
options.headless(True)
|
||
page = ChromiumPage(options)
|
||
page.get('https://www.baidu.com')
|
||
print('✅ 浏览器测试成功!')
|
||
page.quit()
|
||
"
|
||
```
|
||
|
||
### 如果使用系统级安装(--break-system-packages):
|
||
|
||
```bash
|
||
python3 -c "
|
||
from DrissionPage import ChromiumPage, ChromiumOptions
|
||
import os
|
||
chrome_path = '/usr/bin/google-chrome'
|
||
if not os.path.exists(chrome_path):
|
||
chrome_path = '/usr/bin/chromium-browser'
|
||
options = ChromiumOptions()
|
||
options.set_browser_path(chrome_path)
|
||
options.headless(True)
|
||
page = ChromiumPage(options)
|
||
page.get('https://www.baidu.com')
|
||
print('✅ 浏览器测试成功!')
|
||
page.quit()
|
||
"
|
||
```
|
||
|
||
## 常见路径总结
|
||
|
||
Chrome/Chromium 在 Ubuntu 上的常见路径:
|
||
- `/usr/bin/google-chrome` - Google Chrome
|
||
- `/usr/bin/google-chrome-stable` - Google Chrome (稳定版)
|
||
- `/usr/bin/chromium-browser` - Chromium
|
||
- `/usr/bin/chromium` - Chromium (简化名)
|
||
- `/snap/bin/chromium` - Snap 安装的 Chromium
|
||
- `/opt/google/chrome/chrome` - 某些安装方式的路径
|
||
|
||
脚本会自动检测这些路径。
|
||
|