【Python】SeleniumでGoogleに自動ログインする方法・ログインを保持する方法

Python

Seleniumを使用してGoogleにログインしようとすると、以下のような画面が表示されログインできません。

このブラウザまたはアプリは安全でない可能性があります。

そこで今回は、SeleniumでGoogleアカウントに自動ログインする方法について解説します。

なぜSelenium経由で自動ログインできないのか

はじめに、なぜSelenium経由で自動ログインできないのかをまとめます。理由はどうでもいいからとにかくログインできるようにしたいという方は、2.Seleniumで自動ログインする方法をご参照ください。

なぜSelenium経由で自動ログインできないのかというと、人間による操作だとみなされていないからです。Googleのヘルプにも「人の手でなくソフトウェアで操作されている」場合にはログインが拒否されるとあります。

参考:Googleアカウントヘルプ

どうやって人間かどうかを判断しているのか

では、どうやって人間かどうかを判断しているのかというと、「ユーザープロファイル」をもとに判断しています。

プロファイルというのは、IDやパスワード、拡張機能、その他設定などユーザー個別の情報をひとまとめにしたデータのことです。これによって、ログインするアカウントによってブックマークや閲覧履歴などを管理しています。プロファイルの実体は、Windowsなら%AppData%以下の

C:\Users\ユーザー名\AppData\Local\Google\Chrome\User Data\Profile 4

にあります。(Profile 4の部分はアカウントによって異なる)

このプロファイルの中身を見て、Google Chromeはログイン元が人間であるかどうかを判断しています。SeleniumでChromeDriverを動かす場合、プロファイルはAppData\Local\Temp\scoped_dirxxxxx_xxxxxxxxに一時的に作成され、実行後にはクリアされます。また、一時的に作られるプロファイルには、ログイン時に必要な情報が含まれていません。

そのため、SeleniumでChromeDriverを起動すると、本来手動でログインするときに持っている情報が不足しているため、「おまえは人間じゃないな!?セキュリティ的に不安だからログインを拒否する!」とはじかれてしまうのです。

Seleniumで自動ログインする方法

Seleniumで自動ログインするには、ログインしたいアカウントのプロファイルをプログラム内で指定する必要があります。

ログインしたいアカウントのプロファイルを確認する

ログインしたいアカウントのプロファイルを確認します。Google Chromeを開き、アドレスバーに以下を入力します。

chrome://version

すると、ユーザープロファイルの情報が表示されます。

「プロフィール パス」の、C:\Users~\User Dataまでをコピーします。

Seleniumの起動オプションでプロファイルを指定する

コード内でSeleniumの起動オプションにプロファイルを指定します。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options

options = Options()
# プロファイルのパスを指定
options.add_argument('--user-data-dir=C:/Users/ユーザー名/AppData/Local/Google/Chrome/User Data')
# 使用するプロファイル(ユーザー)を指定
options.add_argument('--profile-directory=Profile 4')

# ブラウザを起動
driver = webdriver.Chrome(options=options)

# Google Chromeを開く
driver.get('https://www.google.com/?hl=ja/')

コピーしたパスをそのまま貼り付けると「SyntaxError: (unicode error)」が発生します。

\を/に変更して実行するようにしてください。

「options.add_argument(‘–profile-directory=Profile 4’)」を省いて実行すると、ログインアカウントの選択画面に遷移します。

上記コードを実行すると、Chromeにログインした状態で実行が可能となります。

まとめ

今回は、SeleniumでGoogleアカウントに自動ログインする方法について解説しました。

GmailやYoutube Studio、Google Driveなど、Googleにログインした状態で操作したい場面はけっこうあるかと思いますので、そのような場合に参考にしていただければ幸いです。

なお、Power Automate Desktopであればプロファイルの指定なくログインできるので、目的に応じて使い分けると良いかなと思います。

chaso

文系出身、数字が苦手な平凡主婦。塾講師、大手企業SE、不動産事務、Webライター、QAエンジニアを経て現在RPAエンジニアとして働いています。機械音痴だけど効率化や自動化をこよなく愛しています!お仕事の依頼・ご相談は問い合わせよりお願いいたします♪

chasoをフォローする

コメント

  1. 川畑 知三 より:

    上記をコピー.自分の場合Profile 1なのでそこだけ修正しましたが,下記エラーでうまくいきません. 何が原因か教えていただければ幸いです.Traceback (most recent call last):
    File “D:\python_prg\kakei\selenium_test”, line 12, in
    driver = webdriver.Chrome(options=options)
    File “C:\Users\user\AppData\Local\Programs\Python\Python38\lib\site-packages\selenium\webdriver\chrome\webdriver.py”, line 45, in __init__
    super().__init__(
    File “C:\Users\user\AppData\Local\Programs\Python\Python38\lib\site-packages\selenium\webdriver\chromium\webdriver.py”, line 56, in __init__
    super().__init__(
    File “C:\Users\user\AppData\Local\Programs\Python\Python38\lib\site-packages\selenium\webdriver\remote\webdriver.py”, line 206, in __init__
    self.start_session(capabilities)
    File “C:\Users\user\AppData\Local\Programs\Python\Python38\lib\site-packages\selenium\webdriver\remote\webdriver.py”, line 290, in start_session
    response = self.execute(Command.NEW_SESSION, caps)[“value”]
    File “C:\Users\user\AppData\Local\Programs\Python\Python38\lib\site-packages\selenium\webdriver\remote\webdriver.py”, line 345, in execute
    self.error_handler.check_response(response)
    File “C:\Users\user\AppData\Local\Programs\Python\Python38\lib\site-packages\selenium\webdriver\remote\errorhandler.py”, line 229, in check_response
    raise exception_class(message, screen, stacktrace)
    selenium.common.exceptions.WebDriverException: Message: unknown error: cannot create default profile directory
    Stacktrace:
    GetHandleVerifier [0x00007FF65E067D12+55474]
    (No symbol) [0x00007FF65DFD77C2]
    (No symbol) [0x00007FF65DE8E0EB]
    (No symbol) [0x00007FF65DEBFAD5]
    (No symbol) [0x00007FF65DEBBCD2]
    (No symbol) [0x00007FF65DEB86CE]
    (No symbol) [0x00007FF65DEF713B]
    (No symbol) [0x00007FF65DEEEF33]
    (No symbol) [0x00007FF65DEC3D41]
    (No symbol) [0x00007FF65DEC4F84]
    GetHandleVerifier [0x00007FF65E3CB762+3609346]
    GetHandleVerifier [0x00007FF65E421A80+3962400]
    GetHandleVerifier [0x00007FF65E419F0F+3930799]
    GetHandleVerifier [0x00007FF65E103CA6+694342]
    (No symbol) [0x00007FF65DFE2218]
    (No symbol) [0x00007FF65DFDE484]
    (No symbol) [0x00007FF65DFDE5B2]
    (No symbol) [0x00007FF65DFCEE13]
    BaseThreadInitThunk [0x00007FF9FC147344+20]
    RtlUserThreadStart [0x00007FF9FC2826B1+33]

    • chaso chaso より:

      当ブログを閲覧いただきまして、ありがとうございます。

      プロファイルの指定のひとつ上のコードも、ご自身の環境に合わせて変更が必要になります。
      # プロファイルのパスを指定
      options.add_argument(‘–user-data-dir=C:/Users/ユーザー名/AppData/Local/Google/Chrome/User Data’)

      「プロフィール パス」の、C:\Users~\User Dataまでをコピーして、それを貼り付けて再度試してみていただけますでしょうか。
      よろしくお願いいたします。

  2. 川畑 知三 より:

    早速のリプライありがとうございます.
    当方のプロフィールパスは下記の通りです.

    実行ファイルのパス C:\Program Files\Google\Chrome\Application\chrome.exe
    プロフィール パス C:\Users\user\AppData\Local\Google\Chrome\User Data\Default

    ~User Dataまでコピーして実行したのですが,前回のエラーが出ました.
    Defaultまでコピーすると指定Webが表示されるのですがログインをクリックすると画面は変わるのですが,無応答のままです.もっともChromeは自動テストソフトウェアで制御されていますという表示が画面上部に出ていましたが.

    上記プロフィールパスの最後のDefaultがプロファイルなのでしょうか? Default(User Dataにも)デレクトリの中にProfile 1というのがあり,これがプロファイルなのでしょうか.

    まとまりが悪いので整理しますと
    ① プロフィールパスをUser Dataまでにすると前回のエラーが表示されます.
    (プロファイルとして Default,Profile 1 いずれもだめ)
    ② Defaultまでにすると,指定Webページは表示されるようになりますが,「自動ソフトで制御」のメッセージが表示されログインは出来ませんでした. この場合プロファイルとしてDefault ,Profile 1いずれも同じ結果でした.

    • chaso chaso より:

      こちらこそ、詳細な情報をありがとうございます。

      プロフィール パス C:\Users\user\AppData\Local\Google\Chrome\User Data\Default
      となっているので、デフォルトユーザーが設定されているものと思われます。

      1,プロフィールパスをUser Dataまでにする
      2.プロファイル設定をコメントアウトするか、以下に変更する
      options.add_argument(‘–profile-directory=Default’)

      これで再度試してみていただけますでしょうか。
      お手数おかけしますが、よろしくお願いいたします。

  3. 川畑 知三 より:

    再度のリプライありがとうございます.

    ようやくうまくいくようになりました. どうも何度もテストしていたため,指定WEBページが変な状態で止まっていたのが起因していたのではと思います.

    それにしても,貴職のブログは非常に分かりやすく,大変参考になりました. またよくこんなことまで分かっておられるのには感心しました.改めてお礼申し上げます.

    • chaso chaso より:

      川畑 様

      ご連絡、ありがとうございます。
      無事にうまくいったようで良かったです。
      私も、色々設定を変更しているうちにわけが分からなくなってしまうことがあるので、
      お力添えできたならとてもうれしいです。

      ブログ更新の励みになるコメント、大変感謝いたします。
      このたびはありがとうございました。

タイトルとURLをコピーしました