如何点击Mechanize和Nokogiri中的链接



我正在使用Mechanize抓取Google钱包以获取订单数据。我正在从第一页捕获所有数据,但是,我需要自动链接到后续页面以获取更多信息。

#purchaseOrderPager 页的NextButton将移动到下一页,以便我可以选取更多记录进行捕获。该元素如下所示。我需要单击它才能继续。

<a id="purchaseOrderPager-pagerNextButton" class="kd-button small right"
 href="purchaseorderlist?startTime=0&amp;...
;currentPageStart=1&amp;currentPageEnd=25&amp;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)

clickMechanize类的一种方法。

尝试以下表格。

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

相关内容

  • 没有找到相关文章

最新更新