ruby - 如何在 ruby​​ 中使用 mechanize 将字符串插入文本字段?

标签 ruby screen-scraping nokogiri mechanize nomethoderror

我知道这是一个非常简单的问题,但我已经被困了一个小时而且我无法理解它是如何工作的。

我需要从我学校的图书馆抓取一些东西,所以我需要将“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/

相关文章:

ruby-on-rails - 我如何使用 Nokogiri 在 HTML 代码中找到电子邮件地址?

ruby - 如何使用 Nokogiri 获取 XML 的第一级子级

ruby - ruby 的 Hash.replace 或者 Array.replace 有什么用?

ruby-on-rails - ActionController::UnfilteredParameters(无法将不允许的参数转换为散列)- Rails 5

ruby - 来自 IntelliJ 的 Runnin rspec

Perl WWW::Mechanize JSESSION 问题

mysql - Ruby on Rails 中的嵌套查询出现问题

objective-c - 抓取和解析维基百科页面

python - 如何使用python迭代scrapy中的XML子节点?

ruby - 如何从 Nokogiri::HTML 获取标签名称和 CSS 类