selenium webdriverで任意のchrome profileを作成し、ログイン情報などを記憶させる
driverを起動させる度にログインさせるのが面倒
selenium webdriverを使っていると、ログインが必要なサイトにアクセスする時に毎回ログイン情報を入力させてからサイトの中を動作させなければなりません。
複数のdriverを起動させる場合もdriver毎にログインしなければなりません。
ログイン機能のテストをしているのであれば良いのですが、できればログインを飛ばしてしまいたいと思うことはありませんか?
通常のChromeであればログイン情報が保存されているのでログインや2段階認証が飛ばせる
いつも使っているChromeでは、ブラウザを立ち上げる度にgoogleのログインが求められますか?2段階認証を求められるでしょうか?
そんなことはありません。ブラウザが認証情報を記憶し、クッキーの認証が切れていなければログイン済みになっています。
じゃあchromedriverでも認証情報を保存して、それを読み込みたい
というわけで今回はchromedriverでもプロファイルを作成し、そこに情報を保存し、読み込んで起動させる方法を紹介します。
普段使っているchromeのプロファイルを使うわけではなく、独自で任意のプロファイルを作成できるので、コード毎にプロファイルを使いわけることもできます。超便利。
コード
面倒くさそうに思えて実は超簡単。こんな感じ。
1 2 3 4 5 6 7 |
require 'selenium-webdriver' caps = Selenium::WebDriver::Remote::Capabilities.chrome( chromeOptions: { args: ["--user-data-dir=C:\\Users\\{ユーザー名}\\Desktop\\sample-profile"] }) driver = Selenium::WebDriver.for :chrome, desired_capabilities: caps |
これでデスクトップ上にsample-profileフォルダができて、そこにプロファイルが保存されていき、また読み込んでdriverを起動します。
では、googleに手動でログインしてみましょう。
1 2 3 4 5 6 7 8 9 10 |
require 'selenium-webdriver' caps = Selenium::WebDriver::Remote::Capabilities.chrome( chromeOptions: { args: ["--user-data-dir=C:\\Users\\{ユーザー名}\\Desktop\\sample-profile"] }) driver = Selenium::WebDriver.for :chrome, desired_capabilities: caps driver.get("http://google.co.jp/") require 'debug' |
ここで一度手動でグーグルにログイン、または2段階認証してみましょう。
終わったらブラウザを閉じてもう一度実行してみると、今度はログインされた状態でgoogleが開きましたね。
以上になります。
コード毎にプロファイルを保存するフォルダを変えればいろいろ便利ですし、ローカルのものを読み込んでいるので下手なextensionを使うより安全ですね。
はじめまして、akと申します。
色々と試してみたのですがうまく行かずコメントさせていただきました。
早速なのですが、
「windowsならruby + selenium webdriverも環境設定は15分で終わる」を元に環境構築してからこちらのページのコードを丸写し(ユーザー名は変更)して実行しました。
※ページ内で紹介されているファイルが見当たらなかったので、環境構築にはrubyinstaller-devkit-2.6.6-1-x86を使用。
その結果、Chromeは立ち上がりますが指定した場所にプロファイルが保存されません。
環境構築時に実行したコマンド
・gem install selenium-webdriver
・gem install ffi
・gem install pry
その他
・ChromeDriver 84.0.4147.30
※既存Chromeとメジャーバージョンは同じ
何か考えられる原因はありますでしょうか?