2014-02-25 21 views
4

我正在使用Mechanize刮取Google Wallet for Order數據。我從第一頁捕獲所有數據,但是,我需要自動鏈接到後續頁面以獲取更多信息。如何點擊Mechanize和Nokogiri中的鏈接?

#purchaseOrderPager-pagerNextButton將移動到下一頁,以便我可以拾取更多記錄進行捕獲。元素看起來像這樣。我需要點擊它繼續前進。

<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) 

回答

6

clickMechanize class的方法。

請嘗試以下形式。

next_page = @orders_page.at("#purchaseOrderPager-pagerNextButton") 
mechanize_instance.click(next_page) 

注意與實際的變量替換mechanize_instance

3

你一個不工作,作爲#searchNokogiri::XML::NodeSet實例。 NodeSet是節點的集合。但在你的情況下,它是next_page是一個節點集集合,它只包含一個元素。而first會給你Nokogiri::XML::Node,這也是Nokogiri::XML::Element。如下

寫:

next_page = @orders_page.search("#purchaseOrderPager-pagerNextButton").first 

或者最好使用#at方法。

next_page = @orders_page.at("#purchaseOrderPager-pagerNextButton") 

現在#clickMechanize::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 

讓我們來看看爲什麼上面的代碼將工作:

source code lines

referer = current_page() 
    href = link.respond_to?(:href) ? link.href : 
    (link['href'] || link['src']) 
    get href, [], referer 
+0

感謝您的快速響應。我試過你的第二個選項(.at),並得到:未定義的方法'點擊'爲#(NoMethodError) – analyticsPierce

+0

此外,.search(「...」)。first option also給出相同的錯誤信息。我的嘗試中我必須錯過別的東西。 – analyticsPierce