MAGAZINE
ルーターマガジン
【selenium X ruby X chrome】 profileを使用してログインをパスする
エンジニアの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 = falseopt = OptionParser.newopt.on('--login', '初回ログイン時に指定します') dois_initial_login = trueendopt.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: capsif is_initial_login# 初回ログイン# profileをローカルディレクトリに保存する時の処理driver.get("http://google.co.jp/")puts "ログインを行なってください。"require 'debug'else# 2回目以降は、profileを読み取り、ログイン不要でアクセス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を作成し、ログイン情報などを記憶させるCONTACT
お問い合わせ・ご依頼はこちらから