我在Python 2.7中使用带有Selenium的Firefox WebDriver。当我运行程序时,我的python程序启动Firefox浏览器并访问不同的网站。但是,我需要使用身份验证设置代理,这样当程序访问任何网站时,它将通过代理服务器访问。
在SO上有一些类似的问题。但是,Selenium Firefox WebDriver of Python没有特定的解决方案。
答案 0 :(得分:6)
除了使用保存凭据的配置文件运行Firefox。您可以加载一个在loginTextbox
和password1Textbox
chrome://global/content/commonDialog.xul
(警报窗口)中写入的扩展程序。
已经有一些扩展可以完成这项工作。例如:Close Proxy Authentication
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>"]});
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 模式压缩存档,结尾为 .xpi,如 my_proxy_extension.xpi。
你有两个选择:
或
运行未签名。对于这一步:
在 about:config 中打开 firefox 标志并将选项 xpinstall.signatures.required 设置为 false
或
更新 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)
除了扩展答案的补充。
您还可以使用表单填写动态更改代理上的凭据。只需加载扩展页面,自动填写表单并单击“保存”!