当前位置: 首页 > news >正文

从零到一:在CentOS上部署Chrome与Chromedriver的实战指南

1. 环境准备:搭建CentOS基础环境

在开始安装Chrome和Chromedriver之前,我们需要确保CentOS系统已经准备好基础环境。很多新手容易忽略这一步,结果在后续安装过程中遇到各种依赖问题。我曾在多个项目中遇到过因为缺少基础依赖导致安装失败的情况,所以特别强调这个环节的重要性。

首先,我们需要更新系统软件包到最新版本。打开终端,执行以下命令:

sudo yum update -y

这个命令会更新所有已安装的软件包。记得加上-y参数,这样系统会自动确认所有提示,避免安装过程中需要手动干预。更新完成后,建议重启系统以确保所有更新生效。

接下来,我们需要安装一些必要的依赖库。Chrome浏览器和Chromedriver在运行时会依赖这些库:

sudo yum install -y wget unzip libX11 libXcursor libXdamage libXext libXfixes libXi libXrandr libXrender libXtst libXScrnSaver alsa-lib pango atk at-spi2-atk gtk3

这些依赖库包含了图形界面支持、音频系统、字体渲染等基础功能。即使你的CentOS服务器没有图形界面,这些库也是必需的,因为Chrome在设计时就考虑了图形化环境的需求。

2. 安装Google Chrome浏览器

现在我们来安装Google Chrome浏览器。在Linux环境下安装Chrome有多种方法,但最稳定可靠的方式是直接使用Google官方提供的RPM包。我测试过多种安装方式,发现这种方法版本控制最清晰,也最容易维护。

首先,下载最新的Chrome稳定版RPM包:

wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm

下载完成后,使用yum进行本地安装。这里有个小技巧:使用localinstall而不是直接install,因为前者会自动处理依赖关系:

sudo yum localinstall -y google-chrome-stable_current_x86_64.rpm

安装完成后,验证Chrome是否安装成功:

google-chrome --version

这个命令会输出Chrome的版本号,比如"Google Chrome 115.0.5790.170"。记下这个版本号,因为接下来安装Chromedriver时需要匹配相同的版本。

3. 安装匹配版本的Chromedriver

Chromedriver是Selenium控制Chrome浏览器的桥梁,版本必须与Chrome浏览器严格匹配。这是自动化测试中最容易出问题的环节,我见过太多因为版本不匹配导致的测试失败案例。

首先,访问Chromedriver的官方镜像站点查找对应版本: https://googlechromelabs.github.io/chrome-for-testing/#stable

找到与你Chrome版本完全匹配的Chromedriver版本。如果找不到完全匹配的版本,可以选择最接近的次版本。比如你的Chrome是115.0.5790.170,可以选择115.0.5790开头的Chromedriver。

下载对应的Chromedriver(以115.0.5790.90为例):

wget https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing/115.0.5790.90/linux64/chromedriver-linux64.zip

解压下载的压缩包:

unzip chromedriver-linux64.zip

将解压后的chromedriver移动到系统PATH包含的目录,比如/usr/bin:

sudo mv chromedriver /usr/bin

最后,给chromedriver添加可执行权限:

sudo chmod +x /usr/bin/chromedriver

4. 验证安装与常见问题解决

安装完成后,我们需要验证整个环境是否配置正确。这是很多教程会忽略的部分,但却是确保后续自动化测试能顺利运行的关键步骤。

首先验证Chromedriver是否能正常运行:

chromedriver --version

这个命令应该输出Chromedriver的版本号,且应该与你安装的Chrome浏览器版本匹配。

接下来,我们可以编写一个简单的Python脚本来测试Selenium是否能正常控制Chrome。创建一个test.py文件,内容如下:

from selenium import webdriver from selenium.webdriver.chrome.options import Options options = Options() options.add_argument('--headless') # 无头模式 options.add_argument('--no-sandbox') options.add_argument('--disable-dev-shm-usage') driver = webdriver.Chrome(options=options) driver.get('https://www.google.com') print(driver.title) driver.quit()

运行这个脚本:

python3 test.py

如果一切正常,你应该能看到输出"Google"。如果遇到问题,以下是几个常见错误及解决方法:

  1. Chromedriver版本不匹配:确保Chromedriver版本与Chrome浏览器版本一致或接近。错误信息通常会明确指出版本不匹配。

  2. 缺少依赖库:如果报错提到缺少某些.so文件,可能是缺少依赖库。可以尝试安装前面提到的所有依赖库。

  3. 权限问题:确保/usr/bin/chromedriver有可执行权限,并且SELinux没有阻止其运行。

  4. 内存不足:在资源有限的服务器上,可以添加--disable-dev-shm-usage参数来避免共享内存问题。

5. 进阶配置与优化建议

基础安装完成后,我们可以进行一些进阶配置来优化自动化测试环境的性能和稳定性。这些技巧来自我在多个项目中的实战经验,能显著提高测试效率和可靠性。

无头模式优化:在生产环境中,我们通常使用无头模式运行Chrome。可以添加以下参数来优化性能:

options.add_argument('--headless') options.add_argument('--disable-gpu') options.add_argument('--window-size=1920,1080')

资源限制处理:在资源有限的服务器上,可以限制Chrome的内存和CPU使用:

options.add_argument('--disable-software-rasterizer') options.add_argument('--disable-extensions') options.add_argument('--disable-notifications')

代理设置:如果需要通过代理访问测试网站,可以这样配置:

options.add_argument('--proxy-server=http://your-proxy:port')

日志记录:调试时可以启用Chromedriver的日志记录:

from selenium.webdriver.chrome.service import Service service = Service(executable_path='/usr/bin/chromedriver', service_args=['--verbose', '--log-path=chromedriver.log']) driver = webdriver.Chrome(service=service, options=options)

版本管理:建议在项目中固定Chrome和Chromedriver的版本,避免自动更新导致的不兼容问题。可以在部署脚本中加入版本检查逻辑:

#!/bin/bash REQUIRED_CHROME_VERSION="115.0.5790.170" CURRENT_CHROME_VERSION=$(google-chrome --version | awk '{print $3}') if [ "$CURRENT_CHROME_VERSION" != "$REQUIRED_CHROME_VERSION" ]; then echo "Chrome version mismatch. Expected $REQUIRED_CHROME_VERSION, found $CURRENT_CHROME_VERSION" exit 1 fi

6. 自动化部署脚本

为了简化部署过程,我们可以将上述所有步骤整合到一个自动化部署脚本中。这是我经过多次项目实践后总结出的最佳方案,能大大减少手动操作和出错概率。

创建一个install_chrome.sh文件,内容如下:

#!/bin/bash # 更新系统 sudo yum update -y # 安装依赖 sudo yum install -y wget unzip libX11 libXcursor libXdamage libXext libXfixes libXi libXrandr libXrender libXtst libXScrnSaver alsa-lib pango atk at-spi2-atk gtk3 # 安装Chrome wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm sudo yum localinstall -y google-chrome-stable_current_x86_64.rpm CHROME_VERSION=$(google-chrome --version | awk '{print $3}') # 安装匹配的Chromedriver CHROMEDRIVER_VERSION=$(echo $CHROME_VERSION | cut -d'.' -f1-3) wget "https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing/$CHROME_VERSION/linux64/chromedriver-linux64.zip" -O chromedriver.zip unzip chromedriver.zip sudo mv chromedriver /usr/bin/ sudo chmod +x /usr/bin/chromedriver # 验证安装 chromedriver --version

给脚本添加执行权限并运行:

chmod +x install_chrome.sh ./install_chrome.sh

这个脚本会自动完成所有安装步骤,包括版本匹配和权限设置。在实际项目中,你可以根据需要调整版本控制逻辑或添加额外的配置步骤。

7. 容器化部署方案

对于需要频繁部署或隔离环境的场景,我们可以考虑使用Docker容器化方案。这种方法能提供更好的环境隔离和可移植性,也是现代DevOps实践中的推荐做法。

创建一个Dockerfile文件,内容如下:

FROM centos:7 # 安装基础依赖 RUN yum update -y && \ yum install -y wget unzip libX11 libXcursor libXdamage libXext libXfixes libXi libXrandr libXrender libXtst libXScrnSaver alsa-lib pango atk at-spi2-atk gtk3 && \ yum clean all # 安装Chrome RUN wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm && \ yum localinstall -y google-chrome-stable_current_x86_64.rpm && \ rm google-chrome-stable_current_x86_64.rpm # 安装匹配的Chromedriver RUN CHROME_VERSION=$(google-chrome --version | awk '{print $3}') && \ wget "https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing/$CHROME_VERSION/linux64/chromedriver-linux64.zip" -O chromedriver.zip && \ unzip chromedriver.zip && \ mv chromedriver /usr/bin/ && \ chmod +x /usr/bin/chromedriver && \ rm chromedriver.zip # 安装Python和Selenium RUN yum install -y python3 python3-pip && \ pip3 install selenium

构建Docker镜像:

docker build -t selenium-chrome .

运行容器:

docker run -it --rm selenium-chrome python3 -c "from selenium import webdriver; driver = webdriver.Chrome(); print('Selenium Chrome test successful'); driver.quit()"

这种容器化方案特别适合CI/CD流水线,可以确保每次测试都在完全一致的环境中运行,避免了"在我机器上能运行"的问题。

http://www.jsqmd.com/news/829319/

相关文章:

  • 从OpenPose编译到实际项目集成:我的Windows+VS2022踩坑实录与性能调优心得
  • AI Token 薪酬时代:当“算力”成为工资条上的第四栏
  • FanControl风扇控制技术深度解析:Windows系统兼容性优化与高级温控实战指南
  • ElevenLabs老年男性语音定制全链路拆解(含API调用实测数据与年龄建模偏差报告)
  • UVM配置机制深度解析:从字符串匹配原理到验证平台实战
  • libhv实战:手把手教你用C++写一个带自动重连的WebSocket客户端(附避坑指南)
  • FreeMove终极指南:如何安全迁移C盘大文件而不破坏程序运行
  • 凌晨3点知网AI率78%慌得想哭!这款降AI软件几分钟救我过知网AIGC检测
  • PX4飞控L1制导律:从航点追踪到航向保持的实战解析
  • RK3568核心板工业级可靠性测试全记录:从压力测试到设计优化
  • 别再死记硬背了!用Python(NumPy/SymPy)5分钟搞定高数级数敛散性判断
  • 2026学生党平价油头洗发水高性价比控油蓬松闭眼无脑入 - 资讯焦点
  • KV缓存优化与RAG系统性能提升实践
  • D2DX终极指南:5分钟让20年老游戏《暗黑破坏神2》焕发现代生机
  • 5分钟完全掌握ChampR:英雄联盟玩家的智能出装符文助手
  • 【限时技术白皮书】ElevenLabs尼泊尔文语音质量评估体系(含MOS打分标准、基线数据集、及与Google Cloud Text-to-Speech Nepali v1.3对比)
  • 告别Vivado自带编辑器!手把手教你用Sublime Text 4 + Icarus Verilog搭建FPGA开发环境(Windows 10/11)
  • RK3576平台12路1080P视频流低延迟处理实战:从硬件架构到软件优化
  • ChanlunX:通达信缠论分析的终极自动化解决方案
  • 3分钟搞定OFD转PDF:Ofd2Pdf免费工具完全指南
  • 不只是调色板:深入Cadence Allegro颜色配置文件的保存与复用逻辑(SPB17.4实战)
  • NotebookLM智能体插件开发:连接AI笔记与外部工具的实现指南
  • 义乌尼昂贸易|扎根义乌跨境饰品源头工厂,全品类供货+定制一站式服务 - 资讯焦点
  • DS4Windows终极指南:让PS4手柄在Windows上完美运行
  • FPGA新手避坑指南:用Vivado IP核搞定AXI总线,从看懂波形开始
  • 手把手教你用refsutil拯救误删的Server 2019硬盘数据(附完整命令与避坑指南)
  • 无线互操作性:Wi-Fi与蓝牙技术的协同挑战与解决方案
  • 3步解锁12种加密音乐:免费开源工具让数字音乐重获自由
  • SLCAN协议实战:从脚本编写到自动化测试全解析
  • 终极Windows和Office永久激活指南:KMS_VL_ALL_AIO智能脚本完整教程