一键启动多个 Chrome 实例并自动清理的 Bash 脚本分享!
目录
一、📦 脚本功能概览
二、📜 脚本代码一览
三、🔍 脚本功能说明
(一)✅ 支持批量启动多个 Chrome 实例
(二)✅ 每个实例使用独立用户数据目录
(三)✅ 启动后自动等待用户关闭
(四)✅自动清理所有临时数据
四、🛠️ 最推荐用法:直接添加 alias,随时随地一键运行!
(一)✅ 第一步:保存脚本并赋予执行权限
(二)✅ 第二步:添加 alias 到 shell 配置
(三)使用案列说明
1. 打开 1 个实例,默认页面
2. 打开 3 个实例,访问指定网址
3. 打开 5 个实例并打开本地服务
💡 小贴士:alias 更建议这样取名
五、🎯 小结
干货分享,感谢您的阅读!!!
有时候,我们可能会遇到这样一个需求:快速启动多个 Chrome 浏览器实例,每个打开多个标签页,测试完自动关闭并清理所有痕迹。比如做 Web 自动化测试、刷流量(你懂的😏)、展示多个页面效果对比等等。
今天就给大家分享一个 Bash 脚本,帮你一键完成以上操作!关键是:不脏系统、不留痕、自动清理!
一、📦 脚本功能概览
这个脚本主要完成以下几件事:
-
接收一个数字参数,表示要打开几个 Chrome 实例。
-
每个实例打开指定网页,如果没指定,默认打开 example.com。
-
每个实例使用一个临时用户目录(profile),避免配置冲突。
-
等所有 Chrome 实例关闭后,自动清理这些临时目录。
二、📜 脚本代码一览
下面是完整脚本,直接复制保存为 open_chromes.sh
,加上执行权限即可使用。
#!/bin/bash# 检查参数
if [ -z "$1" ]; thenecho "Usage: $0 <count> [url1] [url2] ..."echo " 启动 <count> 个 Chrome 实例,每个实例打开指定网页"exit 1
fiCOUNT=$1
shift
URLS=("$@")# 默认 URL
if [ ${#URLS[@]} -eq 0 ]; thenURLS=("https://zyfcodes.blog.csdn.net/?type=blog")
fiecho "---------------------------------------------"
echo "🚀 启动 $COUNT 个 Chrome 实例,每个打开以下标签页:"
for url in "${URLS[@]}"; doecho " - $url"
done
echo "---------------------------------------------"# 存储每个实例的 PID 和 PROFILE 目录
PIDS=()
PROFILE_DIRS=()for ((i=1; i<=COUNT; i++)); doPROFILE_DIR="/tmp/chrome-profile-$RANDOM"PROFILE_DIRS+=("$PROFILE_DIR")echo "[$i/$COUNT] 启动实例,Profile: $PROFILE_DIR"/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \--incognito \--no-first-run \--no-default-browser-check \--user-data-dir="$PROFILE_DIR" \"${URLS[@]}" &PIDS+=($!)sleep 0.2
doneecho "⏳ 等待所有 Chrome 实例关闭..."
for pid in "${PIDS[@]}"; dowait "$pid"
doneecho "🧹 所有实例关闭,开始清理临时 profile 目录..."
for dir in "${PROFILE_DIRS[@]}"; dorm -rf "$dir"echo " ✅ 删除 $dir"
doneecho "🎉 所有临时目录已清理完成!"
三、🔍 脚本功能说明
(一)✅ 支持批量启动多个 Chrome 实例
脚本接受一个数字参数 count
,表示要启动几个独立的 Chrome 实例。例如:
./open_chromes.sh 3 https://google.com https://github.com
将启动 3 个实例,每个打开 Google 和 GitHub 两个标签页。
(二)✅ 每个实例使用独立用户数据目录
通过 --user-data-dir=/tmp/chrome-profile-XXXX
,让每个实例使用自己的临时配置文件夹,互不影响,也不会污染你平时使用的 Chrome。
而且还加了 --incognito
、--no-first-run
、--no-default-browser-check
等参数,让实例干净启动、免打扰。
(三)✅ 启动后自动等待用户关闭
脚本会记录每个实例的进程 ID(PID),并在后台等待用户关闭 Chrome。你打开网页、测试完毕、手动关掉窗口后,脚本才会继续执行。
(四)✅自动清理所有临时数据
所有用到的 /tmp/chrome-profile-xxx
文件夹会在最后统一清理,真正做到“来无影、去无踪”。你系统不会留下任何多余缓存!
四、🛠️ 最推荐用法:直接添加 alias
,随时随地一键运行!
虽然你可以将脚本放入 ~/bin
目录并配置 $PATH
,但我更推荐一种更快、更符合日常使用习惯的方式:直接设置 alias 别名。
你只需两步,就能让这个脚本变成终端里的“魔法命令”:
(一)✅ 第一步:保存脚本并赋予执行权限
比如你把脚本保存为 ~/scripts/open_chromes.sh
,记得加上执行权限:
mkdir -p ~/scripts
mv open_chromes.sh ~/scripts/
chmod +x ~/scripts/open_chromes.sh
(二)✅ 第二步:添加 alias 到 shell 配置
打开你的 shell 配置文件(Zsh 用户就是 .zshrc
,Bash 用户是 .bash_profile
):
nano ~/.zshrc # 或 nano ~/.bash_profile
添加如下 alias(你可以自由修改名字,这里用 zyfoc
表示 open chrome):
alias zyfoc="~/scripts/open_chromes.sh"
保存并让配置立即生效:
source ~/.zshrc # 或 source ~/.bash_profile
(三)使用案列说明
🚀 从此,你只需要敲一行命令就能执行脚本:
1. 打开 1 个实例,默认页面
zyfoc 1
2. 打开 3 个实例,访问指定网址
zyfoc 3 https://google.com https://github.com
3. 打开 5 个实例并打开本地服务
zyfoc 5 http://localhost:3000/login http://localhost:3000/dashboard
💡 小贴士:alias 更建议这样取名
别名 | 含义 | 推荐指数 |
---|---|---|
zyfoc | open chrome 的缩写 | ⭐⭐⭐⭐⭐(简洁) |
chromex | chrome + 批量执行风格 | ⭐⭐⭐⭐ |
testweb | 用于测试网页打开 | ⭐⭐⭐ |
browsex | 多窗口浏览扩展工具 | ⭐⭐⭐ |
五、🎯 小结
这个 Bash 脚本实现了:
-
✔️ 快速启动任意数量 Chrome 实例
-
✔️ 每个实例独立运行,不干扰主浏览器
-
✔️ 支持多个标签页
-
✔️ 自动等待 + 自动清理,使用无痕!
简单几行 Bash,就能解决很多重复操作的烦恼。如果你有类似需求,赶紧拿去试试吧!
相关文章:

一键启动多个 Chrome 实例并自动清理的 Bash 脚本分享!
目录 一、📦 脚本功能概览 二、📜 脚本代码一览 三、🔍 脚本功能说明 (一)✅ 支持批量启动多个 Chrome 实例 (二)✅ 每个实例使用独立用户数据目录 (三)✅ 启动后自…...

4 月 62100 款 App 被谷歌下架!环比增长 28%
大家好,我是牢鹅!上周刚刚结束的 2025 年 Google I/O 开发者大会, Google Play 带来了一系列的更新,主要围绕提升优质 App 的"发现"、"互动"和"收入"三大核心内容。 这或许正是谷歌生态的一个侧影…...
图像分割全路线学习(结合论文)
本篇文章参考自开源大佬的文章并结合自己的思考而来,欢迎大家提出意见,论文代码同样来自开源,文中已注明 文章目录 图像分割图像分割算法分类?传统的基于CNN的分割方法缺点?FCN详解FCN改变了什么?FCN网络结构&#x…...
Go语言之定义结构体(Struct)-《Go语言实战指南》
结构体(struct)是 Go 中的一种复合数据类型,它允许你将多个不同类型的字段组合成一个类型,类似于 C 语言的结构体或面向对象语言中的类。 一、结构体的基本定义 type 结构体名 struct {字段名 字段类型... } 示例: …...

mediapipe标注视频姿态关键点(基础版加进阶版)
前言 手语视频流的识别有两种大的分类,一种是直接将视频输入进网络,一种是识别了关键点之后再进入网络。所以这篇文章我就要来讲讲如何用mediapipe对手语视频进行关键点标注。 代码 需要直接使用代码的,我就放这里了。环境自己配置一下吧&…...

PCtoLCD2002如何制作6*8字符
如何不把“等比缩放”前的打勾取消,则无法修改为对应英文字符为6*8。 取消之后就可以更改了!...

SmartPlayer与VLC播放RTMP:深度对比分析延迟、稳定性与功能
随着音视频直播技术的发展,RTMP(实时消息传输协议)成为了广泛应用于实时直播、在线教育、视频会议等领域的重要协议。为了确保优质的观看体验,RTMP播放器的选择至关重要。大牛直播SDK的SmartPlayer和VLC都是在行业中广受欢迎的播放…...

Qt QPaintEvent绘图事件painter使用指南
绘制需在paintEvent函数中实现 用图片形象理解 如果加了刷子再用笔就相当于用笔画过的区域用刷子走 防雷达: 源文件 #include "widget.h" #include "ui_widget.h" #include <QDebug> #include <QPainter> Widget::Widget(QWidget…...

伪创新-《软件方法》全流程引领AI-第1章 04
《软件方法》全流程引领AI-第1章 ABCD工作流-01 对PlantUML们的评价-《软件方法》全流程引领AI-第1章 02 AI辅助的建模步骤-《软件方法》全流程引领AI-第1章 03 第1章 ABCD工作流 1.5 警惕和揭秘伪创新 初中数学里要学习全等三角形、相似三角形、SSS、SAS……,到…...
win11如何重启
在 Windows 11 中重启电脑有多种方法,以下是其中几种常见方法: 开始菜单重启: 点击屏幕左下角的“开始”按钮(Windows 图标)。 在开始菜单中,点击“电源”图标。 选择“重启”选项。 使用快捷键…...

【iOS】 锁
iOS 锁 文章目录 iOS 锁前言线程安全锁互斥锁pthread_mutexsynchronized (互斥递归锁)synchronized问题:小结 NSLockNSRecursiveLockNSConditionNSConditionLock 自旋锁OSSpinLock(已弃用)atomicatomic修饰的属性绝对安全吗?os_unfair_lock 读写锁互斥锁和自旋锁的对比 小结使…...

uni-app学习笔记十五-vue3页面生命周期(一)
页面生命周期概览 vue3页面生命周期如下图所示: onLoad 此时页面还未显示,没有开始进入的转场动画,页面dom还不存在。 所以这里不能直接操作dom(可以修改data,因为vue框架会等待dom准备后再更新界面)&am…...
Flink核心概念小结
文章目录 前言引言数据流API基于POJO的数据流基本源流配置示例基本流接收器数据管道与ETL(提取、转换、加载)一对一映射构建面向流映射的构建键控流进行分组运算RichFlatMapFunction对于流的状态管理连接流的使用流式分析水位的基本概念和示例侧道输入的基本概念和示例Process …...

《软件工程》第 14 章 - 持续集成
在软件工程的开发流程中,持续集成是保障代码质量与开发效率的关键环节。本章将围绕持续集成的各个方面展开详细讲解,结合 Java 代码示例与可视化图表,帮助读者深入理解并实践相关知识。 14.1 持续集成概述 14.1.1 持续集成的相关概念 持续集…...
大模型 Agent 中的通用 MCP 机制详解
1. 引言 大模型(Large Language Model,LLM)技术的迅猛发展催生了一类全新的应用范式:LLM Agent(大模型 Agent)。简单来说,Agent 是基于大模型的自治智能体,它不仅能理解和生成自然语言,还能通过调用工具与环境交互,从而自主地完成复杂任务。ChatGPT 的出现让人们看到…...
Navicat 17 SQL 预览时表名异常右键表名,点击设计表->SQL预览->另存为的SQL预览时,表名都是 Untitled。
🧑💻 用户 Navicat 17 SQL 预览时表名异常右键表名,点击设计表->SQL预览->另存为的SQL预览时,表名都是 Untitled。 🧑🔧 官方技术中心 了解到您的问题,这个显示是正常的,…...

Orpheus-TTS:AI文本转语音,免费好用的TTS系统
名人说:博观而约取,厚积而薄发。——苏轼《稼说送张琥》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、Orpheus-TTS:重新定义语音合成的标准1. 什么是Orpheus-TTSÿ…...
Python爬虫实战:研究Goose框架相关技术
一、引言 随着互联网的迅速发展,网络上的信息量呈爆炸式增长。从海量的网页中提取有价值的信息成为一项重要的技术。网络爬虫作为一种自动获取网页内容的程序,在信息收集、数据挖掘、搜索引擎等领域有着广泛的应用。本文将详细介绍如何使用 Python 的 Goose 框架构建一个完整…...
webpack优化方法
以下是Webpack优化的系统性策略,涵盖构建速度、输出体积、缓存优化等多个维度,配置示例和原理分析: 一、构建速度优化 1. 缩小文件搜索范围 module.exports {resolve: {// 明确第三方模块的路径modules: [path.resolve(node_modules)],// …...

STM32 Keil工程搭建 (手动搭建)流程 2025年5月27日07:42:09
STM32 Keil工程搭建 (手动搭建)流程 觉得麻烦跳转到最底部看总配置图 1.获取官方标准外设函数库 内部结构如下: 文件夹功能分别为 图标(用不上)库函数(重点) Libraries/ ├── CMSIS/ # ARM Cortex-M Microcontroller Software Interface Standard…...
MyBatis 框架使用与 Spring 集成时的使用
MyBatis 创建项目mybatis项目,首先需要使用maven导入mybatis库 poml.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema…...

OpenGL Chan视频学习-7 Writing a Shader inOpenGL
bilibili视频链接: 【最好的OpenGL教程之一】https://www.bilibili.com/video/BV1MJ411u7Bc?p5&vd_source44b77bde056381262ee55e448b9b1973 函数网站: docs.gl 说明: 1.之后就不再整理具体函数了,网站直接翻译会更直观也会…...

顶会新方向:卡尔曼滤波+目标检测
卡尔曼虑波+目标检测创新结合,新作准确率突破100%! 一个有前景且好发论文的方向:卡尔曼滤波+目标检测! 这种创新结合,得到学术界的广泛认可,多篇成果陆续登上顶会顶刊。例如无人机竞速系统 Swift,登上nat…...
数据库相关问题
1.保留字 1.1错误案例(2025/5/27) 报错: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near condition, sell…...

一起学数据结构和算法(二)| 数组(线性结构)
数组(Array) 数组是最基础的数据结构,在内存中连续存储,支持随机访问。适用于需要频繁按索引访问元素的场景。 简介 数组是一种线性结构,将相同类型的元素存储在连续的内存空间中。每个元素通过其索引值(数…...

Linux基本指令篇 —— touch指令
touch是Linux和Unix系统中一个非常基础但实用的命令,主要用于操作文件的时间戳和创建空文件。下面我将详细介绍这个命令的用法和功能。 目录 一、基本功能 1. 创建空文件 2. 同时创建多个文件 3. 创建带有空格的文件名(需要使用引号) 二、…...

【后端高阶面经:消息队列篇】23、Kafka延迟消息:实现高并发场景下的延迟任务处理
一、延迟消息的核心价值与Kafka的局限性 在分布式系统中,延迟消息是实现异步延迟任务的核心能力,广泛应用于订单超时取消、库存自动释放、消息重试等场景。 然而,Apache Kafka作为高吞吐的分布式消息队列,原生并不支持延迟消息功能,需通过业务层或中间层逻辑实现。 1.1…...

Mac安装MongoDB数据库以及MongoDB Compass可视化连接工具
目录 一、安装 MongoDB 社区版 1、下载 MongoDB 2、配置环境变量 3、配置数据和日志目录 4、启动MongoDB服务 5、使用配置文件启动 6、验证服务运行 二、MongoDB可视化工具MongoDB Compass 一、安装 MongoDB 社区版 1、下载 MongoDB 大家可以直接在官方文档下安装Mo…...

城市地下“隐形卫士”:激光甲烷传感器如何保障燃气安全?
城市“生命线”面临的安全挑战 城市地下管网如同人体的“血管”和“神经”,承载着燃气、供水、电力、通信等重要功能,一旦发生泄漏或爆炸,将严重影响城市运行和居民安全。然而,由于管线老化、违规施工、监管困难等问题࿰…...

MySQL推出全新Hypergraph优化器,正式进军OLAP领域!
在刚刚过去的 MySQL Summit 2025 大会上,Oracle 发布了一个用于 MySQL 的全新 Hypergraph(超图)优化器,能够为复杂的多表查询生成更好的执行计划,从而优化查询性能。 这个功能目前只在 MySQL HeatWave 云数据库中提供&…...