簡體   English   中英

如何點擊Mechanize和Nokogiri中的鏈接?

[英]How to click link in Mechanize and Nokogiri?

我正在使用Mechanize來抓取Google Wallet的訂單數據。 我正在捕獲第一頁的所有數據,但是,我需要自動鏈接到后續頁面以獲取更多信息。

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

clickMechanize類的一種方法。

請嘗試以下表格。

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

注意mechanize_instance替換為實際變量。

你的#search不起作用,因為#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")

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

讓我們看看為什么上面的代碼可以工作:

源代碼行

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM