エンジニアのTakahashiです。

selenium/chromeで毎回ログインしたく無い場合があります。例えば、ログインフォームのセキュリティチェックが厳しい場合や、単に面倒臭い場合など。。
そのような場合に、CookieをDBなどに保存して、毎回Cookieを読み込んでアクセスする実装をよく採用します。
ですが、実装が大変です。。

今回は、実装がとても簡単で、よりselenium/chromeのアクセスを本物の人間のアクセスに見せかけることができると目されている、chrome profileを使う手法を紹介します。

環境構築

chrome/selenium環境の構築は、弊社ブログの過去記事をご覧ください。

chrome ヘッドレスの環境構築(CentOS編)
chrome ヘッドレスの環境構築(Mac編)
chrome ヘッドレスの環境構築(Ubuntu編)

また、gem”selenium-webdriver”をインストールしてください。

gem install selenium-webdriver

使用するコード

–user-data-dirという、起動時のchrome optionに、profile情報を保存するディレクトリを指定します。
/your/path/to/save/profileは、保存したいディレクトリのパスに書き換えてください。

require 'selenium-webdriver'
require 'optparse'
is_initial_login = false
opt = OptionParser.new
opt.on('--login', '') do
is_initial_login = true
end
opt.parse(ARGV)
caps = Selenium::WebDriver::Remote::Capabilities.chrome(
chromeOptions: {
args: ["--user-data-dir=/your/path/to/save/profile"]
})
driver = Selenium::WebDriver.for :chrome, desired_capabilities: caps
if is_initial_login
#
# profile
driver.get("http://google.co.jp/")
puts ""
require 'debug'
else
# 2profile
driver.get("https://mail.google.com/mail/u/0/?ogbl#inbox")
require 'debug'
end

chrome profileを使用してみる

まず、普段chromeを使っている方は、chromeのプロセスを全て終了してください。

最初にruby use_profile.rb --loginを実行すると、googleのログイン画面が出現します。手動でログインして、セッション情報をchrome_profileディレクトリに保存します。
ログイン成功後は、debugコンソールで、”quit”を入力して、プロセスを終了してください。起動したchromeのプロセスも終了してください。
これで、ローカルディレクトリにユーザー情報が保存されました。

次に、ruby use_profile.rbを実行して、gmailにログイン不要でアクセスできることを確認します。

ログインできました。profileを使う実装は、便利な割に意外と簡単そうです。

参考にさせていただきました

selenium webdriverで任意のchrome profileを作成し、ログイン情報などを記憶させる