javascript - 使用 mechanize 和 ruby​​ 单击 javascript 选项卡

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

我正在使用 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>

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

但是当我运行它时,我收到此错误:

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

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

最佳答案

我刚刚在控制台中运行了此命令,但您收到了此错误

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

因为这一行返回 nil

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

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

form = page.form("aspnetForm")

关于javascript - 使用 mechanize 和 ruby​​ 单击 javascript 选项卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34583482/

相关文章:

javascript - Phonegap/jQuery 移动页面转换闪烁

javascript - 鼠标悬停时在 d3 图表旁边的框中显示变量的所有数据

javascript - Firefox 和 IE 中的图像源分配

ruby-on-rails - Rails中Redis队列处理异步任务

ruby-on-rails - Active Record 与条件参数连接

ruby-on-rails - 如何将可选的 URL 参数映射到 params[ :something] in Rails 3 "routes.rb"?

ruby - 为什么符号不等于符号

ruby - 使用正则表达式从字符串模式中检索数字

javascript - 通过 Paypal Express Checkout 客户端 JS 按钮实现使用负测试

ruby - 计算 ruby​​ 中十分之一月的时间距离