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

Debian/Ubuntu 无头模式配置 Chrome 与 Selenium 自动化测试全攻略

1. 为什么需要无头模式下的Chrome自动化测试在服务器端自动化测试的场景中无头模式Headless Mode已经成为标配。想象一下你正在搭建一个持续集成CI环境需要在每次代码提交后自动运行测试用例。如果每次测试都要弹出浏览器窗口不仅浪费资源还可能因为缺少图形界面而导致测试失败。这就是为什么我们需要在Debian/Ubuntu服务器上配置无头Chrome的原因。我去年负责过一个电商项目的自动化测试系统迁移当时就深刻体会到无头模式的重要性。原本在Windows开发机上运行良好的测试脚本一到Linux服务器就各种报错。经过排查发现服务器既没有安装图形界面也没有正确配置Chrome的无头模式参数。后来通过调整配置不仅测试成功率从60%提升到99%执行速度还快了近3倍。无头模式下的Chrome完全在后台运行不加载任何可视化元素这对资源有限的服务器特别友好。根据我的实测数据同样的测试用例无头模式比普通模式节省约40%的内存占用。对于需要并行运行大量测试用例的CI/CD流水线来说这个优化效果非常可观。2. 环境准备与依赖安装2.1 系统基础配置在开始之前建议先更新系统软件包。这个习惯帮我避免过很多奇怪的依赖问题sudo apt update sudo apt upgrade -y接下来安装必要的依赖库。这些是Chrome运行的基础环境缺少它们可能会导致各种奇怪的错误sudo apt install -y wget unzip libxss1 libappindicator1 libindicator7有次我在客户的生产环境遇到个棘手问题Chrome启动后立即崩溃。后来发现是因为缺少libgconf-2.so.4这个库。所以现在我都会多装几个常见依赖sudo apt install -y libgconf-2-4 libnss3 libnspr4 libx11-6 libx11-xcb12.2 Chrome浏览器安装官方提供的.deb包是最稳定的选择。下载时建议使用--show-progress参数这样能清楚看到下载进度wget --show-progress https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb安装时常见的问题是依赖缺失。别担心这个报错是正常的sudo dpkg -i google-chrome-stable_current_amd64.deb如果看到依赖错误运行这个命令自动修复sudo apt install -f验证安装是否成功google-chrome --version3. Chrome Driver配置详解3.1 版本匹配的艺术Chrome Driver的版本必须与浏览器版本匹配这是最常见的坑点。我建议用这个命令获取精确版本号google-chrome --version | awk {print $3}访问Chrome Driver的版本列表页面时如果找不到完全匹配的版本选择最接近的次版本号。比如Chrome是114.0.5735.198可以选用114.0.5735.90。3.2 安装与路径配置下载解压后我习惯把chromedriver放到/usr/local/bin而不是/usr/bin。因为后者可能被系统更新覆盖wget https://chromedriver.storage.googleapis.com/114.0.5735.90/chromedriver_linux64.zip unzip chromedriver_linux64.zip sudo mv chromedriver /usr/local/bin/ sudo chmod x /usr/local/bin/chromedriver验证是否可用chromedriver --version如果遇到权限问题可以尝试sudo chown root:root /usr/local/bin/chromedriver4. Selenium无头模式实战4.1 基础测试脚本这是我最常用的初始化配置经过数十次实战验证from selenium import webdriver from selenium.webdriver.chrome.options import Options def create_driver(): options Options() options.add_argument(--no-sandbox) # 必须参数 options.add_argument(--headless) options.add_argument(--disable-gpu) options.add_argument(--disable-dev-shm-usage) # 解决内存不足问题 options.add_argument(--window-size1920,1080) # 设置默认窗口大小 driver webdriver.Chrome(optionsoptions) return driver4.2 高级参数调优对于需要处理大量页面的场景这些参数能显著提升稳定性options.add_argument(--disable-software-rasterizer) options.add_argument(--disable-extensions) options.add_argument(--disable-infobars) options.add_argument(--disable-breakpad) options.add_argument(--disable-setuid-sandbox) options.add_argument(--single-process)4.3 常见问题排查如果遇到DevToolsActivePort file doesnt exist错误可以这样处理options.add_argument(--remote-debugging-port9222)内存不足时的解决方案options.add_argument(--disable-dev-shm-usage)5. 生产环境最佳实践5.1 Docker化部署这是我正在使用的Dockerfile示例FROM python:3.9-slim RUN apt update apt install -y wget unzip \ libxss1 libappindicator1 libindicator7 \ libgconf-2-4 libnss3 libnspr4 libx11-6 libx11-xcb1 RUN wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb \ dpkg -i google-chrome-stable_current_amd64.deb || apt install -f -y RUN wget https://chromedriver.storage.googleapis.com/114.0.5735.90/chromedriver_linux64.zip \ unzip chromedriver_linux64.zip \ mv chromedriver /usr/local/bin/ \ chmod x /usr/local/bin/chromedriver COPY requirements.txt . RUN pip install -r requirements.txt5.2 性能监控方案在长期运行的CI环境中建议添加资源监控import psutil def check_system_status(): print(fCPU使用率: {psutil.cpu_percent()}%) print(f内存使用: {psutil.virtual_memory().percent}%)5.3 日志收集策略配置详细的日志输出有助于问题排查from selenium.webdriver.common.service import Service service Service(executable_path/usr/local/bin/chromedriver, service_args[--verbose, --log-pathchromedriver.log]) driver webdriver.Chrome(serviceservice, optionsoptions)6. 实战案例电商爬虫测试最近用这套配置实现了一个电商价格监控系统。核心代码如下def scrape_product(url): driver create_driver() try: driver.get(url) WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, .price)) ) price driver.find_element(By.CSS_SELECTOR, .price).text return float(price.replace(¥, ).strip()) finally: driver.quit()关键点在于使用WebDriverWait确保元素加载完成在finally块中确保driver总是被关闭价格文本的清洗处理7. 疑难问题解决方案7.1 证书错误处理遇到SSL证书问题时options.add_argument(--ignore-certificate-errors) options.add_argument(--allow-running-insecure-content)7.2 中文乱码问题确保系统已安装中文字体sudo apt install -y fonts-wqy-microhei fonts-wqy-zenhei7.3 内存泄漏预防长期运行的脚本建议定期重启driverfrom contextlib import contextmanager contextmanager def browser_session(): driver create_driver() try: yield driver finally: driver.quit()8. 进阶技巧与优化8.1 网络限速模拟测试弱网环境的页面表现from selenium.webdriver.common.proxy import Proxy, ProxyType proxy Proxy({ proxyType: ProxyType.MANUAL, httpProxy: localhost:8080, # 使用像Charles这样的代理工具 sslProxy: localhost:8080 })8.2 请求拦截与分析使用Chrome DevTools Protocol监控网络请求from selenium.webdriver.common.desired_capabilities import DesiredCapabilities caps DesiredCapabilities.CHROME caps[goog:loggingPrefs] {performance: ALL} driver webdriver.Chrome(desired_capabilitiescaps, optionsoptions) logs driver.get_log(performance)8.3 多实例并行处理使用线程池实现并行测试from concurrent.futures import ThreadPoolExecutor def run_test(url): with browser_session() as driver: driver.get(url) # 执行测试逻辑 with ThreadPoolExecutor(max_workers4) as executor: executor.map(run_test, test_urls)记得根据服务器配置调整max_workers数量通常建议设置为CPU核心数的2-3倍。

相关文章:

Debian/Ubuntu 无头模式配置 Chrome 与 Selenium 自动化测试全攻略

1. 为什么需要无头模式下的Chrome自动化测试 在服务器端自动化测试的场景中,无头模式(Headless Mode)已经成为标配。想象一下,你正在搭建一个持续集成(CI)环境,需要在每次代码提交后自动运行测试…...

东南大学论文模板终极指南:告别格式烦恼,专注学术创作

东南大学论文模板终极指南:告别格式烦恼,专注学术创作 【免费下载链接】SEUThesis 项目地址: https://gitcode.com/gh_mirrors/seu/SEUThesis 每到毕业季,无数东南大学学子都面临同样的困境——花费数周时间反复调整论文格式&#xf…...

锂电池寿命预测避坑指南:Transformer模型参数调优全解析

锂电池寿命预测避坑指南:Transformer模型参数调优全解析 锂电池作为现代能源存储的核心组件,其寿命预测的准确性直接关系到设备可靠性和安全运营。传统预测方法往往受限于模型复杂度或数据质量,而Transformer模型凭借其独特的注意力机制&…...

简单掌握.NET MAUI Community Toolkit高级UI控件:AvatarView、CameraView等深度解析

简单掌握.NET MAUI Community Toolkit高级UI控件:AvatarView、CameraView等深度解析 【免费下载链接】Maui The .NET MAUI Community Toolkit is a community-created library that contains .NET MAUI Extensions, Advanced UI/UX Controls, and Behaviors to help…...

【Blender进阶】VSCode调试大型项目:从模块导入到参数解析的实战避坑指南

1. 为什么需要VSCode调试Blender大型项目 当你刚开始接触Blender脚本开发时,可能习惯直接在Blender内置的文本编辑器中编写和测试代码。这种方式对于简单的单文件脚本还算方便,但随着项目规模扩大,你会遇到几个明显的痛点: 首先&a…...

短视频SEO过程中容易犯的错误有哪些_短视频SEO最佳实践有哪些

短视频SEO过程中容易犯的错误有哪些_短视频SEO最佳实践有哪些 在当今数字化时代,短视频平台已经成为了信息传播和娱乐的重要渠道。为了在海量的短视频中脱颖而出,优化短视频SEO(搜索引擎优化)成为了不可忽视的一部分。在实际操作…...

写给开发者的AI入门:从“代码实现”到“能力编排”的思维跃迁

当你已经能够熟练驾驭复杂的业务逻辑,能够独立设计高可用的系统架构时,面对如今汹涌而来的AI浪潮,你可能会产生一种微妙的“失重感”。这种焦虑并非源于对新技术的恐惧,而是源于对既有经验价值的重估:当编码的边际成本…...

PowerPaint-V1图像修复不求人:API集成与自动化工作流搭建

PowerPaint-V1图像修复不求人:API集成与自动化工作流搭建 1. 项目概述与技术优势 PowerPaint-V1是由字节跳动与香港大学联合研发的先进图像修复模型,它通过深度学习技术实现了两大核心功能: 纯净消除:智能识别背景纹理&#xf…...

Arduino-Pico:Raspberry Pi Pico Arduino核心完全指南 - 支持所有RP2040和RP2350开发板

Arduino-Pico:Raspberry Pi Pico Arduino核心完全指南 - 支持所有RP2040和RP2350开发板 【免费下载链接】arduino-pico Raspberry Pi Pico Arduino core, for all RP2040 and RP2350 boards 项目地址: https://gitcode.com/gh_mirrors/ar/arduino-pico 想要在…...

直播保存新方案:多平台支持的自动录制工具使用指南

直播保存新方案:多平台支持的自动录制工具使用指南 【免费下载链接】DouyinLiveRecorder 可循环值守和多人录制的直播录制软件,支持抖音、TikTok、Youtube、快手、虎牙、斗鱼、B站、小红书、pandatv、sooplive、flextv、popkontv、twitcasting、winktv、…...

Http4s高级特性:WebSocket、Server-Sent Events与流式处理终极指南

Http4s高级特性:WebSocket、Server-Sent Events与流式处理终极指南 【免费下载链接】http4s A minimal, idiomatic Scala interface for HTTP 项目地址: https://gitcode.com/gh_mirrors/ht/http4s 探索Http4s框架中最强大的实时通信和流式处理特性&#xff…...

FachuanHybridSystem 项目 Windows 完整安装启动文档

一步不丢,复制粘贴即可,下次直接照着跑 一、前置准备(仅第一次需要) 安装 Git:https://git-scm.com/download/win安装完 必须重启 PowerShell 二、完整一键流程(永久通用) 打开 PowerShell&am…...

Reloaded-II模组依赖无限下载循环终极解决方案:全流程故障诊断与修复指南

Reloaded-II模组依赖无限下载循环终极解决方案:全流程故障诊断与修复指南 【免费下载链接】Reloaded-II Universal .NET Core Powered Modding Framework for any Native Game X86, X64. 项目地址: https://gitcode.com/gh_mirrors/re/Reloaded-II 问题定位&…...

Miniconda-Python3.11镜像实测:轻量级环境管理,AI开发更高效

Miniconda-Python3.11镜像实测:轻量级环境管理,AI开发更高效 1. 为什么选择Miniconda-Python3.11 在AI开发领域,Python环境管理一直是个令人头疼的问题。不同项目可能需要不同版本的Python和依赖库,传统的全局安装方式经常导致版…...

Phi-3-Mini-128K实战落地:政务公文智能校对+政策条款关联推荐引擎

Phi-3-Mini-128K实战落地:政务公文智能校对政策条款关联推荐引擎 1. 引言:当轻量化大模型遇上严肃政务场景 想象一下,一位政府部门的文秘人员正在起草一份重要的政策文件。他需要确保公文格式绝对规范、用词严谨准确,同时还要从…...

Claude Code自动化工作流终极指南:如何实现PR审查、问题分类和持续集成

Claude Code自动化工作流终极指南:如何实现PR审查、问题分类和持续集成 【免费下载链接】claude-code-guide Claude Code Guide - Setup, Commands, workflows, agents, skills & tips-n-tricks go from beginner to power user! 项目地址: https://gitcode.c…...

二极管单向导电特性与应用解析

1. 二极管单向导电特性解析 二极管作为电子电路中最基础的元器件之一,其单向导电特性是理解电子电路工作原理的关键。在实际电路设计中,这个特性被广泛应用于整流、保护、开关等多种场景。 1.1 基本导电特性 当二极管正向偏置时(阳极接正电…...

【FastAPI 2.0流式AI响应权威指南】:20年全栈专家亲授5步零错误配置法,错过即失配生产级部署能力

第一章:FastAPI 2.0流式AI响应的核心演进与生产价值FastAPI 2.0 将原生流式响应能力从实验性支持升级为一级公民特性,彻底重构了 AI 应用的实时交互范式。其核心在于对 StreamingResponse 的深度集成与异步 I/O 调度优化,允许开发者以声明式方…...

从漏洞到落地:OpenSSH 10.3 完整攻略(一文读懂本次更新的核心变革、行业影响与落地指南)

作为全球应用最广泛的SSH协议开源实现,OpenSSH是互联网远程访问基础设施的核心基石——从全球顶级云厂商的百万级服务器集群,到企业内网的网络设备、嵌入式终端,再到开发者的日常远程调试,几乎所有加密远程访问场景都依赖其构建安…...

UDS寻址模式实战解析:物理与功能寻址下的服务器应答逻辑与NRC策略

1. UDS寻址模式基础概念 在汽车电子诊断领域,UDS(Unified Diagnostic Services)协议就像医生和病人之间的对话语言。想象一下,当你的爱车"生病"时,诊断工程师就是医生,而ECU(电子控制…...

S2-Pro Java项目开发实战:SpringBoot微服务集成AI能力

S2-Pro Java项目开发实战:SpringBoot微服务集成AI能力 1. 企业级Java项目如何拥抱AI能力 最近两年,AI技术在企业应用中的渗透率显著提升。作为Java开发者,我们经常面临这样的需求:如何在现有SpringBoot微服务架构中快速集成AI能…...

Pixel Dream Workshop效果展示:像素角色动作帧序列生成演示

Pixel Dream Workshop效果展示:像素角色动作帧序列生成演示 1. 像素艺术的新纪元 在数字艺术创作领域,像素艺术正经历着前所未有的复兴。Pixel Dream Workshop作为新一代像素艺术生成工具,将传统像素美学与现代AI技术完美融合,为…...

告别Flask和Django!用FastAPI + Pydantic 5分钟搞定带自动验证的用户注册API

5分钟用FastAPIPydantic构建带智能验证的用户注册系统 还在为Flask中冗长的数据验证逻辑头疼?或是被Django表单的复杂性困扰?现代Python开发早已进化到"声明即验证"的新范式。今天我们将彻底告别手动编写if username and len(password)>8的…...

基于QtDataVisualization的3D点云动态可视化实现

1. 从零搭建3D点云可视化环境 第一次接触QtDataVisualization模块时,我被它简洁的API和强大的3D渲染能力惊艳到了。这个模块就像是给C开发者准备的一套乐高积木,只需要几块基础组件就能搭建出专业级的3D可视化应用。下面我就带大家一步步搭建开发环境&am…...

PCD231 B101

ABB PCD231 B101 控制器是 ABB 公司生产的一款高性能励磁控制器模块,专为同步发电机和异步发电机的励磁系统设计,属于 ABB PCD 系列励磁控制器模块的一员。以下是关于该控制器的详细介绍:一、核心功能励磁控制:通过精确控制励磁机…...

从显微图像到仿真模型:芯片逆向工程版图提取全流程实战解析

1. 芯片逆向工程入门:从显微图像开始 第一次接触芯片逆向工程时,我盯着显微镜下的芯片图像完全摸不着头脑。那些五彩斑斓的图层就像抽象画,直到导师告诉我这其实是现代集成电路的"身份证照片"。芯片逆向工程的核心,就是…...

python批量压缩解压文件

import os import zipfile from pathlib import Path# # 1. 批量解压所有 zip 文件 # def batch_unzip(zip_folder, save_folder):"""批量解压文件夹里所有 .zip 文件zip_folder: 存放压缩包的文件夹save_folder: 解压到哪里"""# 创建输出文件…...

ESP32开发者必看:5分钟搞定littlefs镜像bin文件制作(附分区表配置技巧)

ESP32开发者必看:5分钟搞定littlefs镜像bin文件制作(附分区表配置技巧) 在ESP32开发中,文件系统管理一直是个绕不开的话题。最近接手一个物联网项目,需要在设备上存储大量配置文件和历史数据,传统的SPIFFS虽…...

Nature Reviews Genetics 基因调控网络:从相关模型到因果解释

基因调控网络:从相关模型到因果解释 Gene regulatory networks: from correlative models to causal explanations 摘要 基因调控网络解释了基因组如何控制细胞行为和组织形态建成,它将分子机制与功能输出连接起来。如今,单细胞技术以前所未有…...

工业显示屏选购要点,接口兼容与长期稳定测试

采购设备用串口屏这些年,我经常要和各种品牌打交道。今天不谈那些华丽的宣传语,就用实际工作中的观察,聊聊恒域威这个品牌的显示屏在适配方面的一些特点,希望能给同行一些参考。从硬件接口到工作环境选串口屏,首先要看…...