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

このブラウザまたはアプリは安全でない可能性があります。
そこで今回は、SeleniumでGoogleアカウントに自動ログインする方法について解説します。
なぜSelenium経由で自動ログインできないのか
はじめに、なぜSelenium経由で自動ログインできないのかをまとめます。理由はどうでもいいからとにかくログインできるようにしたいという方は、2.Seleniumで自動ログインする方法をご参照ください。
なぜSelenium経由で自動ログインできないのかというと、人間による操作だとみなされていないからです。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/')
上記コードを実行すると、Chromeにログインした状態で実行が可能となります。

まとめ
今回は、SeleniumでGoogleアカウントに自動ログインする方法について解説しました。
GmailやYoutube Studio、Google Driveなど、Googleにログインした状態で操作したい場面はけっこうあるかと思いますので、そのような場合に参考にしていただければ幸いです。
なお、Power Automate Desktopであればプロファイルの指定なくログインできるので、目的に応じて使い分けると良いかなと思います。

コメント