lib/amazon_auth/client.rb in amazon_auth-0.1.2 vs lib/amazon_auth/client.rb in amazon_auth-0.1.3
- old
+ new
@@ -1,11 +1,11 @@
module AmazonAuth
class Client
- INITIAL_ENTRY_URL = 'https://www.amazon.co.jp/'
+ attr_accessor :initial_url
def initialize(options = {})
- @url = options.fetch(:url) { INITIAL_ENTRY_URL }
+ @initial_url = options.fetch(:url) { "https://www.#{AmazonInfo.domain}/" }
@login = options.fetch(:login) do
if (amazon_username_code = ENV['AMAZON_USERNAME_CODE']).present?
Converter.decode(amazon_username_code)
else
raise('AMAZON_USERNAME_CODE is required.')
@@ -19,49 +19,56 @@
end
end
end
def sign_in
- @session = Capybara::Session.new(:selenium)
- @session.visit @url
- @session.within('#nav-tools') do
- @session.click_on 'サインイン'
- end
+ session.visit initial_url
+ session.first('#a-autoid-0-announce').click
fill_in_with_stroke('ap_email', @login)
fill_in_with_stroke('ap_password', @password)
- @session.click_on('signInSubmit')
+ session.click_on('signInSubmit')
- while image_recognition_displayed? do
+ while alert_displayed? do
retry_sign_in
end
- @session.first('.nav-line-2').click
- @session
+ session.first('.nav-line-2').click
+ session
end
def retry_sign_in
fill_in_with_stroke('ap_password', @password)
- input = ask "Got the prompt. Read characters from the image: "
- fill_in_with_stroke('auth-captcha-guess', input)
- @session.click_on('signInSubmit')
+ if image_recognition_displayed?
+ input = ask "Got the prompt. Read characters from the image: "
+ fill_in_with_stroke('auth-captcha-guess', input)
+ end
+ session.click_on('signInSubmit')
end
def fill_in_with_stroke(dom_id, value)
sleep_s
- element = @session.first("##{dom_id}")
+ element = session.first("##{dom_id}")
value.split(//u).each do |char|
element.send_keys(char)
sleep rand
end
end
+ def alert_displayed?
+ session.has_selector?('.a-alert-container')
+ end
+
def image_recognition_displayed?
- @session.has_content?('お客様のアカウントを強力に保護するため') || @session.has_content?('問題が発生しました')
+ session.has_selector?('#auth-captcha-image-container')
end
+ def session
+ @session ||= Capybara::Session.new(:selenium)
+ end
+
def driver
- @session.driver
+ session.driver
end
def sleep_s(sec = 2)
sleep sec
end