如何在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)

谢谢!

我认为你的问题实际上是在第13行,而不是31行,我甚至会告诉为什么我这样认为。您的脚本不仅没有31行,而且,从精细的手册:

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)

as Mechanize不知道如何使用JavaScript(至少我的不知道)。但是如果你只用这个:

page = agent.submit(searchForm)

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

我的回答听起来很合理。我不确定这是否严格必要,但您也可以尝试在searchStr周围加上大括号。

searchForm['buscar'] = [searchStr]

相关内容

  • 没有找到相关文章

最新更新