2012-03-03 53 views
0

我正在使用WATIR來控制瀏覽器,但有一個頁面從未完全加載所有的東西。 60秒超時後,WATIR給我錯誤,我可以繼續寫命令,但如果我試圖用WATIR關閉瀏覽器,那麼所有功能都會被阻塞。Ruby:殺死Chrome進程

如果我手動關閉瀏覽器,一切似乎都保持不變,所以我正在尋找選項來查找鉻進程ID,PID並使用ruby殺死進程。

下面是代碼示例,我發現:

IRB

require "watir-webdriver" 

proxy = "78.159.102.86:49295" 
browser = Watir::Browser.new :chrome, :switches => ['--proxy-server=' + proxy] 

bridge = browser.instance_variable_get(:@bridge) 
launcher = bridge.instance_variable_get(:@launcher) 
binary = launcher.instance_variable_get(:@binary) 
process = binary.instance_variable_get(:@process) 
process.pid 

所有這些方法給我NIL。 最後一個 - NoMethodError:未定義方法`pid'爲零:NilClass

從我的研究中,我認爲我需要獲得PID。 然後我可以關閉進程。

任何提示?我正在使用Windows! 到目前爲止,似乎沒有在Ruby中通過名稱殺死進程的方法。

編輯:

我發現從Windows命令行是什麼在起作用:

taskkill /im Firefox.exe /f /t >nul 2>&1 

但因爲我在紅寶石它給了我錯誤:

SyntaxError: (irb):1: unknown regexp option - f (irb):1: syntax error, unexpected tINTEGER, expecting keyword_do or '{' or '(' taskkill /im Firefox.exe /f /t >nul 2>&1

如何執行cmd命令從紅寶石?

+0

你正在運行哪個操作系統? – Yossi 2012-03-03 21:20:30

+0

我在窗戶上! – user1237898 2012-03-03 21:21:00

+0

Chrome卡住了,因爲在鎖定時無法手動關閉它?如果您對開發團隊有任何影響,請讓他們解決問題。 – 2012-03-05 17:43:02

回答

2

我不確定系統在Windows上的工作,但試試看。

system("taskkill /im Firefox.exe /f /t >nul 2>&1") 
0

你可以這樣做:

一)取得Chrome進程的PID:

browser_pid = @browser.driver.instance_variable_get(:@bridge).instance_variable_get(:@service).instance_variable_get(:@process).pid 

傳遞browser_pid系統必殺:

system("taskkill pid #{browser_pid} /f /t >nul 2>&1") 
0

的示例代碼在原文中加上@daremkd回答給我們的內部變量爲FirefoxChrome。把它們放在一起,這裏就是我將使用一個的Watir-的webdriver的Watir ::瀏覽器#PID:

require 'watir-webdriver' 

module Watir 
    class Browser 
    def pid 
     if driver.browser == :firefox 
     [:@bridge, :@launcher, :@binary, :@process, :@pid] 
     elsif driver.browser == :chrome 
     [:@bridge, :@service, :@process, :@pid] 
     else 
     raise NotImplementedError.new "PID lookup undefined for Watir::Browser :#{driver.browser}" 
     end. 
     inject(browser.driver) { |pv, sym| pv.instance_variable_get sym } 
    end 
    end 
end 


這裏所使用的上下文中使用,關閉兩個瀏覽器猴子補丁:

browser = Watir::Browser.new :firefox 
pid = browser.pid 
`taskkill /pid #{pid}` # browser.close 

browser = Watir::Browser.new :chrome 
pid = browser.pid 
`taskkill /pid #{pid} /f /t` # note the `/t` to kill the spawned tree