【Excel VBA×Selenium】「user data directory is already in use」エラーの原因と対処法

みなさんこんにちは。

Excel VBAからSeleniumを使用してChromeを起動する際、普段使用しているChromeのプロファイルを指定したところ、突然ブラウザが起動できなくなった経験をしたことがある方も多いかと思います。

特に、--user-data-dirを指定してログイン情報やCookieを引き継いでいる場合に、「user data directory is already in use」というエラーが表示されることがあります。

このエラーは、同じユーザーデータディレクトリを別のChromeがすでに使用している場合などに発生します。

今回は、Excel VBA×Seleniumで「user data directory is already in use」エラーが発生する原因と、Chromeプロファイルを安全に分けて再発を防ぐ方法についてご紹介したいと思います。

この記事はこんな人におすすめ

  • VBA×SeleniumでChromeプロファイルを指定して起動している人
  • 「user data directory is already in use」と表示されてChromeが起動できない人
  • 普段使用しているChromeとSeleniumのChromeを分けたい人
  • ログイン状態を保持したままSeleniumを利用したい人
  • Chromeプロファイルの重複利用によるエラーを防ぎたい人

今回発生するエラー

Chromeのユーザーデータディレクトリを指定してSeleniumから起動すると、環境によって次のようなエラーが表示されることがあります。

session not created: probably user data directory is already in use, please specify a unique value for –user-data-dir argument, or don’t use –user-data-dir

VBAでは、SeleniumBasic側のエラーとして「SessionNotCreatedError」などが表示される場合もあります。

Excel VBA Seleniumでuser data directory is already in useエラーが発生した画面

エラーが発生する主な原因

同じuser-data-dirを別のChromeが使用している

最も分かりやすい原因は、Seleniumで指定したuser-data-dirを、すでに起動中のChromeが使用している場合です。

例えば、普段使用しているChromeのユーザーデータディレクトリをそのままSeleniumへ指定している状態で、通常のChromeも起動していると、同じデータディレクトリを同時に利用しようとしてエラーになる場合があります。

ChromeDriverの公式ドキュメントでは、カスタムプロファイルを使用する場合はuser-data-dirで専用ディレクトリを指定でき、存在しないパスを指定した場合はChromeが新しいプロファイルを作成すると説明されています。

ChromeDriver公式:Capabilities and ChromeOptions

普段使いのChromeが起動していないか確認する

まずは、Seleniumを実行する前にChromeが起動していないか確認してみてください。

画面上でChromeを閉じていても、バックグラウンドプロセスが残っている場合があります。

Windowsでは、次の手順で確認できます。

  • Ctrl + Shift + Escを押してタスクマネージャーを開く
  • 「プロセス」からGoogle Chromeを確認する
  • Seleniumで使用するプロファイルを使っているChromeが残っていないか確認する
WindowsのタスクマネージャーでGoogle Chromeのプロセスを確認した画面

業務中のChromeを強制終了すると入力途中の内容などが失われる可能性があるため、終了させる場合は必要な作業を保存してから実施してください。

エラーが発生しやすいコード例

例えば、普段使用しているChromeのユーザーデータディレクトリを直接指定している場合を考えてみます。

Sub ChromeProfileErrorSample()

    Dim driver As New Selenium.WebDriver
    Dim profilePath As String

    '========================================
    ' 普段使用しているChromeの
    ' ユーザーデータディレクトリを指定する
    '========================================
    profilePath = Environ$("LOCALAPPDATA") & _
                  "\Google\Chrome\User Data"

    '========================================
    ' Chrome起動時に使用するプロファイルを指定する
    '========================================
    driver.AddArgument "--user-data-dir=" & profilePath

    '========================================
    ' Chromeを起動する
    ' 同じUser Dataを使用するChromeが起動中の場合、
    ' エラーになる可能性がある
    '========================================
    driver.Start "chrome"

    driver.Get "https://www.google.com/"

End Sub

この方法では、普段利用しているChromeとSeleniumが同じユーザーデータディレクトリを使用することになります。

通常利用のChromeを開いたままSeleniumを実行する運用では、プロファイルの重複が起きやすくなるため注意が必要となります。

Selenium専用のプロファイルを用意する

専用フォルダーをuser-data-dirへ指定する

再発防止として分かりやすい方法は、普段使いのChromeとは別に、Selenium専用のユーザーデータディレクトリを用意することです。

例えば、次のようにローカル環境へ専用フォルダーを指定します。

Sub StartChromeWithSeleniumProfile()

    Dim driver As New Selenium.WebDriver
    Dim profilePath As String

    '========================================
    ' Selenium専用のプロファイル保存先を指定する
    ' 普段使用するChromeのUser Dataとは分離する
    '========================================
    profilePath = Environ$("LOCALAPPDATA") & _
                  "\SeleniumChromeProfile"

    '========================================
    ' Selenium専用のuser-data-dirを指定する
    ' 指定したフォルダーが存在しない場合は、
    ' Chrome起動時に新しいプロファイルが作成される
    '========================================
    driver.AddArgument "--user-data-dir=" & profilePath

    'Chromeを起動する
    driver.Start "chrome"

    '動作確認用のページを表示する
    driver.Get "https://www.google.com/"

    '========================================
    ' 動作確認後にChromeを終了する
    '========================================
    driver.Quit

End Sub

これなら、普段使用しているChromeのプロファイルとSelenium用プロファイルを分離できます。

ChromeDriverの公式ドキュメントでも、user-data-dirへ新しいディレクトリを指定してカスタムプロファイルを作成する方法が案内されています。

Excel VBA Seleniumで指定したChromeプロファイルフォルダーの内容

ログイン状態を専用プロファイルへ保存する

ログイン状態を保持したい場合は、最初にSelenium専用プロファイルでChromeを起動し、そのChrome上で対象サイトへログインします。

ログイン情報やCookieなどがプロファイル側へ保存されるサイトであれば、次回以降も同じuser-data-dirを使用することで、ログイン状態を引き継げる場合があります。

ただし、サイト側のセキュリティ設定やセッション有効期限によっては、再ログインや多要素認証が必要になることもあります。

パスワードや認証情報をコードへ直接書き込むのではなく、サイトの利用規約や組織のセキュリティルールも確認したうえで利用してください。

現在使用しているプロファイルを確認する方法

Chromeがどのユーザーデータディレクトリを使用しているのか確認したい場合は、Chromeのアドレスバーへ次の文字列を入力します。

chrome://version

表示された画面の「プロフィール パス」などを確認すると、現在Chromeが使用しているプロファイルの場所を確認できます。

Chromeのchrome version画面でSelenium用プロフィールパスを確認した画面

普段使いのChromeとSelenium用Chromeが同じ場所になっていないか確認するときにも便利です。

再発を防ぐためのポイント

  • 普段使用するChromeのUser DataをSelenium用として共用しない
  • Selenium専用のuser-data-dirを作成する
  • 同じ専用プロファイルを複数のSelenium処理から同時に起動しない
  • 処理終了時はdriver.QuitでChromeを終了する
  • 異常終了した場合はChromeプロセスが残っていないか確認する

特に、複数のExcelファイルから同じSelenium用プロファイルを同時に起動すると、専用フォルダーを作っていても同じ問題が発生する可能性があります。

「専用プロファイルにしたから必ず大丈夫」ではなく、1つのuser-data-dirを同時に複数のChromeから使用しないことがポイントとなります。

起動済みChromeを操作したい場合

今回の記事は、SeleniumからChromeを新規起動するときにuser-data-dirが重複する問題について解説しています。

一方で、すでに起動しているChromeへSeleniumから接続して操作したい場合は、リモートデバッグを使用する方法もあります。

起動済みChromeを操作する方法については、過去の記事で詳しくご紹介しています。

最後に

いかがでしたでしょうか。

今回は、Excel VBA×Seleniumで「user data directory is already in use」エラーが発生する原因と対処法についてご紹介しました。

このエラーが発生した場合は、まず指定しているuser-data-dirを別のChromeが使用していないか確認してみてください。

普段使いのChromeプロファイルを直接共有するのではなく、Selenium専用のユーザーデータディレクトリを用意しておくと、プロファイルの競合を避けやすくなります。

また、同じSelenium専用プロファイルを複数の処理から同時に利用しないことも大切です。

Chromeプロファイルを指定したときに起動エラーが発生している方に、少しでも参考になれば幸いです。

開発依頼について

ココナラでWebスクレイピング開発サービスを出品しております。

自分で開発をしようと思ったけど、VBAでのネット記事が少なく困っている方も多いかと思います。

そんな方はいつでもお気軽にご相談ください。

また、本ブログからご依頼いただいた方については割引特典がございますので、

ご不明点と合わせてメッセージをいただけると幸いです。

Excelにてブラウザ操作自動化ツールを作成します その作業、webスクレイピングを使って自動化しましょう!

Webスクレイピング以外にもWebアプリの開発サービスも出品しております。

こちらについても、本ブログからご依頼いただいた方については割引特典がございますので、

お気軽にご相談ください。

スモールスケールのWebアプリ開発します 先ずはスモールスケールのWebアプリから始めませんか?

ご興味がある方はこちら!!

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

CAPTCHA