【selenium】自动化使用 chrome 的 user-data-dir

jwensh@2023.12.18

文章目录

背景

用户数据目录包含配置文件数据,例如历史记录、书签和 cookie,以及其他每次安装的本地状态。

每个配置文件都是用户数据目录中的一个子目录(通常为Default)。

我们在使用 selenium 进行 chrome 操作自动化的时候,有时候会用到 extends 插件,也就是

java 复制代码
ChromeOptions options = new ChromeOptions();
options.addArguments(String.format("--user-data-dir=%s", userDataDir));

我们需要了解的内容

当前位置

要确定正在运行的 Chrome 实例的用户数据目录:

  1. 浏览器输入 chrome://version
  2. 查找 Profile Path 字段。这给出了配置文件目录的路径。
  3. 用户数据目录是配置文件目录的父目录。

示例(Windows):

  • [配置文件路径] C:\Users\Alice\AppData\Local\Google\Chrome\User Data\Default
  • [用户数据目录] C:\Users\Alice\AppData\Local\Google\Chrome\User Data

默认位置

用户数据目录的默认位置由 chrome::GetDefaultUserDataDirectory 计算得出。

一般来说,它的变化取决于

  • 操作系统平台,
  • 品牌推广(Chrome 与 Chromium,基于 is_chrome_branded GN 参数),以及
  • 发布渠道(稳定版/测试版/开发版/金丝雀版)。

windows

默认位置位于本地应用程序数据文件夹中:

  • [Chrome] %LOCALAPPDATA%\Google\Chrome\User Data
  • [Chrome Canary] %LOCALAPPDATA%\Google\Chrome SxS\User Data
  • [Chromium] %LOCALAPPDATA%\Chromium\User Data

Mac OS X

默认位置位于 Application Support 文件夹中:

  • [Chrome] ~/Library/Application Support/Google/Chrome
  • [Chrome Canary] ~/Library/Application Support/Google/Chrome Canary
  • [Chromium] ~/Library/Application Support/Chromium

Linux

默认位置位于 ~/.config

  • [Chrome Stable] ~/.config/google-chrome
  • [Chrome Beta] ~/.config/google-chrome-beta
  • [Chrome Dev] ~/.config/google-chrome-unstable
  • [Chromium] ~/.config/chromium

(beta 和 dev 通道后缀由 $CHROME_VERSION_EXTRA 确定,由 启动包装器脚本传递.)

默认位置的 ~/.config 部分可以被 $CHROME_CONFIG_HOME(自 M61 起)或 $XDG_CONFIG_HOME 覆盖。

请注意,$XDG_CONFIG_HOME 会影响所有符合 XDG 基本目录规范 的应用程序,而 $CHROME_CONFIG_HOME 特定于 Chrome 和 Chromium。

Chrome操作系统

默认位置是:/home/chronos

Android

默认位置来自 Context.getDir 并且特定于应用。

例子:/data/user/0/com.android.chrome/app_chrome

iOS系统

默认位置位于应用程序沙箱中的应用程序支持目录内。

  • [Chrome] Library/Application Support/Google/Chrome
  • [Chromium] Library/Application Support/Chromium

覆盖用户数据目录

命令行

在大多数平台上,可以通过将 --user-data-dir 命令行标志传递给 Chrome 二进制文件来覆盖用户数据目录。

覆盖发生在 chrome/app/chrome_main_delegate.cc 中。未使用该文件构建的平台可能未实现覆盖。 iOS 不支持通过命令行覆盖用户数据目录。

例子:

  • [Windows] chrome.exe --user-data-dir=c:\foo
  • [Linux] google-chrome --user-data-dir=/path/to/foo

环境(Linux)

在 Linux 上,还可以使用 $CHROME_USER_DATA_DIR 环境变量覆盖用户数据目录。

如果两者都存在,--user-data-dir 标志优先。

编写 AppleScript 包装器 (Mac OS X)

在 Mac OS X 上,您可以创建一个使用自定义运行 Chrome 的应用程序 --user-data-dir

  1. 打开应用程序>公用事业>脚本编辑器。
  2. 进入:
shell 复制代码
set chrome to "\"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome\""
set userdatadir to "\"$HOME/Library/Application Support/Google/Chrome Alt\""
do shell script chrome & " --user-data-dir=" & userdatadir & " > /dev/null 2>&1 &"
  1. 根据需要修改您的安装路径、Chrome 与 Chromium 以及所需的用户数据目录。
  2. 将脚本保存在应用程序目录中,文件格式为"Application"。
  3. 关闭脚本编辑器,找到新创建的应用程序,然后运行它。这将打开一个指向您的新配置文件的 Chrome 实例。

如果需要,您可以为该应用程序指定与 Chrome 相同的图标:

  1. 选择 Google Chrome 应用程序并选择"文件">"获取信息。
  2. 选择信息对话框左上角的图标。您将在图标周围看到蓝色突出显示。
  3. 按 ⌘C 复制图标。
  4. 打开新应用程序的信息对话框,然后选择左上角的图标。
  5. 按 ⌘V 粘贴复制的图标。

用户缓存目录

在 Windows 和 ChromeOS 上,用户缓存目录与配置文件目录相同。 (配置文件目录位于用户数据目录内。)

在 Mac OS X 和 iOS 上,用户缓存目录源自配置文件目录,如下所示:

  1. 如果 Library/Application Support 是配置文件目录的祖先,则用户缓存目录为 Library/Caches 加上 Application Support 到配置文件目录。
  2. 否则,用户缓存目录与配置文件目录相同。

Mac OS X :

  • [用户数据目录] ~/Library/Application Support/Google/Chrome
  • [个人资料目录] ~/Library/Application Support/Google/Chrome/Default
  • [用户缓存目录] ~/Library/Caches/Google/Chrome/Default

在 Linux 上,用户缓存目录源自配置文件目录,如下所示:

  1. 确定系统配置目录。这是 ~/.config,除非被 $XDG_CONFIG_HOME 覆盖。 (此步骤忽略 $CHROME_CONFIG_HOME。)
  2. 确定系统缓存目录。这是 ~/.cache,除非被 $XDG_CACHE_HOME 覆盖。
  3. 如果系统配置目录是配置文件目录的祖先,则用户缓存目录是系统缓存目录加上从系统配置目录到配置文件目录的相对路径。
  4. 否则,用户缓存目录与配置文件目录相同。

Linux:

[用户数据目录] ~/.config/google-chrome

[个人资料目录] ~/.config/google-chrome/Default

[用户缓存目录] ~/.cache/google-chrome/Default

在 Android 上,用户缓存目录来自 Context.getCacheDir

https://chromium.googlesource.com/chromium/src/+/master/docs/user_data_dir.md

相关推荐
yaosheng_VALVE7 小时前
稀硫酸介质中 V 型球阀的材质选择与选型要点-耀圣
运维·spring cloud·自动化·intellij-idea·材质·1024程序员节
幸运的星竹8 小时前
使用pytest+openpyxl做接口自动化遇到的问题
python·自动化·pytest
测试界的酸菜鱼14 小时前
使用 Python + Vue 搭建自动化平台的核心要点
vue.js·python·自动化
IT-民工2111014 小时前
Ansible剧本检测Windows防火墙状态
linux·运维·windows·自动化·ansible
qq_49244844614 小时前
selenium 控制内嵌table滚动条的方法
selenium·测试工具
卤吓唬晤14 小时前
项目设计与验收
运维·笔记·学习·自动化
熊的猫15 小时前
ES6 中 Map 和 Set
前端·javascript·vue.js·chrome·webpack·node.js·es6
爱搞技术的猫猫16 小时前
实现API接口的自动化
大数据·运维·数据库·性能优化·自动化·产品经理·1024程序员节
wydxry16 小时前
Ubuntu杀死指定进程
linux·chrome·ubuntu
勤奋的凯尔森同学18 小时前
ubuntu22.04上手指南(更新阿里源、安装ssh、安装chrome、设置固定IP、安装搜狗输入法)
chrome·tcp/ip·ssh·ubuntu22.04·搜狗输入法·ubuntu24.04