2011-07-20 27 views
0

我知道是一个很简单的问题,但我一直停留了一个小时,我只是不明白这是如何工作。如何使用ruby中的mechanize插入字符串到文本字段?

我需要从我的学校的图书馆凑了一些东西,所以我需要插入“CE”文本字段,然后单击文本“Clasificación”的链接。输出是我将要用来工作的。所以这是我的代码。

require 'rubygems' 
require 'open-uri' 
require 'nokogiri' 
require 'mechanize' 

url = 'http://biblio02.eld.edu.mx/janium-bin/busqueda_rapida.pl?Id=20110720161008#' 
searchStr = 'CE' 

agent = Mechanize.new 
page = agent.get(url) 

searchForm = page.form_with(:method => 'post') 
searchForm['buscar'] = searchStr 

clasificacionLink = page.link_with(:href => "javascript:onClick=set_index_and_submit(\'51\');").click 
page = agent.submit(searchForm,clasificacionLink) 

当我运行它,它给了我这个错误

janium.rb:31: undefined method `[]=' for nil:NilClass (NoMethodError) 

谢谢!

+1

这里是第31行? – Dejan

回答

1

亩的回答听起来很合理。我不确定这是否是绝对必要的,但你也可以尝试在searchStr左右加上大括号。

searchForm['buscar'] = [searchStr] 
3

我认为你的问题实际上是在第13行,而不是31,我甚至会告诉我为什么认为。不仅你的脚本没有31线,但,从fine manual

form_with(标准)
找到一个单一的形式匹配标准。

该页面上有几种形式有method="post"。显然机械化返回nil当它不能完全匹配form_with标准,包括在文档中所提及的单部分;所以,如果你的criteria比赛超过一两件事,form_with回报nil而不是选择的选项之一,你最终要做到这一点:

nil['buscar'] = searchStr 

nil没有一个[]=方法让您得到您的NoMethodError

如果使用这样的:

searchForm = page.form_with(:name => 'forma') 

你会得到过去的第一部分,因为正好是一个形式name="forma"该网页上。那么你会遇到这个问题:

clasificacionLink = page.link_with(:href => "javascript:onClick=set_index_and_submit(\'51\');").click 
page = agent.submit(searchForm, clasificacionLink) 

作为Mechanize不知道如何处理JavaScript(至少我不这样做)。但是,如果你只使用此:

page = agent.submit(searchForm) 

你会得到一个page,然后就可以继续构建和调试脚本。

+0

谢谢!正在工作:) – arturodz

相关问题