2012-10-11 70 views
11

目前這是我的代碼,但webDriver顯示彈出窗口來輸入代理憑證,我不想要這種煩人的情況,這不是第一次在stackoverflow中出現同樣的問題,但沒有人回答正確的答案。如何在python中需要身份驗證的代理服務器後面運行selenium web驅動程序

我試圖谷歌找到這個問題的解決方案。我來了解java中的解決方案,但我不知道我們如何在python中做到這一點。

PROXY_HOST = "65.49.1.59" 
    PROXY_PORT = 60099 
    fp = webdriver.FirefoxProfile() 
    # Direct = 0, Manual = 1, PAC = 2, AUTODETECT = 4, SYSTEM = 5 

    print " im in parse_details" 

    fp.set_preference("network.proxy.type", 1) 
    fp.set_preference('network.http.phishy-userpass-length', 255) 

    fp.set_preference("network.proxy.http", PROXY_HOST) 
    fp.set_preference("network.proxy.http_port", PROXY_PORT) 
    fp.set_preference("network.proxy.ftp", PROXY_HOST) 
    fp.set_preference("network.proxy.ftp_port", PROXY_PORT) 
    fp.set_preference("network.proxy.ssl", PROXY_HOST) 
    fp.set_preference("network.proxy.ssl_port", PROXY_PORT) 
    #fp.set_preference("network.proxy.user_name", 'someusername') 
    #fp.set_preference("network.proxy.password", 'somepassword') 
    fp.set_preference("network.proxy.no_proxies_on", "") # set this value as desired 

    self.driver = webdriver.Firefox(firefox_profile=fp) 
    self.driver.get("http://www.whatismyip.com/") 

這些下面的語句都是由我猜,我不知道他們是否語法正確與否,甚至我試圖找出硒文檔中,但沒有幫助。你們可以向我們提供一些信息。

#fp.set_preference("network.proxy.user_name", 'someusername') 
    #fp.set_preference("network.proxy.password", 'somepassword') 

p.s.同樣的問題在這裏問Selenium using Python: enter/provide http proxy password for firefox

回答

3

我知道它很晚回覆你的問題,但最近我開始使用Python,並試圖做同樣的事情,並做了這樣的事情來處理這種情況。

運行硒網絡司機後面代理服務器

  1. 需要創建一個Firefox的配置文件,其中附加應安裝「autoauth」。
  2. 嘗試通過手動點擊URL來保存代理服務器用戶名&密碼。
  3. Firefox配置文件將藉助autoauth保存代理服務器的憑證
  4. 在腳本中調用該特定的Firefox配置文件。
  5. 設置所有首選項以定義代理服務器詳細信息。在對瀏覽器的實例
  6. 打任何URL,下面
  7. 分配Firefox配置文件是運行例子

附: :刪除所有代理的Internet選項設置,腳本將使用它自動

因此從技術上講在這裏你將不會發送代理的用戶名密碼&,你會保存在Firefox的憑證,並調用特定的Firefox配置文件。

希望你早已解決了你的問題,但如果它仍然存在,這可能對你有幫助。 :)

0

參考這條道路上如何訪問Firefox的配置: http://software-testing-tutorials-automation.blogspot.jp/2014/05/how-to-create-and-use-custom-firefox.html

基本上你需要創建一個配置文件,並使用該配置文件在Firefox。 現在您的配置文件的行爲也將通過硒運行時相同。所以如果你的配置文件會提示代理認證,那麼當你通過硒打開時它也會顯示。 因此,您必須通過使用附件來隱藏使用該配置文件的身份驗證。在你成功完成之後,現在和Selenium一樣。

7

Selenium無法使用基本身份驗證進行處理,但它無法與彈出窗口配合使用。但是這個問題是可以解決的。作爲一種解決方案,我工作(我發現它here)是添加一個瀏覽器擴展,爲Selenium進行身份驗證。這很簡單。下面是它的工作原理爲Chrome和Python:

  1. 創建一個zip文件proxy.zip包含兩個文件:

background.js

var config = { 
    mode: "fixed_servers", 
    rules: { 
     singleProxy: { 
     scheme: "http", 
     host: "YOU_PROXY_ADDRESS", 
     port: parseInt(YOUR_PROXY_PORT) 
     }, 
     bypassList: ["foobar.com"] 
    } 
    }; 

chrome.proxy.settings.set({value: config, scope: "regular"}, function() {}); 

function callbackFn(details) { 
    return { 
     authCredentials: { 
      username: "YOUR_PROXY_USERNAME", 
      password: "YOUR_PROXY_PASSWORD" 
     } 
    }; 
} 

chrome.webRequest.onAuthRequired.addListener(
     callbackFn, 
     {urls: ["<all_urls>"]}, 
     ['blocking'] 
); 

不要忘記將YOUR_PROXY_ *代替到您的設置。

的manifest.json

{ 
    "version": "1.0.0", 
    "manifest_version": 2, 
    "name": "Chrome Proxy", 
    "permissions": [ 
     "proxy", 
     "tabs", 
     "unlimitedStorage", 
     "storage", 
     "<all_urls>", 
     "webRequest", 
     "webRequestBlocking" 
    ], 
    "background": { 
     "scripts": ["background.js"] 
    }, 
    "minimum_chrome_version":"22.0.0" 
} 
  • 添加創建proxy.zip作爲擴展
  • Python代碼:

    from selenium import webdriver 
    from selenium.webdriver.chrome.options import Options 
    
    chrome_options = Options() 
    chrome_options.add_extension("proxy.zip") 
    
    driver = webdriver.Chrome(executable_path='chromedriver.exe', chrome_options=chrome_options) 
    driver.get("http://google.com") 
    driver.close() 
    

    就是這樣。對我來說,這就像一個魅力。如果您需要動態創建proxy.zip或需要PHP示例,請轉至original post

    +0

    警告任何想爲Firefox執行此操作的人:Firefox不支持onAuthRequired。 –

    +0

    @XaviLópez,你在說什麼?這是迄今爲止我找到的唯一解決方案。 – Toolkit

    +0

    @XaviLópez好的,酷,我也會清理評論。但是這很瘋狂,我找不到任何可以與Chrome代理身份驗證一起使用的內容...... – Toolkit

    相關問題