我正在使用Mechanize来抓取Google电子钱包的订单数据。我正在捕获第一页的所有数据,但是,我需要自动链接到后续页面以获取更多信息。
#purchaseOrderPager-pagerNextButton将移至下一页,以便我可以获取更多要捕获的记录。元素看起来像这样。我需要点击它继续前进。
<a id="purchaseOrderPager-pagerNextButton" class="kd-button small right"
href="purchaseorderlist?startTime=0&...
;currentPageStart=1&currentPageEnd=25&inputFullText=">
<img src="https://www.gstatic.com/mc3/purchaseorder/page-right.png"></a>
然而,当我尝试以下操作时出现错误:
next_page = @orders_page.search("#purchaseOrderPager-pagerNextButton")
next_page.click
错误:
undefined method `click' for #<Nokogiri::XML::NodeSet:0x007f9019095550> (NoMethodError)
答案 0 :(得分:6)
click
是Mechanize
class的方法。
请尝试以下表格。
next_page = @orders_page.at("#purchaseOrderPager-pagerNextButton")
mechanize_instance.click(next_page)
注意将mechanize_instance
替换为实际变量。
答案 1 :(得分:3)
你的那个不起作用,因为#search
给了Nokogiri::XML::NodeSet
个实例。 NodeSet 是节点的集合。但在您的情况下,next_page
是 NodeSet 集合,它只包含一个元素。 first
会为您提供Nokogiri::XML::Node
,也是Nokogiri::XML::Element
。
写如下:
next_page = @orders_page.search("#purchaseOrderPager-pagerNextButton").first
或者更好地使用#at
方法。
next_page = @orders_page.at("#purchaseOrderPager-pagerNextButton")
现在#click
是Mechanize::Page::Link
实例的方法。打开源:
# File lib/mechanize/page/link.rb, line 29
def click
@mech.click self
end
以下是完整代码: -
next_page = @orders_page.at("#purchaseOrderPager-pagerNextButton")
# mech is your Mechanize object.
next_link = Mechanize::Page::Link.new( next_page, mech, @orders_page )
next_link.click
Mechanize#click
允许您提供带有锚点 / 按钮文本的字符串,以便点击和Nokogiri::XML::Node
。所以我们可以这样做:
mech.click next_page
让我们看看为什么上面的代码会起作用:
referer = current_page()
href = link.respond_to?(:href) ? link.href :
(link['href'] || link['src'])
get href, [], referer