#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 и т. Д., Чтобы