1
This commit is contained in:
309
jd/UBUNTU_SETUP.md
Normal file
309
jd/UBUNTU_SETUP.md
Normal file
@@ -0,0 +1,309 @@
|
||||
# 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` - 某些安装方式的路径
|
||||
|
||||
脚本会自动检测这些路径。
|
||||
|
||||
Reference in New Issue
Block a user