Как нажать (по-видимому) кнопку / ссылку без формы с помощью механизации, чтобы «Показать больше» на веб-странице - PullRequest
0 голосов
/ 05 июня 2019

Я хотел бы загрузить больше данных на страницу, которую я посещаю, нажав кнопку «Показать больше», которая находится внизу страницы.

Механизм показывает мне эту кнопку в виде ссылки (см. Ниже).

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

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

Когда я вызываю метод click ниже, это выглядит так, как будто щелчок был успешным (я вижу некоторую перезагрузку в терминале), но .children.count не меняется.

#assume I already did mechanize.get(url) and I'm on the site.
#I also did a mechanize.page.links.find to get the show more button

mechanize = Mechanize.new 
showMore = #<Mechanize::Page::Link "Show More" "#">
pageWithMore = mechanize.click(showMore)

# check children of div to see if count is longer
mechanize.page.css('div.results-container').children.count
# repeatedly returns 51 after 'click' invoke 

Я ожидаю, что .children.count будет ближе к 100 после вызова метода click, а затем ~ 150 после повторного вызова.

Ответы [ 3 ]

0 голосов
/ 06 июня 2019

Вероятно, кнопка «загрузить еще» вызывает некоторый JavaScript.Механизация не поддерживает JavaScript.

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

0 голосов
/ 07 июня 2019

г.Studer верен, Mechanize не может нажать на кнопку в данном случае.Мне удалось обойти это, просмотрев сетевой запрос, вызванный нажатием кнопки.Я скопировал этот запрос как cURL и использовал методы ruby ​​для имитации дальнейших нажатий кнопок, получая нужные мне данные.

Спасибо, мистер Студер.

0 голосов
/ 06 июня 2019

Если это ссылка, которую вы можете сделать:

next_page = page.link_with(text: 'Show More').click
...