#はじめに
初めてQiitaで記事を書かせていただきます。最近プログラミングの勉強を始めた者です。
前置きはさておき、やりたかったのは**SeleniumでChromeを動かすときに、特定のユーザープロファイルを指定したい。**です。
が、私の環境だと以下のようなエラーが発生し、Chromeを閉じてからでないとSelenium経由では起動してくれませんでした。
"invalid argument: user data directory is already in use, please specify a unique value for --user-data-dir argument, or don't use --user-data-dir"
どうやら今起動しているChromeが参照しているユーザプロファイルがあるフォルダと同じフォルダをSeleniumで指定することはできないようです。
このままでは、SeleniumからChromeを起動する度に、いつも使っているChromeを閉じなければなりません。めんどくさいです
そこで、ユーザプロファイルが置かれるフォルダを新しく作って、そちらを参照してみるとうまくいきました。
#環境
- Windows 10 Home
- Selenium(C#用) v3.14
- Chrome v75
- Powershell v5.1
私はPowershellを使っていますが、記事の内容自体はChromeのプロファイルの指定の方法なので言語は問わないと思います。
#通常とは別のユーザープロファイルを置くフォルダを作る
Chromeを起動するときにオプションで任意のフォルダを指定してやれば、そのフォルダがユーザープロファイルを置くフォルダuser data directory
になってくれるようです。
起動時のオプションとして--user-data-dir=
の後に適当なフォルダを指定するだけです。
例えば以下のようなコマンドになります。「ファイル名を指定して実行」で実行してやればOKです。
コマンドを実行するとChromeが起動するので、Selenium用のユーザを作成してやります。
ユーザの作成方法はこちら(Chrome公式のヘルプ)に手順があります。
ユーザを作成すると、指定したフォルダ内にProfile 1
というフォルダができるので、そのフォルダをSeleniumでのChrome起動時にオプションで指定してやります。
※Profile 1
となるのは、そのフォルダをオプションで指定して初めてユーザを作成した場合の名前です。複数ユーザを作った場合は末尾の番号が増えていきます。
#ユーザプロファイルを指定してSeleniumからChromeを起動する
Powershellで書くとこんな感じなりました。
$chromeDriverDirPath = "C:\\Learn\tools\\selenium\\chromedriver.exe"
$options = New-Object OpenQA.Selenium.Chrome.ChromeOptions
#プロファイルを指定
$PROFILE_PATH = "C:\\Learn\\tools\\test"
$options.AddArgument("--user-data-dir=$PROFILE_PATH")
$options.AddArgument("--profile-directory=Profile 1")
#プロファイルを指定してchrome起動
$chromeDriver = New-Object OpenQA.Selenium.Chrome.ChromeDriver($chromeDriverDirPath, $options)
Chromeの起動オプションについては詳細な解説をしていただいている記事があるので割愛します。
参考:Python + Selenium + Chrome で自動ログインいくつか
実行して、右上に指定したユーザのアイコンが表示されていたので成功です。
起動後に、Webサービスなどに一度ログインしておけば、次回からはログインをスキップできたりして、手間が省けます。やったー