やりたいこと
Googleアカウントで認証されるサイトにログインしたい。
■実行環境
jupyter notebook(Chromeで実行)
■言語
python
■ライブラリ
selenium
ぶちあたった壁①
下記のコードでchromeが起動され、Googleのアカウント入力画面が表示されるところ
まではいいのですが、入力後「ログインできませんでした」メッセージが表示されます。
機械による操作と判断されたときのGoogle側の対処のようです。
from selenium import webdriver
browser = webdriver.Chrome(r'C:\Users\[ユーザ名]\chromedriver.exe')
browser.get([目的のURL])
ぶちあたった壁②
Googleアカウントが認証されたプロファイルを指定(※)してseleniumでchromeを起動
すれば認証が通る、という記事を見つけたので早速実行!
※プロファイルとはPCのログインユーザに近いイメージでGoogleアカウント
そのものではありません
そのプロファイルでGoogleアカウント認証させておくことを意味します
<補足>
現在自分がどのプロファイルを利用しているかはChromeのアドレスバーで
chrome://version
と入力した時、「プロフィール パス」項目に表示されます。
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument(r'--user-data-dir=C:\Users\[ユーザ名]\AppData\Local\Google\Chrome\User Data')
options.add_argument(r'--profile-directory=Default')
browser = webdriver.Chrome(r'C:\Users\[ユーザ名]\chromedriver.exe',options=options)
browser.get([目的のURL])
奮闘空しく、エラー発生・・・
「すでに該当のディレクトリは使われている」との事です・・・
InvalidArgumentException: Message: 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
ぶちあたった壁③
とすると、ディレクトリ(フォルダのパス)を変えればいいんじゃね?
と思いますよね?
そこで完全に別にフォルダ(C:\workspace)を作成し、そこに
C:\Users[ユーザ名]\AppData\Local\Google\Chrome\User Data
┗Default
のフォルダをまるまるコピーし、下記部分のみ変更して、いざ実行!
options.add_argument(r'--user-data-dir=C:\workspace')
エラーにはならなかったですが、chromeの右上のユーザアイコンが指定したプロファイルの
ものではなかったです。
気にせず(いや、かなり気になりつつも)そのまま、Googleログインしようとしたが、
「ぶちあたった壁①」と同じ結果に・・・
解決
「Jupyter Notebook(Chromeで実行)」ではなく「Visual Studio Code」側で実行したら、
するりと壁をすりぬけました。
コードは「ぶちあたった壁②」のものでいけました。
Chrome上でJupyter Notebookを起動せずにすんだので、「ぶちあたった壁②」を回避できた
ということでしょう。
「ぶちあたった壁③」で行けなかった理由は結局わかっておりませんが、まぁよしとしましょう。