0

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

#!/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

当机械化示例不这样做时?这是在上一个问题的基础提出的。代码仅在阅读有关此确切主题的上一个问题并添加完整的类(?)名称后才有效。我在 Java 中似乎有点相似,但只有在它模棱两可的时候。在这里,没有什么暧昧的,只有一个机械化。

请原谅,前面的实际问题与上述链接完全矛盾。我引用的上一个问题是here。重申一下,两个不同的问题,两个不同的答案。也许 API 或习语发生了变化。

4

1 回答 1

1

你用的是什么版本的机械化?试试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 上,并且通常不会位于该路径。

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

sudo gem update mechanize

Apple 确实将 Ruby 用于 Mac OS 上的应用程序,因此在更新其预安装的 gem 时必须注意这一点。

于 2012-01-24T00:49:24.150 回答