# 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` - 某些安装方式的路径 脚本会自动检测这些路径。