2016-01-04 220 views
0

我正在使用機械化,紅寶石和紅寶石&軌道刮這website。 我想單擊「Trabajo En Sala」選項卡,以便我可以在該選項卡中抓取任何信息。點擊javascript標籤使用機械化和紅寶石

我知道mechanize不支持javascript,但是我讀到here這個人是怎麼用機械來處理javascript響應的。有一件事我注意到,我或多或少有同樣的問題,可能像他一樣使用相同的解決方案。一個原因是:

1)的標籤HREF使用相同__doPostBack()函數

<a id="ctl00_mainPlaceHolder_btnSala" href="javascript:__doPostBack('ctl00$mainPlaceHolder$btnSala','')">Trabajo en sala</a> 

enter image description here

2)當我看的源代碼,我可以清楚地看到與javascript __doPostBack函數相關的表單:

enter image description here

所以我讀過那個人的帖子,並試圖將他的解決方案修改成我的。這是我得到迄今:

require 'mechanize' 

task :scraper_test => [:environment] do 

    agent = Mechanize.new 

    page = agent.get("https://www.camara.cl/camara/diputado_detalle.aspx?prmid=968") 

    form = page.form("aspnetForm.add_field!('__EVENTTARGET','')") 
    form.add_field!('ctl00$mainPlaceHolder$btnSala','') 
    tab = agent.submit(form) 

end 

P/S:用耙內Rails應用程序即時運行此。

但是當我運行它,我得到這個錯誤:

NoMethodError: undefined method `add_field!' for nil:NilClass 

所以,你能幫我找出這樣做的正確方法?謝謝!

回答

1

我只是在我的控制檯跑了這一點,你得到這個錯誤

NoMethodError: undefined method `add_field!' for nil:NilClass

,因爲這條線返回nil

form = page.form("aspnetForm.add_field!('__EVENTTARGET','')") 

改成這樣,它會修復當前錯誤。

form = page.form("aspnetForm") 
+0

哇謝謝人..它對我很好! :) –

+0

很高興聽到它:) – MilesStanfield