Использование ruby mechanize в формах, не указанных в теге ?

#html #ruby-on-rails #ruby #mechanize

Вопрос:

Поэтому я пытаюсь очистить веб — сайт, на котором есть то, что я бы назвал формой — несколько входов для специализированного поиска, таких как <select>и текстовые вводы, — которые не находятся в тегах <select><форма>.
Скорее, они, похоже, сгруппированы в <div>s.

Оттуда сайт запрашивает с помощью JavaScript, поэтому, по сути, все, что я хочу сделать, это заполнить «форму» (различные входные данные), а затем нажать кнопку «Отправить» и сохранить возвращенную информацию.

Однако я не могу найти способ в механизации, чтобы хватать кнопки, кнопки выбора и т. Д., Которые Не находятся в формах. Есть ли способ?

Комментарии:

1. Вы не сможете использовать form_with его для целевых элементов, которые не находятся внутри формы, если вы пытаетесь это сделать… Однако, поскольку вы не показали нам ни HTML, ни свой код, я могу дать еще несколько советов, кроме «Да, есть способ».

2. Например, вы можете находить элементы по идентификатору, или с помощью CSS, или с помощью XPath, или внутри iFrame, или что угодно еще. Но я не могу предложить, что возможно, не говоря уже о том, что «лучше», ничего не зная о HTML, на который вы ориентируетесь

3. @TomLord не является ли механизация просто скребком поверх синтаксического анализатора HTML? Если вы хотите запустить javascript, вместо этого вам понадобится автоматизация браузера (Capybara).

4. @TomLord Я хотел бы поделиться HTML, но не могу, я просто очень смущен тем, что механизация будет настолько жесткой, что позволит использовать этот таргетинг только с формами, поэтому, думаю, мне придется использовать Nokogiri и xpath. Спасибо, что откликнулись!

5. @DesPhantomes mechanize не является жестким в том, что позволяет ориентироваться только на формы. Вы можете нацелиться на любой элемент. Но если вы используете form_for метод, то, по определению, этот метод работает только при нацеливании на форму.

Ответ №1:

Механизация не может работать на интерактивных веб-сайтах JS.

Для веб-скрейпинга я бы предложил использовать фреймворк Kimurai. Он построен поверх механизации.

Kimurai-это современная платформа для очистки веб-страниц, написанная на Ruby, которая работает из коробки с безголовым Chromium/Firefox, PhantomJS или простыми HTTP-запросами и позволяет очищать и взаимодействовать с веб-сайтами, отображаемыми на JavaScript.

Используйте любой из доступных движков JS во время очистки.

Вы можете выполнить JS, который запускает событие для отображения формы, и там вы можете использовать помощников капибары для заполнения формы и отправки

Вся мощь капибары: используйте такие методы, как click_on, fill_in, select, choose, set, go_back и т. Д., Чтобы