Selenium chrome配置代理Python版的方法


Posted in Python onNovember 29, 2018

环境: windows 7 + Python 3.5.2 + Selenium 3.4.2 + Chrome Driver 2.29 + Chrome 58.0.3029.110 (64-bit)

Selenium官方给的Firefox代理配置方式并不起效,也没看到合适的配置方式,对于Chrome Selenium官方没有告知如何配置,但以下两种方式是有效的:

1. 连接无用户名密码认证的代理

chromeOptions = webdriver.ChromeOptions()
chromeOptions.add_argument('--proxy-server=http://ip:port') 
driver = webdriver.Chrome(chrome_options=chromeOptions)

2. 有用户名和密码的连接

from selenium import webdriverdef create_proxyauth_extension(proxy_host, proxy_port,
                proxy_username, proxy_password,
                scheme='http', plugin_path=None):
  """Proxy Auth Extension

  args:
    proxy_host (str): domain or ip address, ie proxy.domain.com
    proxy_port (int): port
    proxy_username (str): auth username
    proxy_password (str): auth password
  kwargs:
    scheme (str): proxy scheme, default http
    plugin_path (str): absolute path of the extension    

  return str -> plugin_path
  """
  import string
  import zipfile

  if plugin_path is None:
    plugin_path = 'd:/webdriver/vimm_chrome_proxyauth_plugin.zip'

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

  background_js = string.Template(
  """
  var config = {
      mode: "fixed_servers",
      rules: {
       singleProxy: {
        scheme: "${scheme}",
        host: "${host}",
        port: parseInt(${port})
       },
       bypassList: ["foobar.com"]
      }
     };

  chrome.proxy.settings.set({value: config, scope: "regular"}, function() {});

  function callbackFn(details) {
    return {
      authCredentials: {
        username: "${username}",
        password: "${password}"
      }
    };
  }

  chrome.webRequest.onAuthRequired.addListener(
        callbackFn,
        {urls: ["<all_urls>"]},
        ['blocking']
  );
  """
  ).substitute(
    host=proxy_host,
    port=proxy_port,
    username=proxy_username,
    password=proxy_password,
    scheme=scheme,
  )
  with zipfile.ZipFile(plugin_path, 'w') as zp:
    zp.writestr("manifest.json", manifest_json)
    zp.writestr("background.js", background_js)

  return plugin_path

proxyauth_plugin_path = create_proxyauth_extension(
  proxy_host="proxy.crawlera.com",
  proxy_port=8010,
  proxy_username="fea687a8b2d448d5a5925ef1dca2ebe9",
  proxy_password=""
)


co = webdriver.ChromeOptions()
co.add_argument("--start-maximized")
co.add_extension(proxyauth_plugin_path)


driver = webdriver.Chrome(chrome_options=co)
driver.get(http://www.amazon.com/)

以上直接通过python代码生成chrome所需的zip插件文件,IP端口用户名密码写上自己的,原文出处:

https://vimmaniac.com/blog/bangal/selenium-chrome-driver-proxy-with-authentication/

插件源代码 https://github.com/RobinDev/Selenium-Chrome-HTTP-Private-Proxy

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
通过数据库向Django模型添加字段的示例
Jul 21 Python
python实现kMeans算法
Dec 21 Python
JavaScript实现一维数组转化为二维数组
Apr 17 Python
Python线程池模块ThreadPoolExecutor用法分析
Dec 28 Python
python中hasattr()、getattr()、setattr()函数的使用
Aug 16 Python
python实现差分隐私Laplace机制详解
Nov 25 Python
在notepad++中实现直接运行python代码
Dec 18 Python
Pytorch mask_select 函数的用法详解
Feb 18 Python
Python建造者模式案例运行原理解析
Jun 29 Python
keras.utils.to_categorical和one hot格式解析
Jul 02 Python
python 安装移动复制第三方库操作
Jul 13 Python
Pytorch GPU内存占用很高,但是利用率很低如何解决
Jun 01 Python
在PyCharm中实现关闭一个死循环程序的方法
Nov 29 #Python
selenium使用chrome浏览器测试(附chromedriver与chrome的对应关系表)
Nov 29 #Python
python+unittest+requests实现接口自动化的方法
Nov 29 #Python
浅谈Python在pycharm中的调试(debug)
Nov 29 #Python
PyCharm+PySpark远程调试的环境配置的方法
Nov 29 #Python
利用Pycharm断点调试Python程序的方法
Nov 29 #Python
对pandas将dataframe中某列按照条件赋值的实例讲解
Nov 29 #Python
You might like
php获取中文拼音首字母类和函数分享
2014/04/24 PHP
Javascript模板技术
2007/04/27 Javascript
[原创]用javascript实现检测指定目录是否存在的方法
2008/01/12 Javascript
JS input 数字验证代码
2009/07/30 Javascript
Jquery插件之多图片异步上传
2010/10/20 Javascript
HTML颜色选择器实现代码
2010/11/23 Javascript
解析Javascript中难以理解的11个问题
2013/12/09 Javascript
Jquery基础之事件操作详解
2016/06/14 Javascript
整理一下常见的IE错误
2016/11/18 Javascript
JS解决移动web开发手机输入框弹出的问题
2017/03/31 Javascript
React利用插件和不用插件实现双向绑定的方法详解
2017/07/03 Javascript
微信小程序实现树莓派(raspberry pi)小车控制
2020/02/12 Javascript
vue element 关闭当前tab 跳转到上一路由操作
2020/07/22 Javascript
Jquery 获取相同NAME 或者id删除行操作
2020/08/24 jQuery
[51:10]VP vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[04:03][TI9趣味短片] 小鸽子茶话会
2019/08/20 DOTA
[48:28]完美世界DOTA2联赛循环赛FTD vs Magma第二场 10月30日
2020/10/31 DOTA
Python实现将doc转化pdf格式文档的方法
2018/01/19 Python
Django使用Mysql数据库已经存在的数据表方法
2018/05/27 Python
基于python代码实现简易滤除数字的方法
2018/07/17 Python
Python3编码问题 Unicode utf-8 bytes互转方法
2018/10/26 Python
python绘制雪景图
2019/12/16 Python
Python常用数据分析模块原理解析
2020/07/20 Python
Python环境使用OpenCV检测人脸实现教程
2020/10/19 Python
python实现企业微信定时发送文本消息的示例代码
2020/11/24 Python
css3 transform过渡抖动问题解决
2020/10/23 HTML / CSS
html5指南-3.如何实现html元素拖拽功能
2013/01/07 HTML / CSS
Levi’s美国官网:美国著名的牛仔裤品牌
2016/08/19 全球购物
关于礼仪的演讲稿
2014/01/04 职场文书
网上卖盒饭创业计划书
2014/01/26 职场文书
数控专业大学毕业生职业规划范文
2014/02/06 职场文书
幼儿园的门卫岗位职责
2014/04/10 职场文书
关于青春的演讲稿三分钟
2014/08/22 职场文书
小学班主任个人总结
2015/03/03 职场文书
2015年医院科室工作总结范文
2015/05/26 职场文书
你真的了解PHP中的引用符号(&)吗
2021/05/12 PHP