2017-06-18 101 views
2

學習Ruby,早期階段。我有一個非常簡單的腳本,我在終端上運行,我希望它可以根據用戶輸入在瀏覽器中打開文件。我可以使用什麼樣的代碼(我已經找到了回報率的參考,到目前爲止,並沒有幫助):用Ruby瀏覽器打開圖像

puts "What type of train would u like to see today? steam or diesel" 
print "> " 
train = $stdin.gets.chomp 
if train == "steam" 

我可以把什麼代碼,以便腳本在瀏覽器中打開圖像XYZ?

elsif train == "diesel" 

我可以把什麼代碼,以便腳本在瀏覽器中打開圖像XYZ?

else "Sorry, I didn't understand that. Bye" 

end 

回答

1

你可能會想使用類似硒的webdriver啓動和控制瀏覽器窗口。你需要安裝selenium-webdriver gem,在這個例子中我使用的是Chrome(它也需要chromedriver),所以你需要安裝它(如果你願意,你可以使用:firefox) 。

試試這個:

require 'selenium-webdriver' 

driver = Selenium::WebDriver.for :chrome 
puts "What type of train would u like to see today? steam or diesel" 

train = gets.chomp 

if train == "steam" 
    driver.get 'https://en.wikipedia.org/wiki/Steam_locomotive' 
elsif train == "diesel" 
    driver.get 'https://en.wikipedia.org/wiki/Diesel_locomotive' 
else "Sorry, I didn't understand that. Bye" 
end 
0

打開

打開命令行Web瀏覽器的最簡單方法是使用open command。如果給定的字符串看起來像一個URL(以http開頭,具有TLD等),那麼open命令足夠聰明,可以啓動當前的默認Web瀏覽器。

反引號和%×

幸運的是,Ruby的內核模塊(其中的所有對象繼承)包括method快速啓動子shell,執行一些工作,然後返回執行你的Ruby腳本。

我們可以用反引號完成:

`open https://google.com`

或者與%X語法,這可以讓我們定義我們自己的分隔符(就個人而言,我更喜歡這種風格):

%x(open https://google.com)

上面的代碼應該在默認瀏覽器中打開一個新的瀏覽器標籤,並將其指向谷歌。作爲一個便箋,我注意到,如果您打開了多個瀏覽器窗口,那麼您可以隨意打開新選項卡的哪個窗口,因此如果您沒有看到瀏覽器彈出窗口,請檢查最小化的窗口。

值得一提的是,當子shell中的shell命令寫入stdout時,輸出將作爲字符串返回到腳本。這是偉大的,因爲我們可以做這樣的東西:

files_in_home_directory = %x(cd && ls -a)

您還可以使用字符串插值!

song = "https://open.spotify.com/track/5ghIJDpPoe3CfHMGu71E6T" 
%x(open #{song}) 

過程。spawn

上面的方法是阻塞的,這意味着您的ruby腳本停下來等待子shell完成其工作,然後再將控制權返回給您的腳本。對於在瀏覽器中打開鏈接等小事情來說,這是完全正確的,但是如果您需要在該子框架中更慢地執行某些操作,那麼您將會遇到不好的時間。 Process.spawn讓我們在另一個進程中打開子shell,然後忘掉它。無論是其完成工作或沒有,但我們的Ruby腳本可以去它的業務:

%x(sleep 10 && open https://google.com)將暫停不僅是子shell,而且你的腳本

Process.spawn("sleep 10 && open https://google.com")將讓你的腳本繼續,而子shell在另一個過程中完成其工作。

與反引號/%x方法不同,Process.spawn不會將stdout作爲字符串返回,而是返回進程ID。有many ways來驗證該過程使用pid的結果。

警告:你永遠不應該執行一個包含用戶輸入值的字符串,這只是要求麻煩。