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 相关文章推荐
Python读写unicode文件的方法
Jul 10 Python
Python部署web开发程序的几种方法
May 05 Python
在pandas中一次性删除dataframe的多个列方法
Apr 10 Python
pandas值替换方法
Jul 10 Python
python ChainMap的使用和说明详解
Jun 11 Python
python原类、类的创建过程与方法详解
Jul 19 Python
Python Django 命名空间模式的实现
Aug 09 Python
Pycharm和Idea支持的vim插件的方法
Feb 21 Python
Python钉钉报警及Zabbix集成钉钉报警的示例代码
Aug 17 Python
Python实现中英文全文搜索的示例
Dec 04 Python
python实现学生通讯录管理系统
Feb 25 Python
Python数据可视化之绘制柱状图和条形图
May 25 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
Symfony2框架学习笔记之表单用法详解
2016/03/18 PHP
Laravel 实现密码重置功能
2018/02/23 PHP
PHP抽象类和接口用法实例详解
2019/07/20 PHP
基于Asp.net与Javascript控制的日期控件
2010/05/22 Javascript
javascript实现Table间隔色以及选择高亮(和动态切换数据)的方法
2015/05/14 Javascript
通过实例理解javascript中没有函数重载的概念
2015/06/03 Javascript
jQuery入门之层次选择器实例简析
2015/12/11 Javascript
使用AJAX实现Web页面进度条的实例分享
2016/05/06 Javascript
jQuery扩展实现text提示还能输入多少字节的方法
2016/11/28 Javascript
Vue Router的懒加载路径的解决方法
2018/06/21 Javascript
vue中使用cookies和crypto-js实现记住密码和加密的方法
2018/10/18 Javascript
微信小程序中的canvas 文字断行和省略号显示功能的处理方法
2018/11/14 Javascript
小程序hover-class点击态效果实现
2019/02/26 Javascript
vue中的过滤器实例代码详解
2019/06/06 Javascript
layui table去掉右侧滑动条的实现方法
2019/09/05 Javascript
layui实现多图片上传并限制上传的图片数量
2019/09/26 Javascript
Json实现传值到后台代码实例
2020/06/30 Javascript
Vue v-for中的 input 或 select的值发生改变时触发事件操作
2020/08/31 Javascript
在js文件中引入(调用)另一个js文件的三种方法
2020/09/11 Javascript
Vue 401配合Vuex防止多次弹框的案例
2020/11/11 Javascript
Python中Collection的使用小技巧
2014/08/18 Python
python 常见字符串与函数的用法详解
2018/11/23 Python
python如何获取列表中每个元素的下标位置
2019/07/01 Python
使用Python生成200个激活码的实现方法
2019/11/22 Python
Python接口测试文件上传实例解析
2020/05/22 Python
Python分析微信好友性别比例和省份城市分布比例的方法示例【基于itchat模块】
2020/05/29 Python
Python3创建Django项目的几种方法(3种)
2020/06/03 Python
将不规则的Python多维数组拉平到一维的方法实现
2021/01/11 Python
TCP协议通讯的过程和步骤是什么
2015/10/18 面试题
英语专业推荐信
2013/11/16 职场文书
升职自荐信
2013/11/28 职场文书
军训自我鉴定200字
2014/02/13 职场文书
2016元旦晚会主持词
2015/07/01 职场文书
python的变量和简单数字类型详解
2021/09/15 Python
Python 居然可以在 Excel 中画画你知道吗
2022/02/15 Python
MySQL分区以及建索引的方法总结
2022/04/13 MySQL