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であればプロファイルの指定なくログインできるので、目的に応じて使い分けると良いかなと思います。
コメント
上記をコピー.自分の場合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]
当ブログを閲覧いただきまして、ありがとうございます。
プロファイルの指定のひとつ上のコードも、ご自身の環境に合わせて変更が必要になります。
# プロファイルのパスを指定
options.add_argument(‘–user-data-dir=C:/Users/ユーザー名/AppData/Local/Google/Chrome/User Data’)
「プロフィール パス」の、C:\Users~\User Dataまでをコピーして、それを貼り付けて再度試してみていただけますでしょうか。
よろしくお願いいたします。
早速のリプライありがとうございます.
当方のプロフィールパスは下記の通りです.
実行ファイルのパス 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いずれも同じ結果でした.
こちらこそ、詳細な情報をありがとうございます。
プロフィール パス C:\Users\user\AppData\Local\Google\Chrome\User Data\Default
となっているので、デフォルトユーザーが設定されているものと思われます。
1,プロフィールパスをUser Dataまでにする
2.プロファイル設定をコメントアウトするか、以下に変更する
options.add_argument(‘–profile-directory=Default’)
これで再度試してみていただけますでしょうか。
お手数おかけしますが、よろしくお願いいたします。
再度のリプライありがとうございます.
ようやくうまくいくようになりました. どうも何度もテストしていたため,指定WEBページが変な状態で止まっていたのが起因していたのではと思います.
それにしても,貴職のブログは非常に分かりやすく,大変参考になりました. またよくこんなことまで分かっておられるのには感心しました.改めてお礼申し上げます.
川畑 様
ご連絡、ありがとうございます。
無事にうまくいったようで良かったです。
私も、色々設定を変更しているうちにわけが分からなくなってしまうことがあるので、
お力添えできたならとてもうれしいです。
ブログ更新の励みになるコメント、大変感謝いたします。
このたびはありがとうございました。