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

2024-06-14 07:17:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我想将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")

此时,弹出请求代理用户/通行证的对话框。

有没有简单的方法:

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

Tags: 代码用户http代理drivernetworkfirefox对话框
3条回答

从selenium githubrepo中的单元测试中获得灵感之后。这对我有效:

from selenium import webdriver

PROXY_HOST = "IP_address"
PROXY_PORT = "your_proxy_port"
USERNAME = "your_user_name" 
PASSWORD = "YOUR_PASSWORD"

profile = webdriver.FirefoxProfile()
profile.set_preference("network.proxy.type", 1)
profile.set_preference("network.proxy.http", PROXY_HOST)
profile.set_preference("network.proxy.http_port", PROXY_PORT)
profile.set_preference("network.proxy.socks_username", USERNAME)
profile.set_preference("network.proxy.socks_password", PASSWORD)

profile.update_preferences()

# executable_path  = define the path if u don't already have in the PATH system variable. 
browser = webdriver.Firefox(firefox_profile=profile)
browser.get('http://website.com')
browser.maximize_window()

硒本身不能做到这一点。我发现唯一有用的方法是描述here。简而言之,您需要动态添加一个浏览器扩展来进行身份验证。这比看起来简单得多。

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

  1. 创建一个包含两个文件的zip文件proxy.zip:

背景.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']
);

不要忘记将您的代理替换为您的设置。

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

就这样。对我来说这是一种魅力。如果需要动态创建proxy.zip或需要PHP示例,请转到original post

代码对我有用

from selenium import webdriver

browser=webdriver.Firefox()

def login(browser):

    alert=browser.switch_to_alert()
    alert.send_keys("username"+webdriver.common.keys.Keys.TAB+"password")
    alert.accept() 

相关问题 更多 >