如何使用机械化单击网页上的“显示更多”(显然)的无表单按钮/链接

时间:2019-06-05 20:37:29

标签: ruby ruby-on-rails-3 web-scraping mechanize

我想通过单击页面底部的“显示更多”按钮将更多数据加载到我正在访问的页面上。

机械化向我显示此按钮作为链接(请参见下文)。

从我完成的研究中,我应该能够使用下面列出的代码单击此按钮。但是,当我查看希望更长的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 

我希望在调用click方法之后,.children.count会接近100,而在第二次调用后,〜.150会接近150。

3 个答案:

答案 0 :(得分:0)

如果这是链接,则可以执行以下操作:

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

答案 1 :(得分:0)

“加载更多”按钮可能会触发一些JavaScript。机械化不支持javascript。

因此您可能无法通过机械化来做到这一点。您将需要其他工具,例如WATIR或Selenium。

答案 2 :(得分:0)

先生。 Studer是正确的,在这种情况下,Mechanize无法单击有问题的按钮。通过查看由于按下按钮而触发的网络请求,我能够解决此问题。我将此请求复制为cURL,并使用ruby方法来模拟进一步的按钮按下,从而产生所需的数据。

谢谢斯图德尔先生。