"Selenium + Firefox"如何使用带用户名密码认证的HTTP代理
本文原创作者:鲲之鹏(http://www.site-digger.com)
本文原始链接:http://www.site-digger.com/html/articles/20180822/662.html
熟悉Firefox的同学都知道,Firefox在配置HTTP代理时无法设置用户名和密码。而收费的HTTP代理大多都是需要进行用户名和密码认证的(有的也支持IP白名单,但前提是你的IP需要固定不变)。这就使得使用Selenium + Firefox进行自动化操作非常不方便,因为每次启动一个新的浏览器实例就会弹出一个授权验证窗口,被要求输入用户名和密码(如下图所示),打断了自动化操作流程。
另外,Firefox也没有提供设置用户名密码的命令行参数(PS:phantomjs就有--proxy-auth这样的参数)。难道真的没有解决方法了?
鲲之鹏的技术人员通过研究终于找到了一个有效并且稳定的解决方案:
先介绍一个重要的角色,它的主页是 https://addons.mozilla.org/en-US/firefox/addon/close-proxy-authentication/ 。close-proxy-authentication实现了自动完成代理用户名密码认证(Proxy Authentication)的功能,它提供了一个extensions.closeproxyauth.authtoken参数用来设置代理的用户名和密码,其值为经过base64编码后的用户名密码对(如下图所示)。close-proxy-authentication会使用该值构造出"Proxy-Authorization: Basic dGVzdDp0ZXN0"头发给代理服务器,以通过认证,这就是它的工作原理。
我们就是要借助这个插件在Selenium + Firefox时自动完成HTTP代理认证,流程是这样的:
(1)通过Firefox配置选项动态添加close-proxy-authentication这个插件(默认不加载任何插件);
(2)通过配置选项设置HTTP代理的IP和端口参数;
(3)设置extensions.closeproxyauth.authtoken的值为base64encode("用户名:密码");
(4)后续访问网站的时候close-proxy-authentication插件将自动完成代理的授权验证过程,不会再弹出认证窗口;
下面是完整的测试代码:
view plain copy to clipboard print ?
# coding: utf-8
# selenium_firefox_proxy_auto_auth.py
import sys
import time
from base64 import b64encode
from selenium import webdriver
# close-proxy-authentication插件的路径
# https://addons.mozilla.org/en-US/firefox/addon/close-proxy-authentication/
PROXY_HELPER_DIR = 'close_proxy_authentication-1.1.xpi'
def test():
# HTTP(S)类型代理参数
proxy_host = '221.229.204.91'
proxy_port = 8888
proxy_username = '******'
proxy_password = '******'
fp = webdriver.FirefoxProfile()
# 添加代理认证插件
fp.add_extension(PROXY_HELPER_DIR)
# 设置代理参数
fp.set_preference( 'network.proxy.type', 1)
fp.set_preference( 'network.proxy.http', proxy_host)
fp.set_preference( 'network.proxy.http_port', proxy_port)
# 给close-proxy-authentication插件设置authtoken(即代理认证的用户名和密码)
credentials = '{}:{}'.format(proxy_username, proxy_password)
credentials = b64encode(credentials)
fp.set_preference( 'extensions.closeproxyauth.authtoken', credentials)
firefox = webdriver.Firefox(firefox_profile=fp)
# 访问http://httpbin.org/ip回显当前IP
firefox.get( 'http://httpbin.org/ip')
time.sleep( 1000)
if __name__ == '__main__':
test()
测试环境:
view plain copy to clipboard print ?
Firefox V53. 0
geckodriver v0. 18.0
selenium V3. 8.0
close-proxy-authentication V1. 1
上述环境涉及文件打包下载地址: http://pan.webscraping.cn:8000/index.php/s/PMDjc77gbCFJzpO
需要特别注意的是:
(1)close-proxy-authentication的最新版本目前是V1.1,它并不兼容最新版的Firefox,鲲之鹏的技术人员测试发现Firefox V56.0以下版本能够兼容close-proxy-authentication V1.1。
(2)不同geckodriver(Firefox的webdriver程序)版本,支持的Firefox版本也不相同,具体支持哪些版本,在geckodriver的releases页面上有说明。
测试结果如下图所示。没有再弹出认证窗口,访问httpbin.org/ip直接回显了HTTP代理的IP:
说明:该文章为 鲲之鹏 (http://www.site-digger.com)原创文章 ,您除了可以发表评论外,还可以转载到别的网站,但是请保留源地址,谢谢!!(尊重他人劳动,我们共同努力)
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30303165/viewspace-2212599/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/30303165/viewspace-2212599/
"Selenium + Firefox"如何使用带用户名密码认证的HTTP代理相关推荐
- es带用户名密码验证并配置elasticsearch-head连接
一.搭建es,带用户名密码验证 Elastic 安全是非常重要的.没有这个我们的数据可以被任何的人进行访问,串改,删除.Elastic Stack 的安全是由 x-pack 所提供的.在 Elasti ...
- java wcf 未提供用户名_WCF的用户名密码认证
以前我们用WebService做分布式系统的时候,认证是个麻烦的问题,通常的做法是继承一个SoapHeader,把用户名和密码放到里面,每调用一个方法都要把用户名和密码传递给服务器端来验证 ,效率相当 ...
- mogodb 设置用户名密码认证
mogodb 设置用户名密码认证: #step 1: create account 1. mongo; 2. use admin; 3. db.createUser({ user: "roo ...
- [WCF安全系列]认证与凭证:用户名/密码认证与Windows认证
如果要给认证下一个定义,我个人的倾向这样的定义:认证是确定被认证方的真实身份和他或她申明(Claim)的身份是否相符的行为.认证方需要被认证方提供相应的身份证明材料,以鉴定本身的身份是否与声称的身份相 ...
- WCF的用户名+密码认证方式
概述 今天在做Master Data Service(后面简称MDS)项目时需要通过WCF来使用MDS的API,从而对MDS的数据进行操作.在这个过程中,遇到了一个棘手的问题,就是在客户端调用Web ...
- 如何使用带有用户名密码认证的HTTP(S)代理?保姆级教程来了!
当我们在日常应用HTTP代理的时候,终端IP不固定的情况下,或者需要多机器同时使用HTTP代理时,就会遇到一个问题:如何使用带有用户名密码认证的HTTP(S)代理? 按照下列步骤,能轻松解决这一问题! ...
- C#访问网络共享文件夹,带用户名密码域,解决电脑重启后访问不到网络文件夹
问题:winform访问网络共享文件夹,电脑重启后访问不到指定目录 原因:访问网络共享文件夹目录需要相关的用户凭据,文件资源管理器可以记住凭据,但是电脑重启后直接用软件访问网络文件夹路径是没有凭据的, ...
- git 命令带用户名密码
git使用用户名密码clone的方式: git clone http://username:password@remote eg: username: abc@qq.com, pwd: test, g ...
- 带用户名密码的ftp访问路径
ftp://用户名:密码@url/目录 例: ftp://userchenq:pwd@192.168.1.119/platform
最新文章
- python学成需要多久-小白学python怎么快速入门?多久能完成一个项目?
- python脚本中执行另一个脚本_如何用python调用另一个python脚本?
- 装车机器人_15秒装车!行李智能分拣机器人亮相厦门机场
- @Html.ValidationSummary()的使用
- ConcurrentHashMap,一个更快的HashMap
- (六)nodejs循序渐进-数据流和文件操作(基础篇)
- git版本控制(精)
- 笔记 | 《机器学习》中计算学习理论(上)
- python 柱形图_Python 写入 Excel III 详解图形生成-柱形图
- Java游戏用户登录注册_Java实现多用户注册登录的幸运抽奖
- 如何使用以下命令 ls cat mv touch 以及如何使用 explainshell.com 这个网站
- convex optimization from stanford
- Java新职篇:多态性、封装性与继承性相互作用是什么?
- Oracle 11g 的官方支持周期和时限
- Spring Boot Mybatis 搞反向工程,太方便咯。。
- 汉化编程软件,游戏辅助集合,不定期更新,欢迎收藏
- 十一月热点:BML预置模型调参添新利器;EasyDL图像分类上线免训练极速迭代模式...
- 数据结构c语言版秦锋,数据结构(C语言版)黄国瑜.pdf
- NOI Linux 2.0的安装
- 2022 CCF中国软件大会(CCF Chinasoft)“CCF-华为胡杨林基金-系统软件专项”论坛成功召开...