あらすじ
お小遣い稼ぎに登録しているクラウドソーシングサービスサイトでは、
ID/Pass認証のほかにもGoogleとかソーシャル系のアカウントを使って
アカウント作成ができたりする。
こんなの。
普通にID/Passでログインするならば、Selenium使って
ID/Passの入力欄の情報を取ってそこに自分のログイン情報を突っ込んで、
ボタン押下するコードを書いてやれば大した苦労もなくログインできるはず……
しかし、Googleでログインは自動化しようとすると一筋縄ではいかなさそうだった。
特に対策もせずにその先の画面で同じことをしようとすると認証の画面でエラーが出る。
それに対しては、一度ログインに成功したブラウザのユーザプロファイルを使用して
Chromeを起動させれば認証を飛び越えてログイン後のページに遷移することができる模様。
環境
- Python 3.x
- selenium 3.141.0
- Chrome 100.0.4896.127 (Official Build) (64 ビット) (cohort: Stable)
手順
目的のサイトにGoogle認証でログインする
まずは、いつもの手順でログインしておく。
Chromeのプロファイルを確認する
chrome://version
遷移したページから「プロフィールパス」を確認してメモしておく
プロフィール パス C:\Users\<ユーザ名>\AppData\Local\Google\Chrome\User Data\Default
ブラウザ起動のコードに組み込む
def getDriver():
options = webdriver.ChromeOptions()
# 前の手順で控えたプロファイル情報を持ったパスの一つ上を指定する。
# ※\はエスケープしておく
profileFolder = '--user-data-dir=C:\\Users\\<ユーザ名>\\AppData\\Local\\Google\\Chrome\\User Data'
options.add_argument(profileFolder)
driver = webdriver.Chrome('chromedriver.exe',options=options)
return driver
こいつを呼び出すと、Chrome起動時にChromeで使用しているどのユーザで
Chromeを起動するか聞かれるので、いつも使っているユーザを指定すると
Googleログイン認証をスキップしてログイン後のページにログインできる。
※同じユーザで別の作業をしているときは
その作業を全部落としておかないとコケるので
普段別のことでタブをミリサイズにしている人は注意。。。
おまけ
※同じユーザで別の作業をしているときは
その作業を全部落としておかないとコケるので
普段別のことでタブをミリサイズにしている人は注意。。。
……って書いた後に検証がてらやってみたんだけど、
なんか再現しなかったので以下の感じで行けるかも。
- あらかじめ認証できるユーザで認証しておく。(そのブラウザは閉じずにおいておく
- Chromeで利用している別のプロファイルを使用するように書き換える
def getDriver():
options = webdriver.ChromeOptions()
# 前の手順で控えたプロファイル情報を持ったパスの一つ上を指定する。
# ※\はエスケープしておく
- fileFolder = '--user-data-dir=C:\\Users\\<ユーザ名>\\AppData\\Local\\Google\\Chrome\\User Data'
+ fileFolder = '--user-data-dir=C:\\Users\\<ユーザ名>\\AppData\\Local\\Google\\Chrome\\User Data\\Profile 4'
options.add_argument(profileFolder)
driver = webdriver.Chrome('chromedriver.exe',options=options)
return driver
Profileの数字はそれぞれのパスをGUIで見ると
使っているアイコンのファイルがあるのでそれを参考にして選択しよう。
特に別のアカウントを使わずにやっている人は
chrome://versionの時にDefaultが選択されているはず。
最近自分でID/Passを作成せずにGoogleアカウントで
サクっとやっちゃうことが多くてついに弊害が出始めたかと思ったけど
自動でログインする仕組みがちゃんとあってよかったです。
できることが増えると情報収集の幅がどんどん広がっていって楽しいですね。