如何使用Python + Selenium设置代理身份验证(用户和密码)

时间:2016-07-11 10:07:57

标签: python-2.7 firefox selenium-webdriver proxy-authentication

我在Python 2.7中使用带有Selenium的Firefox WebDriver。当我运行程序时,我的python程序启动Firefox浏览器并访问不同的网站。但是,我需要使用身份验证设置代理,这样当程序访问任何网站时,它将通过代理服务器访问。

在SO上有一些类似的问题。但是,Selenium Firefox WebDriver of Python没有特定的解决方案。

5 个答案:

答案 0 :(得分:6)

除了使用保存凭据的配置文件运行Firefox。您可以加载一个在loginTextboxpassword1Textbox chrome://global/content/commonDialog.xul(警报窗口)中写入的扩展程序。

已经有一些扩展可以完成这项工作。例如:Close Proxy Authentication

https://addons.mozilla.org/firefox/downloads/latest/close-proxy-authentication/addon-427702-latest.xpi

from selenium import webdriver
from base64 import b64encode

proxy = {'host': HOST, 'port': PORT, 'usr': USER, 'pwd': PASSWD}

fp = webdriver.FirefoxProfile()

fp.add_extension('closeproxy.xpi')
fp.set_preference('network.proxy.type', 1)
fp.set_preference('network.proxy.http', proxy['host'])
fp.set_preference('network.proxy.http_port', int(proxy['port']))
# ... ssl, socks, ftp ...
fp.set_preference('network.proxy.no_proxies_on', 'localhost, 127.0.0.1')

credentials = '{usr}:{pwd}'.format(**proxy)
credentials = b64encode(credentials.encode('ascii')).decode('utf-8')
fp.set_preference('extensions.closeproxyauth.authtoken', credentials)

driver = webdriver.Firefox(fp)

答案 1 :(得分:1)

Firefox + Python有一个例子,但没有身份验证here。然后,您可以在源代码中找到其他可用参数here。所以看起来你需要以下内容:

socksUsername
socksPassword

例如:

from selenium import webdriver
from selenium.webdriver.common.proxy import *

myProxy = "host:8080"

proxy = Proxy({
    'proxyType': ProxyType.MANUAL,
    'httpProxy': myProxy, # set this value as desired
    'ftpProxy': myProxy,  # set this value as desired
    'sslProxy': myProxy,  # set this value as desired
    'noProxy': ''         # set this value as desired
    'socksUsername': = ''
    'socksPassword': = ''
    })

driver = webdriver.Firefox(proxy=proxy)

或偏好:

driverPref = webdriver.FirefoxProfile()
driverPref.set_preference("network.proxy.type", 1)
.
.
.
driverPref.set_preference('network.proxy.socks', proxyHost)
driverPref.set_preference('network.proxy.socks_port', proxyPort)
driverPref.update_preferences()

driver = webdriver.Firefox(firefox_profile=driverPref)

修改

我再次查看它,似乎无法在FF中设置身份验证详细信息,甚至手动设置。唯一的方法就是记住您输入的详细信息,这些信息由2个参数完成:

signon.autologin.proxy=true
network.websocket.enabled=false

可以使用set_preference()方法进行配置。您还可以通过浏览到about:config手动查看所有FF选项。

答案 2 :(得分:1)

Python selenium - Proxy connection with host, port, username, password的重复

硒线:https://github.com/wkeeling/selenium-wire

安装硒线

pip install selenium-wire

导入

from seleniumwire import webdriver

授权代理

options = {
'proxy': {
    'http': 'http://username:password@host:port',
    'https': 'https://username:password@host:port',
    'no_proxy': 'localhost,127.0.0.1,dev_server:8080'
    }
}
driver = webdriver.Firefox(seleniumwire_options=options)

答案 3 :(得分:1)

您可以为代理编写自己的 firefox 扩展,并从 selenium 启动。你需要写2个文件并打包。

background.js

var proxy_host = "YOUR_PROXY_HOST";
var proxy_port = YOUR_PROXY_PORT;

var config = {
    mode: "fixed_servers",
    rules: {
      singleProxy: {
        scheme: "http",
        host: proxy_host,
        port: proxy_port
      },
      bypassList: []
    }
 };


function proxyRequest(request_data) {
    return {
        type: "http",
        host: proxy_host, 
        port: proxy_port
    };
}

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

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

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

browser.proxy.onRequest.addListener(proxyRequest, {urls: ["<all_urls>"]});

ma​​nifest.json

{
  "name": "My Firefox Proxy",
  "version": "1.0.0b",
  "manifest_version": 2,
  "permissions": [
    "browsingData",
    "proxy",
    "storage",
    "tabs",
    "webRequest",
    "webRequestBlocking",
    "downloads",
    "notifications",
    "<all_urls>"
  ],
  "background": {
    "scripts": ["background.js"]
  },
  "browser_specific_settings": {
    "gecko": {
      "id": "myproxy@example.org"
    }
  }
}

接下来,您需要将此文件打包为压缩文件,以 DEFLATED 模式压缩存档,结尾为 .xpi,如 my_proxy_extension.xpi

你有两个选择:

  1. 签署您的扩展程序 Firefox extension .xpi file structure: description, contents, creation, and installation

  1. 运行未签名。对于这一步:

    1. 在 about:config 中打开 firefox 标志并将选项 xpinstall.signatures.required 设置为 false

    2. 更新 Firefox 配置文件:

      Windows:C:\Program Files\Mozilla Firefox\defaults\pref\channel-prefs.js

      Linux:/etc/firefox/syspref.js

    在文件末尾添加下一行:

     pref("xpinstall.signatures.required",false);
    

在此步骤后运行 selenium 并安装此扩展:

from selenium import webdriver

driver = webdriver.Firefox()
driver.install_addon("path/to/my_proxy_extension.xpi")

driver.get("https://yoursite.com")


 

答案 4 :(得分:0)

除了扩展答案的补充。

您还可以使用表单填写动态更改代理上的凭据。只需加载扩展页面,自动填写表单并单击“保存”!