我知道这是一个非常简单的问题,但我已经被困了一个小时而且我无法理解它是如何工作的。
我需要从我学校的图书馆抓取一些东西,所以我需要将“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 行,而且来自 fine manual :
form_with(criteria)
Find a single form matching criteria.
该页面上有多个具有 method="post"
的表单。显然 Mechanize 在不能完全匹配 form_with
条件(包括文档中提到的 single 部分)时返回 nil
;所以,如果你的 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)
您将获得一个页面
,然后您可以继续构建和调试您的脚本。
关于ruby - 如何在 ruby 中使用 mechanize 将字符串插入文本字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6769409/