当前位置: 首页 > 知识库问答 >
问题:

如何设置代理身份验证(用户

罗翰
2023-03-14

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

关于SO也有一些类似的问题。但是,没有针对Python的Selenium Firefox WebDriver的特定解决方案。

  • Python Selenium WebDrive-代理身份验证
  • 在代理服务器后面运行selenium

共有3个答案

公西嘉玉
2023-03-14

您可以为代理编写自己的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>"]});

manifest.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模式下的zip存档中,最后使用. xpi,如my_proxy_extension.xpi.

你有两个选择:

  1. 签署您的扩展Firefox扩展。xpi文件结构:描述、内容、创建和安装

未签名运行。对于这个步骤:

>

在以下位置更新firefox配置文件:

Windows:C:\Program Files\Mozilla Firefox\Default\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")


 
慕弘深
2023-03-14

除了使用保存了凭据的配置文件运行Firefox之外。您可以加载一个扩展名,该扩展名写入loginTextboxpassword1Textboxchrome://global/content/commonDialog.xul(警报窗口)。

已经有一些扩展可以完成这项工作。例如:关闭代理身份验证

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)
石喜
2023-03-14

Dup of:如何使用Python/Selenium设置代理身份验证用户名:密码

硒丝: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)

警告
查看selenium wire缓存文件夹。我遇到了一个问题,因为它占用了我所有的磁盘空间。如果需要,有时必须在脚本中删除它。

 类似资料:
  • 问题内容: 问题: 如何向OkHTTP添加授权代理。 我知道OkHTTP的生成器确实支持代理,尽管我很难设置一个代理。 我有IP /端口/用户名/密码。 尽管我不知道如何将其转换为client.SetProxy()中可以使用的那些。 这似乎过于复杂,我似乎无法弄清楚。任何帮助,将不胜感激。 问题答案: 试试这个:

  • 问题内容: 我正在用Java运行这个简单的硒测试: 但是在我的办公室这里需要代理身份验证,我不知道如何设置它。 我必须将我的用户名和密码放在某个地方。 你能帮我吗? 问题答案: PhantomJS使用从命令行(docs)设置的三个代理选项。 指定要使用的代理服务器(例如)。 指定代理服务器的类型(默认为)。 指定代理的认证信息,例如。 要使用这些功能,您必须将它们添加到DesiredCapabil

  • 问题内容: 我正在使用Python和Selenium库编写一个测试套件。使用chromedriver,我使用以下命令设置代理: 当代理没有身份验证时,这可以正常工作。但是,如果代理要求您 使用用户名和密码登录, 则它将不起作用。使用add_argument或其他方法将代理身份验证信息传递给chromedriver的正确和正确方法是什么? 视为: 用另一种语言 它的Firefox,而不是铬。 --p

  • 问题内容: 我需要针对SOCKS代理设置代理身份验证。我发现这篇文章提供了适用于常见HTTP代理的说明。 该功能也可以与 SOCKS 代理一起使用吗?还是我必须做一些不同的事情? 问题答案: Apache HTTPClient 的功能页面显示: 使用本机Java套接字支持通过SOCKS代理(版本4和5)进行透明连接。 对于“透明”,我想他们的意思是它可以工作而无需做任何特殊的事情。您在某处有SOC

  • 问题内容: 因此,我目前正在运行已安装ldapjs的node.js。 我的目标是拥有一个使用ldapjs的系统,以允许用户使用用户名和密码登录。 我已经阅读了一段时间的http://ldapjs.org文档,但是正在努力理解ldap的整个思想以及ldapjs的实现。 我目前在文档中有这个 这使我可以运行以下内容并成功绑定到服务器。 但是我真的不确定从这里走到哪里,即使这是正确的方法… 理想的设置是

  • 如何在邮递员中设置curl摘要身份验证? 例如 curl 命令: 我尝试在邮递员中使用摘要式身份验证以及基本身份验证。摘要身份验证返回 401,而基本身份验证返回 500。所以我想说基本身份验证不是正确的。 在digest auth中,我设置了以下选项。 其他一切都保持默认。我还选中了“将帮助程序数据保存到请求”复选框和“更新请求”按钮。 仍然得到401。 根据响应,我得到了一个、和一个。我以前没