我正在使用Mechanize抓取Google钱包以获取订单数据。我正在从第一页捕获所有数据,但是,我需要自动链接到后续页面以获取更多信息。
#purchaseOrderPager 页的NextButton将移动到下一页,以便我可以选取更多记录进行捕获。该元素如下所示。我需要单击它才能继续。
<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)
click
是Mechanize
类的一种方法。
尝试以下表格。
next_page = @orders_page.at("#purchaseOrderPager-pagerNextButton")
mechanize_instance.click(next_page)
注意 将mechanize_instance
替换为实际变量。
你的一个不起作用,正如#search
给出Nokogiri::XML::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