Class: AmazonAuth::Client
Instance Attribute Summary collapse
Instance Method Summary
collapse
#doc, #links_for, #wait_for_selector
#debug, #log
Constructor Details
#initialize(options = {}) ⇒ Client
Returns a new instance of Client.
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
# File 'lib/amazon_auth/client.rb', line 8
def initialize(options = {})
@options = options
@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.')
end
end
@password = options.fetch(:password) do
if (amazon_password_code = ENV['AMAZON_PASSWORD_CODE']).present?
Converter.decode(amazon_password_code)
else
raise('AMAZON_PASSWORD_CODE is required.')
end
end
@driver = options.fetch(:driver, :selenium)
Capybara.app_host = @initial_url
rescue => e
puts "Please setup credentials of amazon_auth gem with folloing its instruction."
raise e
end
|
Instance Attribute Details
#initial_url ⇒ Object
Returns the value of attribute initial_url.
6
7
8
|
# File 'lib/amazon_auth/client.rb', line 6
def initial_url
@initial_url
end
|
Instance Method Details
#alert_displayed? ⇒ Boolean
75
76
77
|
# File 'lib/amazon_auth/client.rb', line 75
def alert_displayed?
session.has_selector?('.a-alert-error')
end
|
#image_recognition_displayed? ⇒ Boolean
79
80
81
|
# File 'lib/amazon_auth/client.rb', line 79
def image_recognition_displayed?
session.has_selector?('#auth-captcha-image-container')
end
|
#inspect ⇒ Object
Hide instance variables of credentials on console
88
89
90
|
# File 'lib/amazon_auth/client.rb', line 88
def inspect
to_s
end
|
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
# File 'lib/amazon_auth/client.rb', line 58
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
|
#session ⇒ Object
83
84
85
|
# File 'lib/amazon_auth/client.rb', line 83
def session
@session ||= Capybara::Session.new(@driver)
end
|
#sign_in ⇒ Object
33
34
35
36
37
38
39
40
|
# File 'lib/amazon_auth/client.rb', line 33
def sign_in
session.visit initial_url
debug "Visiting #{initial_url}"
link = links_for('#nav-signin-tooltip a').find{|link| link =~ %r{\A/gp/navigation/redirector.html} }
debug "link: [#{link}]"
session.visit(link) if link
submit_signin_form
end
|
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
# File 'lib/amazon_auth/client.rb', line 42
def submit_signin_form
debug "Begin submit_signin_form"
return true unless session.has_selector?('#signInSubmit')
session.fill_in 'ap_email', with: @login
session.fill_in 'ap_password', with: @password
session.click_on('signInSubmit')
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"
true
end
|