Не удается войти в Amazon с помощью Ruby Mechanize

Я пытаюсь войти в Amazon, используя Ruby gem Mechanize. Я всегда возвращаюсь на страницу входа без какого-либо сообщения об ошибке. Мне интересно, является ли это ошибкой Mechanize или Amazon блокирует такой доступ. У меня есть код ниже, который вы можете протестировать.

@mechanizer = Mechanize.new

@mechanizer.user_agent_alias = 'Mac Safari'

@page = @mechanizer.get("https://www.amazon.com/ap/signin?_encoding=UTF8&openid.assoc_handle=usflex&openid.return_to=https%3A%2F%2Fwww.amazon.com%2Fgp%2Fyourstore%3Fie%3DUTF8%26ref_%3Dpd_irl_gw&openid.mode=checkid_setup&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&openid.claimed_id=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.pape.max_auth_age=0&openid.ns.pape=http%3A%2F%2Fspecs.openid.net%2Fextensions%2Fpape%2F1.0&openid.identity=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select")

form = @page.form_with(:id => "ap_signin_form")

field = form.field_with(:name => "email")
field.value = "[email protected]"

radiobutton = form.radiobutton_with(:name => 'create', :value => '0')
radiobutton.check

button = form.button_with(:id => "signInSubmit")

@page = form.submit button

Спасибо за любую помощь.


person batch    schedule 21.07.2011    source источник


Ответы (1)


Попробуй это,

#!/usr/bin/env ruby

require "rubygems"
require "mechanize"

class AmazonCrawler
  def initialize
    @agent = Mechanize.new do |agent|
      agent.user_agent_alias = 'Mac Safari'
      agent.follow_meta_refresh = true
      agent.redirect_ok = true
    end
  end

  def login
    login_url = "https://www.amazon.com/ap/signin?_encoding=UTF8&openid.assoc_handle=usflex&openid.claimed_id=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.identity=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.mode=checkid_setup&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&openid.ns.pape=http%3A%2F%2Fspecs.openid.net%2Fextensions%2Fpape%2F1.0&openid.pape.max_auth_age=0&openid.return_to=https%3A%2F%2Fwww.amazon.com%2Fgp%2Fyourstore%2Fhome%3Fie%3DUTF8%26ref_%3Dgno_signin"
    @agent.get(login_url)
    form = @agent.page.forms.first
    form.email = "[email protected]"
    form['ap_signin_existing_radio'] = "1"
    form.password = "password"
    dashboard = @agent.submit(form)
    File.open('dashboard.html', 'w') {|file| file << dashboard.body }
  end
end

AmazonCrawler.new.login

В документации по механизации есть несколько интересных примеров. Эта памятка также удобна для быстрые ссылки.

person Kibet Yegon    schedule 23.07.2012
comment
Я пытаюсь сделать что-то подобное, но у меня не очень получается. Код, как написано выше, по-прежнему будет перенаправлять вас обратно на страницу входа. Любые идеи? - person joelpoloney; 31.07.2013
comment
я бы тоже хотела знать - person Zack Shapiro; 17.10.2013
comment
@fffanatics, @Zack Я обновил код, чтобы распечатать страницу в файл. Убедитесь, что вы изменили значения для form.email и form.password, чтобы они соответствовали вашим учетным данным пользователя Amazon. Он все еще работает для меня. - person Kibet Yegon; 18.10.2013
comment
Так что это определенно работает для amazon.com. Я пытался войти на сайт developer.amazon.com, а не на основной сайт. Я не смог заставить его работать через Mechanize, но смог заставить его работать через драгоценные камни Watir и Headless. - person joelpoloney; 18.10.2013