我正在使用 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
那么,你能帮我找出正确的方法吗?谢谢!
最佳答案
我刚刚在控制台中运行了此命令,但您收到了此错误
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/