使用Python的Selenium:为firefox输入/提供http代理密码

Cla*_*diu 20 python firefox selenium selenium-webdriver

我想使用selenium和受密码保护的代理.代理不是固定的,而是一个变量.所以这必须在代码中完成(只需在这台特定的机器上设置firefox以使用代理就不太理想了).到目前为止,我有以下代码:

fp = webdriver.FirefoxProfile()
# Direct = 0, Manual = 1, PAC = 2, AUTODETECT = 4, SYSTEM = 5
fp.set_preference("network.proxy.type", 1)

fp.set_preference("network.proxy.http", PROXY_HOST)
fp.set_preference("network.proxy.http_port", PROXY_PORT)

driver = webdriver.Firefox(firefox_profile=fp)
driver.get("http://whatismyip.com")
Run Code Online (Sandbox Code Playgroud)

此时,弹出对话框,请求代理用户/通过.

是否有一种简单的方法:

  1. 在对话框中键入user/pass.
  2. 在较早阶段提供用户/通行证.

Mik*_*ike 23

硒本身不能做到这一点.这里描述我发现有用的唯一方法.简而言之,您需要在执行身份验证时添加浏览器扩展.这比看起来简单得多.

以下是Chrome的工作原理(在我的例子中):

  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']
);
Run Code Online (Sandbox Code Playgroud)

不要忘记将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"
}
Run Code Online (Sandbox Code Playgroud)
  1. 将创建的proxy.zip添加为扩展名

    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()
    
    Run Code Online (Sandbox Code Playgroud)

而已.对我而言,就像一个魅力.如果您需要动态创建proxy.zip或需要PHP示例,请转到原始帖子

  • 那么如何与加法扩展通信呢?支持我想动态更改代理 (2认同)

Mis*_*sev -8

你试过了吗PROXY_HOST = "http://username:password@proxy.host.com"

从 Selenium 2.0 beta 1 开始,内置了对处理弹出对话框的支持。

  • `PROXY_HOST = "用户名:password@proxy.host.com"` 不起作用。对于弹出对话框处理,如何定位要输入的用户/密码元素? (2认同)