Отправка полей входа в систему во время процесса парсинга с помощью ruby?

Мне нужно извлечь некоторые финансовые данные из системы под названием NetTeller.

Пример можно найти здесь .

Обратите внимание на подсказку в поле начального идентификатора:

Поле идентификатора

Затем после отправки вы должны ввести свой пароль: Поле пароля

Как видите, это двухэтапный процесс, в котором вы сначала вводите идентификационный номер, а затем после отправки пользователю предоставляется поле с паролем. У меня здесь несколько препятствий, когда дело доходит до преодоления этих двух препятствий, прежде чем войти в систему и получить данные, которые мне действительно нужны. Как можно обработать такой сценарий, как этот, когда вам нужно сначала пройти через поля аутентификации, прежде чем перейти к данным, которые вы хотите очистить?

Я предполагал, что могу просто перейти к httpclient и nokogiri, но мне любопытно, есть ли какие-нибудь уловки при работе с двухстраничным входом, подобным этому, перед тем, как попасть в вашу цель.


person ylluminate    schedule 17.08.2014    source источник


Ответы (1)


Я бы использовал Mechanize. Первая страница «сложна», потому что форма входа находится внутри iframe. Таким образом, вы можете использовать только источник, из которого загружается iframe. Вот как:

agent = Mechanize.new

# Get first page
iframe_url = 'https://www.banksafe.com/sfonline/'
page = agent.get(iframe_url)
login_form = page.forms.first
username_field = login_form.field_with(:name => "12345678")

# Get second page
response = login_form.submit
second_login_form = response.forms.first
password_field = second_login_form.field_with(:password => "xxxxx")

# Get page to scrap
response = second_login_form.submit

Вот как вы можете обработать подобный сценарий. Очевидно, вам может потребоваться адаптироваться к тому, как именно записываются эти формы / поля и другие детали конкретной страницы, но я бы выбрал этот подход.

person Nobita    schedule 17.08.2014