2015-05-01 2 views
5

Ich habe folgende Skript, um eine Webseite mit Python Selen Chrome-Treiber zu besuchen.Wie kann ich Proxy mit Authentifizierung in Selenium Chrome Web-Treiber mit Python setzen

from selenium import webdriver 
USERNAME = 'usename' 
PASSWORD = 'pass' 
proxies = ["xxx.xxx.xxx.xxx"] 
proxy_tpl ='{0}:{1}' 
proxy = proxy_tpl.format(proxies[0],'xx') 
chrome_options = webdriver.ChromeOptions() 
chrome_options.add_argument('--proxy-server=%s' % proxy) 
chrome = webdriver.Chrome(chrome_options=chrome_options) 
chrome.get("http://{0}:{1}@whatismyipaddress.com".format(USERNAME, PASSWORD)) 
driver.close() 

Chrome immer noch fragt Benutzername und Passwort, wenn ich versuche, Skript auszuführen. Wie kann ich Proxyserver vom Skript authentifizieren?

Antwort

19

dieses dieses solution in php inspiriert, schrieb ich ein Äquivalent in Python:

from selenium import webdriver 
from selenium.webdriver.chrome.options import Options 
import zipfile 

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" 
} 
""" 

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

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

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

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


pluginfile = 'proxy_auth_plugin.zip' 

with zipfile.ZipFile(pluginfile, 'w') as zp: 
    zp.writestr("manifest.json", manifest_json) 
    zp.writestr("background.js", background_js) 

co = Options() 
co.add_argument("--start-maximized") 
co.add_extension(pluginfile) 


driver = webdriver.Chrome("path/to/chromedriver", chrome_options=co) 
driver.get("http://www.google.com.br") 

In background_js Zeichenfolge, die XXX mit Ihren Daten ersetzen.

+0

Hallo, Danke für diesen Code. es funktionierte. Ich bin an einem anderen Ort fest. Ich versuche, mich mit OAuth2.0 Authentifizierung anzumelden und ich mache dies auf meinem localhost, also setze ich localhost in meinem redirect_uri. Aber aufgrund dieses Proxy-Browsers kann nicht auf localhost zugegriffen werden. Kannst du mir vorschlagen, auf dasselbe zuzugreifen? –

+1

Ich möchte fragen, ob {urls: ["< all_urls >"]}, benötigt irgendeine Änderung oder funktioniert wie es ist. Das ist mir nicht klar. – b10n1k

+0

Für mich funktionierte es damals so, wie es ist. – user3286105

Verwandte Themen