单击 javascript 选项卡使用 mechanize 和 ruby

Click javascript tab using mechanize and ruby

我正在使用 mechanize,ruby 和 ruby & rails 来抓取这个 website 。 我想单击 "Trabajo En Sala" 选项卡,以便我可以抓取该选项卡中的任何信息。

我知道 mechanize 不支持 javascript,但我读到了 here 这家伙是如何使用 mechanize 来处理 javascript 响应的。我注意到一件事,我或多或少有同样的问题,可能会像他一样使用相同的解决方案。原因是:

1) 选项卡 href 使用相同的 __doPostBack() 函数

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

2) 看源码的时候可以清楚的看到javascript[=51=相关的表格] 函数:

所以我读了那个人写的 post 并试图将他的解决方案修改为我的。这就是我到目前为止得到的:

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 应用程序中使用 rake 来 运行 这个。

但是当我 运行 它时,我得到了这个错误:

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

那么,你能帮我找出正确的方法吗?谢谢!

我只是 运行 在我的控制台中使用了这个,而你收到了这个错误

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

因为这一行returns nil

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

将其更改为此,它将修复当前的错误。

form = page.form("aspnetForm")