ruby mechanize需要完整的类名

时间:2012-01-24 00:36:34

标签: ruby rubygems mechanize nameerror

为什么你需要机械化的全名:

#!/usr/bin/ruby -w

require 'rubygems'
require 'pp'
require 'yaml'
require "mechanize"


yml = YAML.load_file 'login.yml'
user = yml["user"]
pword = yml["pword"]

a = WWW::Mechanize.new { |agent|
  agent.user_agent_alias = 'Mac Safari'
}

a.get('http://google.com/') do |page|
  search_result = page.form_with(:name => 'f') do |search|
    search.q = 'Hello world'
  end.submit

  search_result.links.each do |link|
    puts link.text
  end
end

当机械化example没有做到这一点?这是在previous问题的基础上提出的。代码仅在阅读有关此确切主题的上一个问题并添加完整的类(?)名称后才起作用。我在Java中看起来有些相似,但只有在它含糊不清的时候。在这里,没有任何暧昧,只有一个机械化。

请原谅,实际上一个问题完全与上述环节相矛盾。我之前提到的问题是here。重申一下,两个不同的问题,两个不同的答案。也许API或习语发生了变化。

1 个答案:

答案 0 :(得分:1)

您使用的是什么版本的Mechanize?试试gem list mechanize

使用Ruby 1.8.7-p357,1.9.2-p290和1.9.3-p0以及Mechanize 2.1我能够实例化一个实例。例如:

1.8.7 :001 > require 'mechanize'
true
1.8.7 :002 > agent = Mechanize.new
#<Mechanize:0x101baacf0
[...]

1.9.3p0 :001 > require 'mechanize'
true
1.9.3p0 :002 > agent = Mechanize.new
#<Mechanize:0x102988610
[...]

我怀疑您使用的是Mac OS,因为您正在/usr/bin访问Ruby。默认情况下,在Windows或Linux上没有安装Ruby,并且通常不会在那条路径上安装。

Apple的Ruby版本不包含Mechanize,因此您在某些时候添加了它。因为Apple没有安装它,所以更新应该是良性的,所以:

sudo gem update mechanize

Apple确实在Mac OS上使用Ruby作为应用程序,因此在更新预安装的宝石时必须注意这一点。