2011-12-21 64 views
3

我在Ruby中使用Watir-Webdriver庫來檢查某些頁面。我知道我可以通過使用watir-webdriver在保持瀏覽器打開的狀態下更改代理

profile = Selenium::WebDriver::Firefox::Profile.new#create a new profile 
profile.proxy = Selenium::WebDriver::Proxy.new(#create proxy data for in the profile 
    :http => proxyadress, 
    :ftp => nil, 
    :ssl => nil, 
    :no_proxy => nil 
) 
browser = Watir::Browser.new :firefox, :profile => profile#create a browser window with this profile 
browser.goto "http://www.example.com" 
browser.close 

但是,使用不同的代理想要當連接到同一個頁面多次,我要創建爲每個代理一個新的瀏覽器的代理連接。加載(和卸載)瀏覽器需要相當長的一段時間。

所以,我的問題:有沒有辦法改變,在ruby中使用webdriver,Firefox使用代理地址來連接,同時保持瀏覽器打開?

+0

爲什麼你需要不同的代理? – 2011-12-22 02:19:24

+0

因爲我試圖測試代理的可用性。 – Qqwy 2011-12-22 08:44:01

+0

也許有更直接的方法來做到這一點?一些方法直接查詢代理,看看它是否存在,而不是間接地通過你似乎在嘗試的'set-it,try-a-page-and-se-if-it-loading'方法。 – 2011-12-22 22:16:14

回答

2

如果要測試通過代理服務器訪問時頁面是否被阻止,可以通過無頭庫實現。我最近使用機械化取得了成功。你也可以使用net/http。

我仍然不確定爲什麼您需要更改當前會話的代理服務器。

require 'Mechanize' 
session = Mechanize.new 
session.set_proxy(host, port, user, pass) 
session.user_agent='Mac Safari' 
session.agent.robots = true #observe of robots.txt rules 
response = session.get(url) 
puts response.code 

您需要提供代理主機/端口/用戶/密碼(用戶/密碼是可選的),以及網址。如果你得到一個異常,那麼response.code可能不友好。

1

您可能需要使用操作系統級自動化工具來自動執行FF菜單,以便根據用戶更改設置。

對於Windows用戶,可以選擇新的RAutomation工具或AutoIT。兩者都可用於在操作系統UI級別自動執行操作,這會讓您進入瀏覽器設置並在那裏更改代理。

不過,如果你正在檢查站點數量較多的開銷更改代理服務器設置不會太大相比,所有的網址導航,等待頁面加載等。我倒是覺得

除非您正在爲每個正在檢查的網站多次採用「行遍歷」方法並更改代理設置?如果是這種情況,我會採取更多的逐列方法(如果我們假定每列都是代理,每行都是一個站點)並啓動瀏覽器以查找一個代理,請檢查所有網站,然後更改代理並重新檢查所有網站。這樣,您只需爲每個代理更改一次代理設置,而不會爲腳本添加太多開銷。

這可能意味着更多的工作來存儲和報告結果(如果你一直在寫一行),但這是哈希或數組的用途。

+0

我正在使用Windows Vista。使用操作系統級別的自動化工具,你的意思是可以在FireFox的菜單上「點擊」以這種方式編輯代理? – Qqwy 2011-12-22 23:22:13

+0

是的,watir只能在瀏覽器窗口內自動運行,不能調用瀏覽器本身的其他菜單等。在操作系統級別工作的自動化工具可以操縱瀏覽器的菜單。 – 2011-12-27 08:44:15

相關問題