2012-01-24 50 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