module AmazonAuth::SessionExtension
Public Instance Methods
alert_displayed?()
click to toggle source
# File lib/amazon_auth/extensions/session_extension.rb, line 100 def alert_displayed? session.has_selector?('.a-alert-error') end
doc()
click to toggle source
# File lib/amazon_auth/extensions/session_extension.rb, line 3 def doc Nokogiri.HTML(session.html) end
find_sign_in_link()
click to toggle source
# File lib/amazon_auth/extensions/session_extension.rb, line 108 def find_sign_in_link m1 = session.html.match(%r{(/ap/signin[^'"]+)['"]}) return CGI.unescapeHTML(m1[1]) if m1 # Maybe the following patterns are deprecated link = links_for('a').find{|l| l =~ %r{\A/gp/navigation/redirector.html} } if link debug "Found a link [#{link}]" return link end m2 = session.html.match(%r{'(/gp/navigation/redirector.html[^']+)'}) if m2 debug "Found a link (.html.match) [#{m2[1]}]" return m2[1] end nil end
image_recognition_displayed?()
click to toggle source
# File lib/amazon_auth/extensions/session_extension.rb, line 104 def image_recognition_displayed? session.has_selector?('#auth-captcha-image-container') end
initial_url()
click to toggle source
Helpers for sign in
# File lib/amazon_auth/extensions/session_extension.rb, line 23 def initial_url options.fetch(:url) { "https://www.#{AmazonInfo.domain}/" } end
links_for(selector, options = {})
click to toggle source
# File lib/amazon_auth/extensions/session_extension.rb, line 7 def links_for(selector, options = {}) wait_for_selector(selector, options) doc.css(selector).map{|e| e['href'] } end
retry_signin_form_with_image_recognition()
click to toggle source
# File lib/amazon_auth/extensions/session_extension.rb, line 83 def retry_signin_form_with_image_recognition return true unless session.has_selector?('#signInSubmit') session.fill_in 'ap_password', with: password if image_recognition_displayed? input = ask "Got the prompt. Read characters from the image [blank to cancel]: " if input.blank? debug "Going back to #{initial_url}" session.visit initial_url return true end session.fill_in 'auth-captcha-guess', with: input end sleep 1 session.click_on('signInSubmit') sleep 2 end
sign_in(url = nil)
click to toggle source
# File lib/amazon_auth/extensions/session_extension.rb, line 27 def sign_in(url = nil) url ||= initial_url session.visit url debug "Visiting #{url}" restore_cookies if keep_cookie? if (link = find_sign_in_link) debug "link: [#{link}]" session.visit(link) end submit_signin_form end
submit_signin_form()
click to toggle source
# File lib/amazon_auth/extensions/session_extension.rb, line 51 def submit_signin_form # Click account switcher if it is displayed dom_account_switcher = '.cvf-account-switcher-profile-details, .cvf-account-switcher-claim' session.first(dom_account_switcher).click if session.has_selector?(dom_account_switcher) debug "Begin submit_signin_form" unless session.has_selector?('#signInSubmit') if session.has_selector?('input#continue') && session.has_selector?('input#ap_email') log "Found a form which asks only email" session.fill_in 'ap_email', with: login session.first('input#continue').click else log "signInSubmit button not found in this page" return false end end session.fill_in 'ap_email', with: login if session.first('#ap_email', minimum: 0) && session.first('#ap_email').value.blank? session.fill_in 'ap_password', with: password session.first('#signInSubmit').click log "Clicked signInSubmit" raise('Failed on signin') if alert_displayed? while image_recognition_displayed? do retry_signin_form_with_image_recognition end debug "End submit_signin_form" session.save_cookies if keep_cookie? true rescue => e raise("#{e.message} #{e.backtrace.first}\n\n#{session.body}") end
wait_for_selector(selector, options = {})
click to toggle source
# File lib/amazon_auth/extensions/session_extension.rb, line 12 def wait_for_selector(selector, options = {}) options.fetch(:wait_time, 3).times do if session.first(selector, minimum: 0) break else sleep(1) end end end
Private Instance Methods
login()
click to toggle source
# File lib/amazon_auth/extensions/session_extension.rb, line 128 def login options.fetch(:login, Converter.decode(ENV['AMAZON_USERNAME_CODE'])) end
password()
click to toggle source
# File lib/amazon_auth/extensions/session_extension.rb, line 132 def password options.fetch(:password, Converter.decode(ENV['AMAZON_PASSWORD_CODE'])) end