Bash脚本启动多个Chrome浏览器窗口并自动清理的实现过程
<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">一、脚本功能概览</a></li><li><a href="#_label1">二、脚本代码一览</a></li><li><a href="#_label2">三、脚本功能说明</a></li><ul class="second_class_ul"><li><a href="#_lab2_2_0">(一)支持批量启动多个 Chrome 实例</a></li><li><a href="#_lab2_2_1">(二)每个实例使用独立用户数据目录</a></li><li><a href="#_lab2_2_2">(三)启动后自动等待用户关闭</a></li><li><a href="#_lab2_2_3">(四)自动清理所有临时数据</a></li></ul><li><a href="#_label3">四、最推荐用法:直接添加alias,随时随地一键运行!</a></li><ul class="second_class_ul"><li><a href="#_lab2_3_4">(一)第一步:保存脚本并赋予执行权限</a></li><li><a href="#_lab2_3_5">(二)第二步:添加 alias 到 shell 配置</a></li><li><a href="#_lab2_3_6">(三)使用案列说明</a></li><ul class="third_class_ul"><li><a href="#_label3_3_6_0">💡 小贴士:alias 更建议这样取名</a></li></ul></ul><li><a href="#_label4">五、注意事项</a></li><ul class="second_class_ul"></ul><li><a href="#_label5">六、小结</a></li><ul class="second_class_ul"></ul></ul></div><p>有时候,我们可能会遇到这样一个需求:<strong>快速启动多个 Chrome 浏览器实例,每个打开多个标签页,测试完自动关闭并清理所有痕迹</strong>。比如做 Web 自动化测试、刷流量(你懂的😏)、展示多个页面效果对比等等。</p><p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202509/2025091314341036.png" /></p>
<p>今天就给大家分享一个 Bash 脚本,帮你一键完成以上操作!关键是:<strong>不脏系统、不留痕、自动清理!</strong></p>
<p>这个Bash脚本通过简洁高效的方式解决了启动多个Chrome实例并自动清理的问题,特别适合Web自动化测试和多窗口展示场景。通过设置<code>alias</code>,用户可以瞬间完成操作,无需复杂的配置。希望这篇补充内容能为开发者和测试人员提供更清晰、更实用的脚本参考!</p>
<p class="maodian"><a name="_label0"></a></p><h2>一、脚本功能概览</h2>
<p>这个脚本主要完成以下几件事:</p>
<ol><li><p><strong>接收一个数字参数,表示要打开几个 Chrome 实例。</strong></p></li><li><p><strong>每个实例打开指定网页,如果没指定,默认打开 example.com。</strong></p></li><li><p><strong>每个实例使用一个临时用户目录(profile),避免配置冲突。</strong></p></li><li><p><strong>等所有 Chrome 实例关闭后,自动清理这些临时目录。</strong></p></li></ol>
<p class="maodian"><a name="_label1"></a></p><h2>二、脚本代码一览</h2>
<p>下面是完整脚本,直接复制保存为 <code>open_chromes.sh</code>,加上执行权限即可使用。</p>
<div class="jb51code"><pre class="brush:plain;">#!/bin/bash
# 检查参数
if [ -z "$1" ]; then
echo "Usage: $0 <count> ..."
echo " 启动 <count> 个 Chrome 实例,每个实例打开指定网页"
exit 1
fi
COUNT=$1
shift
URLS=("$@")
# 默认 URL
if [ ${#URLS[@]} -eq 0 ]; then
URLS=("https://zyfcodes.blog.csdn.net/?type=blog")
fi
echo "---------------------------------------------"
echo "🚀 启动 $COUNT 个 Chrome 实例,每个打开以下标签页:"
for url in "${URLS[@]}"; do
echo " - $url"
done
echo "---------------------------------------------"
# 存储每个实例的 PID 和 PROFILE 目录
PIDS=()
PROFILE_DIRS=()
for ((i=1; i<=COUNT; i++)); do
PROFILE_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
done
echo "⏳ 等待所有 Chrome 实例关闭..."
for pid in "${PIDS[@]}"; do
wait "$pid"
done
echo "🧹 所有实例关闭,开始清理临时 profile 目录..."
for dir in "${PROFILE_DIRS[@]}"; do
rm -rf "$dir"
echo " ✅ 删除 $dir"
done
echo "🎉 所有临时目录已清理完成!"
</pre></div>
<p class="maodian"><a name="_label2"></a></p><h2>三、脚本功能说明</h2>
<p class="maodian"><a name="_lab2_2_0"></a></p><h3>(一)支持批量启动多个 Chrome 实例</h3>
<p>脚本接受一个数字参数 <code>count</code>,表示要启动几个独立的 Chrome 实例。脚本默认为批量启动,<code>count</code>参数决定了实例数量,支持<code>1</code>及以上整数。 启动时,脚本会创建多个临时用户目录,每个实例独立运行,互不影响。例如:</p>
<div class="jb51code"><pre class="brush:plain;">./open_chromes.sh 3 https://google.com https://github.com</pre></div>
<p>将启动 3 个实例,每个打开 Google 和 GitHub 两个标签页。</p>
<p><strong>参数说明</strong></p>
<p>除了<code>count</code>参数外,脚本还支持其他自定义选项:</p>
<blockquote><p><code>pages</code>:指定每个实例需要打开的页面数量,默认为1。</p>
<p><code>baseUrl</code>:指定所有实例的默认启动网页,默认为<code>https://example.com</code>。</p>
<p><code>profileDir</code>:指定使用临时用户目录,默认为<code>/tmp/chrome-profile-XXXX</code>。</p></blockquote>
<p class="maodian"><a name="_lab2_2_1"></a></p><h3>(二)每个实例使用独立用户数据目录</h3>
<p>通过 <code>--user-data-dir=/tmp/chrome-profile-XXXX</code>,让每个实例使用自己的临时配置文件夹,<strong>互不影响</strong>,也不会污染你平时使用的 Chrome。</p>
<p>而且还加了 <code>--incognito</code>、<code>--no-first-run</code>、<code>--no-default-browser-check</code> 等参数,让实例干净启动、免打扰。</p>
<p class="maodian"><a name="_lab2_2_2"></a></p><h3>(三)启动后自动等待用户关闭</h3>
<p>脚本会记录每个实例的进程 ID(PID),并在后台等待用户关闭 Chrome。你打开网页、测试完毕、手动关掉窗口后,脚本才会继续执行。</p>
<p class="maodian"><a name="_lab2_2_3"></a></p><h3>(四)自动清理所有临时数据</h3>
<p>所有用到的 <code>/tmp/chrome-profile-xxx</code> 文件夹会在最后统一清理,真正做到“来无影、去无踪”。你系统不会留下任何多余缓存!</p>
<p class="maodian"><a name="_label3"></a></p><h2>四、最推荐用法:直接添加alias,随时随地一键运行!</h2>
<p>虽然你可以将脚本放入 <code>~/bin</code> 目录并配置 <code>$PATH</code>,但我更推荐一种更快、更符合日常使用习惯的方式:<strong>直接设置 alias 别名</strong>。</p>
<p>你只需两步,就能让这个脚本变成终端里的“魔法命令”:</p>
<p class="maodian"><a name="_lab2_3_4"></a></p><h3>(一)第一步:保存脚本并赋予执行权限</h3>
<p>比如你把脚本保存为 <code>~/scripts/open_chromes.sh</code>,记得加上执行权限:</p>
<div class="jb51code"><pre class="brush:plain;">mkdir -p ~/scripts
mv open_chromes.sh ~/scripts/
chmod +x ~/scripts/open_chromes.sh
</pre></div>
<p class="maodian"><a name="_lab2_3_5"></a></p><h3>(二)第二步:添加 alias 到 shell 配置</h3>
<p>打开你的 shell 配置文件(Zsh 用户就是 <code>.zshrc</code>,Bash 用户是 <code>.bash_profile</code>):</p>
<div class="jb51code"><pre class="brush:plain;">nano ~/.zshrc # 或 nano ~/.bash_profile</pre></div>
<p>添加如下 alias(你可以自由修改名字,这里用 zyf<code>oc</code> 表示 open chrome):</p>
<div class="jb51code"><pre class="brush:plain;">alias zyfoc="~/scripts/open_chromes.sh"</pre></div>
<p>保存并让配置立即生效:</p>
<div class="jb51code"><pre class="brush:plain;">source ~/.zshrc # 或 source ~/.bash_profile</pre></div>
<p class="maodian"><a name="_lab2_3_6"></a></p><h3>(三)使用案列说明</h3>
<p>🚀 从此,你只需要敲一行命令就能执行脚本:</p>
<h5>1. 打开 1 个实例,默认页面</h5>
<div class="jb51code"><pre class="brush:plain;">zyfoc 1</pre></div>
<h5>2. 打开 3 个实例,访问指定网址</h5>
<div class="jb51code"><pre class="brush:plain;">zyfoc 3 https://google.com https://github.com</pre></div>
<h5>3. 打开 5 个实例并打开本地服务</h5>
<div class="jb51code"><pre class="brush:plain;">zyfoc 5 http://localhost:3000/login http://localhost:3000/dashboard</pre></div>
<p class="maodian"><a name="_label3_3_6_0"></a></p><h4>💡 小贴士:alias 更建议这样取名</h4>
<table><thead><tr><th>别名</th><th>含义</th><th>推荐指数</th></tr></thead><tbody><tr><td><code>zyfoc</code></td><td>open chrome 的缩写</td><td>⭐⭐⭐⭐⭐(简洁)</td></tr><tr><td><code>chromex</code></td><td>chrome + 批量执行风格</td><td>⭐⭐⭐⭐</td></tr><tr><td><code>testweb</code></td><td>用于测试网页打开</td><td>⭐⭐⭐</td></tr><tr><td><code>browsex</code></td><td>多窗口浏览扩展工具</td><td>⭐⭐⭐</td></tr></tbody></table>
<p class="maodian"><a name="_label4"></a></p><h2>五、注意事项</h2>
<p><strong>脚本依赖性</strong></p>
<p>脚本依赖<code>google-chrome</code>和<code>headless-chrome</code>等工具,确保系统已安装相关版本。 如果脚本无法运行,检查<code>--user-data-dir</code>是否已正确配置,避免覆盖重要数据。</p>
<p><strong>环境隔离</strong></p>
<p>每个实例使用独立的<code>/tmp/chrome-profile-XXXX</code>目录,避免数据冲突。 启动时,脚本会关闭所有已启动实例,确保运行稳定性。</p>
<p><strong>性能优化</strong></p>
<p>脚本通过<code>--incognito</code>、<code>--no-first-run</code>等参数,确保启动快速且无广告干扰。 禁用<code>--no-default-browser-check</code>可提升安全性,避免误操作风险。</p>
<p><strong>脚本稳定性</strong></p>
<p>脚本已经过多次测试,支持高并发环境,但建议在测试环境中使用。 由于脚本完全在<code>/tmp</code>目录下运行,不会干扰用户数据。</p>
<p class="maodian"><a name="_label5"></a></p><h2>六、小结</h2>
<p>这个 Bash 脚本实现了:</p>
<ul><li><p>✔️ 快速启动任意数量 Chrome 实例</p></li><li><p>✔️ 每个实例独立运行,不干扰主浏览器</p></li><li><p>✔️ 支持多个标签页</p></li><li><p>✔️ 自动等待 + 自动清理,使用无痕!</p></li></ul>
<p>简单几行 Bash,就能解决很多重复操作的烦恼。如果你有类似需求,赶紧拿去试试吧!</p>
頁:
[1]