【问题标题】:Click javascript tab using mechanize and ruby使用 mechanize 和 ruby​​ 单击 javascript 选项卡
【发布时间】:2016-01-04 01:07:05
【问题描述】:

我正在使用 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 __doPostBack函数相关的表单:

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

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

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

【问题讨论】:

    标签: javascript ruby-on-rails ruby ruby-on-rails-4 mechanize


    【解决方案1】:

    我刚刚在我的控制台中运行了这个,你得到了这个错误

    NoMethodError: 未定义的方法 `add_field!'对于 nil:NilClass

    因为这一行返回 nil

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

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

    form = page.form("aspnetForm")
    

    【讨论】:

      猜你喜欢
      • 2011-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-19
      • 1970-01-01
      • 1970-01-01
      • 2019-10-08
      • 1970-01-01
      相关资源
      最近更新 更多