前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >selenium Firefox 设置代理(认证)0

selenium Firefox 设置代理(认证)0

作者头像
周小董
发布于 2019-06-11 02:23:51
发布于 2019-06-11 02:23:51
3.3K00
代码可运行
举报
文章被收录于专栏:python前行者python前行者
运行总次数:0
代码可运行

版权声明:如需转载本文章,请保留出处! https://blog.csdn.net/xc_zhou/article/details/90613970

熟悉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插件将自动完成代理的授权验证过程,不会再弹出认证窗口;

上述环境涉及文件打包下载地址: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页面上有说明。

测试结果如下图所示。没有再弹出认证窗口,访问http://httpbin.org/ip直接回显了HTTP代理的IP:

Python + Firefox + 插件(closeproxy.xpi)

其中,closeproxy.xpi文件,需要Google、Bing搜下都能搜到下载地址

完整的测试代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'''
# Python + Selenium + Firefox 设置密码时,需要使用到两个插件:
# 插件1: modify_headers-0.7.1.1-fx.xpi
# 下载地址:https://github.com/mimvp/mimvp-proxy-demo
#
# 方式2: close_proxy_authentication-1.1.xpi
# 下载地址:https://github.com/mimvp/mimvp-proxy-demo
'''
from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
from selenium.webdriver.common.proxy import *
from pyvirtualdisplay import Display
from base64 import b64encode
 
 
proxy = {
    "host": "123.57.78.100",
    "port": "12345",
    "user": "username",
    "pass": "password"
}
 
profile = webdriver.FirefoxProfile()
 
# add new header
profile.add_extension("modify_headers-0.7.1.1-fx.xpi")
profile.set_preference("extensions.modify_headers.currentVersion", "0.7.1.1-fx")
profile.set_preference("modifyheaders.config.active", True)
profile.set_preference("modifyheaders.headers.count", 1)
profile.set_preference("modifyheaders.headers.action0", "Add")
profile.set_preference("modifyheaders.headers.name0", "Proxy-Switch-Ip")
profile.set_preference("modifyheaders.headers.value0", "yes")
profile.set_preference("modifyheaders.headers.enabled0", True)
 
# add proxy
profile.set_preference('network.proxy.type', 1)
profile.set_preference('network.proxy.http', proxy['host'])
profile.set_preference('network.proxy.http_port', int(proxy['port']))
profile.set_preference('network.proxy.no_proxies_on', 'localhost, 127.0.0.1')
#profile.set_preference("network.proxy.username", 'aaaaa')
#profile.set_preference("network.proxy.password", 'bbbbb')
 
# Proxy auto login
profile.add_extension('closeproxy.xpi')
credentials = '{user}:{pass}'.format(**proxy)
credentials = b64encode(credentials.encode('ascii')).decode('utf-8')
profile.set_preference('extensions.closeproxyauth.authtoken', credentials)
 
profile.update_preferences()
 
driver = webdriver.Firefox(profile)
driver.get("https://proxy.mimvp.com/ip.php")
print driver.page_source
 
driver.quit()

firefox无认证代理

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import time 
from selenium import webdriver
from selenium.webdriver.common.proxy import * 

myProxy = '202.202.90.20:8080'

proxy = Proxy({
  'proxyType': ProxyType.MANUAL, 
  'httpProxy': myProxy, 
  'ftpProxy': myProxy, 
  'sslProxy': myProxy, 
  'noProxy': ''
 })
profile = webdriver.FirefoxProfile()
profile.set_proxy(proxy)

driver=webdriver.Firefox(firefox_options=options, executable_path=Firefox_path,firefox_profile=profile) 
driver.get('https://www.baidu.com') 
time.sleep(3) 
driver.quit()

参考:https://cloud.tencent.com/info/4ebc3027294687320cd3a096dba6f09e.html https://www.cnblogs.com/lgh344902118/p/6339378.html https://cuiqingcai.com/4880.html https://blog.csdn.net/ithomer/article/details/81051721 https://segmentfault.com/q/1010000007148702/a-1020000007157385

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年05月27日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
软件测试|selenium+python基础方法封装(一)
Web自动化是自动化测试中的重要部分,作为广大测试从业者的首选学习对象,相较于C/S架构的自动化来说,B/S有着其无法忽视的诸多优势,从行业发展趋、研发模式特点、测试工具支持,其整体的完整生态已经远远超过了C/S架构方面的测试价值。
霍格沃兹测试开发Muller老师
2023/01/10
4520
Python + Selenium + Firefox 使用代理 auth 的用户名密码授权
米扑代理,全球领导的代理品牌,专注代理行业近十年,提供开放、私密、独享代理,并可免费试用
阳光岛主
2019/02/18
1.8K0
Java Selenium WebDriver:代理设置与图像捕获
在网络爬虫和自动化测试领域,Selenium WebDriver 是一个非常流行的工具,它允许开发者模拟用户在浏览器中的操作。然而,出于安全或隐私的考虑,有时我们需要通过代理服务器来发送请求。本文将介绍如何在Java环境中使用Selenium WebDriver设置代理,并捕获目标网页的图像。
小白学大数据
2024/07/25
3830
关于selenium firefox 代理设置踩坑
profile.set_preference("network.proxy.type", 1)
头铁的xmile
2020/06/04
1.2K0
Selenium + Chrome Diver密码认证的HTTP代理
默认情况下,Chrome的–proxy-server=”http://ip:port”参数不支持设置用户名和密码认证。这样就使得”Selenium + Chrome Driver”无法使用HTTP Basic Authentication的HTTP代理。一种变通的方式就是采用IP地址认证,但在国内网络环境下,大多数用户都采用ADSL形式网络接入,IP是变化的,也无法采用IP地址绑定认证。因此迫切需要找到一种让Chrome自动实现HTTP代理用户名密码认证的方案。
周小董
2019/03/25
2.6K0
selenium源码通读·10 |webdriver/common/proxy.py-Proxy类分析
1 源码路径selenium/webdriver/common/proxy.py图片2 功能说明使用代理来规避一些反爬虫策略;3 引入原因selenium webdriver测试或进行爬虫时,如果未在目标服务的白名单内,随着爬取的频率增多会被禁止访问目标服务;目标服务的反爬虫策略相对完善的情况下,容易将selenium的爬取给禁止;采用分布式selenium爬取方式时,也会很容易的被禁止爬取;综上,所以Proxy类提供了一些反爬虫策略,4 代理类型源码:class ProxyType: """
虫无涯
2023/02/09
2920
Selenium 如何使用代理 IP 进行 Web 爬虫(无认证实现、有账号密码认证实现)
👋 你好,我是 Lorin 洛林,一位 Java 后端技术开发者!座右铭:Technology has the power to make the world a better place.
Lorin 洛林
2024/01/02
4K0
Selenium 如何使用代理 IP 进行 Web 爬虫(无认证实现、有账号密码认证实现)
selenium配置有账号密码验证的代理
一.准备文件 1.background.js var config = { mode: "fixed_servers", rules: { singleProxy: { scheme: "http", host: "mimvp_proxy_host", port: parseInt(mimvp_proxy_port) }, bypassList: ["mimvp.com"] } }; chrom
小小咸鱼YwY
2020/11/13
1.9K0
通过Python3+selenium自动
使用的是selenium,最开始接触这个模块包是爬虫,这次是工作需要来自动测试网页。
py3study
2020/01/03
5910
[selenium]selenium驱动chrome爬取网页/无界面chrome/使用代理
代码可以直接运行,只需修改代理参数,该代码实现了: 1. 无代理爬取京东单个商品:selenium+headless chrome 2. 普通代理爬取京东单个商品:selenium+headless chrome+proxy 3. 需要验证的代理爬取京东单个商品:selenium+headless chrome+proxy(auth)(暂时无法使用headless方式)
蛮三刀酱
2019/03/26
9110
[1296]selenium配置带用户名和密码的隧道代理
参考:https://blog.csdn.net/crayonjingjing/article/details/137596882 https://segmentfault.com/q/1010000043258582
周小董
2024/11/24
1430
selenium设置proxy、headers(phantomjs、Chrome、Firefox)
文章参考:https://www.zhihu.com/question/35547395
周小董
2019/03/25
4.7K0
selenium.webdriver_python electron
http://blog.csdn.net/huilan_same/article/details/52789954
全栈程序员站长
2022/09/29
3010
《selenium2 python 自动化测试实战》(14)——下载文件
这歌挺好听啊~~~ 说下载文件之前,我再和大家说一下用cookie登录的事,既然我们用cookie登录,那么传过去的cookie肯定是要和对应的网站完全一致的,注意,是包括大小写哦,本
孟船长
2018/05/18
1.5K0
Python调用ip代理案例,快代理api调用demo
Python调用ip代理案例,demo,参考官方给出的案例,整理,这里使用的是快代理api,可以实现ip代理的更换,主要整理了requests的调用以及无头浏览器 Chrome的使用,同时使用了站长之家ip检测的api工具!
二爷
2020/10/19
2.3K0
Python调用ip代理案例,快代理api调用demo
selenium 和 IP代理池
selenium: Selenium 是一个自动化测试工具,利用它可以 驱动浏览器 执行特定的动作,如点击、下拉等操作(模拟浏览器操作) 同时还可以获取浏览器当前呈现的页面的源代码,做到可见即可爬
全栈程序员站长
2022/08/15
1.7K0
selenium 和 IP代理池
selenium下载文件
Firefox需要针对每种文件类型进行设置,这里需要我们查询对应文件的MIME类型,可以用以下链接进行查询:MIME 参考手册
周小董
2019/03/25
3K0
Selenium Webdriver 3.X源码分析之Proxy.py代理能力
在使用selenium webdriver测试或进行爬虫动作时,如果未在目标服务的白名单内,随着爬取的频率增多会被禁止访问目标服务。
苦叶子
2019/09/25
1.7K0
Selenium Webdriver 3.X源码分析之Proxy.py代理能力
Selenium使用代理出现弹窗验证如何处理
部分商业网站对爬虫程序限制较多,在数据采集的过程中对爬虫请求进行了多种验证,导致爬虫程序需要深入分析目标网站的反爬策略,定期更新和维护爬虫程序,增加了研发的时间和投入成本。这种情况下,使用无头浏览器例如Selenium,模拟用户的请求进行数据采集是更加方便快捷的方式。同时为了避免目标网站出现IP限制,配合爬虫代理,实现每次请求自动切换IP,能够保证长期稳定的数据采集。以python的demo为例:
小白学大数据
2024/06/08
1570
selenium+python自动化80-文件下载(不弹询问框)
前言 上一篇是点弹出框上的按钮去保存文件,本篇介绍一种更加优雅的方法,加载Firefox和Chrome的配置文件,不弹出询问框后台下载。 一、FirefoxProfile 1.点下载的时候,如下图,如
上海-悠悠
2018/04/08
2K0
selenium+python自动化80-文件下载(不弹询问框)
推荐阅读
相关推荐
软件测试|selenium+python基础方法封装(一)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验