2012-01-24 49 views
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 

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

赦免,实际上一个问题与上述链接完全矛盾。前面提到的问题是here。重申两个不同的问题,两个不同的答案。也许这个API或习惯用语改变了。

+0

为什么你'需要'rubygems''两次,并且需要Net :: HTTP和Net :: HTTPS?第一个是多余的,如果你使用机械化,最后两个不应该被需要。 –

+0

哦,复制/粘贴有rubygems两次。我会解决这个问题,并删除网络的东西。 – Thufir

+0

修复了需要的东西,特赦。总之,同样的结果,我的系统仍然需要完整的类。问题仍然有效。谢谢你。 – Thufir

回答

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访问红宝石。在Windows或Linux上默认情况下不安装Ruby,并且通常不会在该路径上。

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

sudo gem update mechanize 

苹果并使用Ruby在Mac OS的应用程序,所以你必须更新其预装的宝石时要注意这一点。

+0

好吧,外面的字符限制要全贴。然而,irb的结果与我在ruby中的结果相同,不过。无可否认,我正在升级我的系统,所以只需使用rubygems来引入机械化。 – Thufir

+0

哦,我在Ubuntu上,但也许这是你建议的路径问题。也许这也解释了上一个问题。 – Thufir

+0

!!!!!拒绝通知!!!!! WWW常数已弃用,请切换至新的顶级机械化常数 。机械化版本2.0中将删除WWW 您已经从./bar.rb:14中引用了WWW常量,请 将“WWW”切换为“机械化”。谢谢! 此致 Pew Pew Pew – Thufir