Сканирование страницы, требующей авторизации с помощью Anemone

Я использую драгоценный камень Anemone следующим образом:

  • Посетите первый URL-адрес (seed), сохраните содержимое страницы в базе данных, а также сохраните все ссылки с этой страницы в базе данных (все ссылки, которых еще нет в базе данных).
  • Загрузите следующую ссылку из базы данных, снова сохраните ее содержимое и любые другие ссылки.
  • Если другой ссылки нет, снова просканируйте все ссылки (через некоторое время), чтобы перезаписать старый контент новым.

Это работает довольно хорошо, но есть ли возможность сканировать страницы, требующие входа в систему (если я знаю имя пользователя и пароль)? Я знаю гем Mechanize, который предоставляет функциональные возможности для заполнения форм, но я не знаю, как интегрировать его в свой процесс (если это возможно). Или есть другой способ, как просканировать страницы «за» формой входа?


person kmaci    schedule 16.04.2016    source источник


Ответы (2)


В вашем случае я предлагаю использовать одно из этих решений:

Потому что эти два решения позволяют вам заполнять формы и нажимать на веб-элементы, а также делать все, что делает пользователь Интернета по умолчанию. Это невозможно в случае с драгоценным камнем Mechanize.

person stepozer    schedule 19.04.2016

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

Вот мой пример кода:

require 'mechanize'

module YourModuleName
  class YourClassName
      attr_reader :agent

      def call
        @agent = Mechanize.new
        page = @agent.get(@login_page)
        form = page.forms.first
        form.field_with(id: LoginConstant::CSS[:user_email]).value = 
        LoginConstant::USER_NAME
        form.field_with(id: LoginConstant::CSS[:user_password]).value = LoginConstant::PASSWORD
        form.submit
        self
      end
  end
end

Затем в вашем коде для сканирования страницы, запрашивающей вход в систему, как показано ниже:

response = YourModuleName::YourClassName.new('<your_login_page>').call
response.agent.get('<your_page_to_want_cralwer>')
person hainguyen    schedule 03.06.2018