Ruby Mechanize логин не работает - PullRequest
1 голос
/ 12 января 2011

Позвольте мне подготовить почву для того, чего я пытаюсь достичь. На уроке физики, который я посещаю, моя учительница всегда любит хвастаться тем, как невозможно обманывать в ее классе, потому что все ее задания выполняются через WebAssign. WebAssign работает следующим образом: все получают одинаковые вопросы, но числа, используемые в вопросе, являются случайными переменными, поэтому у каждого учащегося разные числа, и, следовательно, разные ответы. Поэтому я писал сценарии ruby, чтобы решить вопрос для людей, просто вписав ваши конкретные числа.

Я бы хотел автоматизировать этот процесс с помощью механизации. Раньше я много раз использовал механизацию, но у меня возникают проблемы при входе на сайт. Я отправлю форму, и она вернет ту же страницу, на которой я только что был. Вы можете взглянуть на исходный код сайта на http://webassign.net,, и я также попытался использовать логин на http://webassign.net/login.html, но тоже не повезло.

Позвольте мне дополнить это рубиновым кодом, который не выполняет то, что я хочу:

require 'rubygems'
require 'mechanize'

agent = Mechanize.new

page = agent.get("http://www.webassign.net/login.html")
form = page.forms.last
puts "Enter your username"
form.WebAssignUsername = gets.chomp
puts "Enter your password (Don't worry, we don't save this)"
form.WebAssignPassword = gets.chomp
form.WebAssignInstitution = "trinityvalley.tx"

form.submit #=> Returns original page 

Если кто-то действительно заинтересован в том, чтобы заставить это работать, я был бы более чем счастлив выслать им рабочее имя пользователя и пароль.

Ответы [ 4 ]

4 голосов
/ 12 января 2011

Сайт может проверять, установлена ​​ли переменная post Login (см. Кнопку входа в систему).Попробуйте добавить form.Login = "Login".

3 голосов
/ 03 марта 2011

Вы пытались использовать agent.submit(form, form.buttons.first) вместо form.submit?

Это сработало для меня, когда я пытался отправить форму.Сначала я попытался использовать form.submit, и он продолжал возвращать исходную страницу.

1 голос
/ 24 января 2011

Ваш вопрос кажется немного двусмысленным, говоря, что вам не повезло? В чем именно проблема? Получаете ли вы совершенно другой ответ, чем при просмотре страницы в браузере? Если это так, то делайте то, что говорит @cam, и анализируйте заголовки, вы можете сделать это в Firefox через расширение или в Chrome. В любом случае, попробуйте имитировать заголовки, которые вы видите в любом браузере, который вы делаете в механизированном пользовательском агенте. Вот сценарий, который я использовал для имитации заголовков запросов iTunes, когда занимался извлечением данных в магазине приложений:

def mimic_itunes( mech_agent )
  mech_agent.pre_connect_hooks << lambda {|headers|
    headers[:request]['X-Apple-Store-Front'] = X_APPLE_STOREFRONT;
    headers[:request]['X-Apple-Tz'] = X_APPLE_TZ;
    headers[:request]['X-Apple-Validation'] = X_APPLE_VALIDATION;  
  }
  mech_agent.user_agent = 'iTunes/9.1.1 (Windows; Microsoft Windows 7 x64 Business Edition (Build 7600)) AppleWebKit/531.22.7'
  mech_agent
end

Примечание: константы в примере - это просто строки ... не так уж важно, какими они являются, если вы знаете, что можете добавить туда любую строку

Используя этот подход, вы сможете изменять / добавлять любые заголовки, которые могут понадобиться веб-приложению.

Если это не та проблема, с которой вы столкнулись, то опубликуйте более подробные сведения о том, что именно происходит.

1 голос
/ 12 января 2011

Попробуйте установить пользовательский агент:

agent = Mechanize.new do |a|
  a.user_agent_alias = 'Mac Safari'
end

Некоторые сайты, кажется, требуют этого.

...