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实现去除代码前行号的方法
Mar 10 Python
pygame学习笔记(5):游戏精灵
Apr 15 Python
深入浅析python继承问题
May 29 Python
python自动截取需要区域,进行图像识别的方法
May 17 Python
Python实现识别图片内容的方法分析
Jul 11 Python
Linux下python3.6.1环境配置教程
Sep 26 Python
浅谈Python接口对json串的处理方法
Dec 19 Python
python列表每个元素同增同减和列表元素去空格的实例
Jul 20 Python
django框架面向对象ORM模型继承用法实例分析
Jul 29 Python
Centos7 下安装最新的python3.8
Oct 28 Python
常用python爬虫库介绍与简要说明
Jan 25 Python
Django CBV模型源码运行流程详解
Aug 17 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
Optimizer与Debugger兼容性问题的解决方法
2008/12/01 PHP
PHP获取当前文件所在目录 getcwd()函数
2009/05/13 PHP
PHP中isset与array_key_exists的区别实例分析
2015/06/02 PHP
Yii开启片段缓存的方法
2016/03/28 PHP
PHP常见的几种攻击方式实例小结
2019/04/29 PHP
PHP解密支付宝小程序的加密数据、手机号的示例代码
2021/02/26 PHP
JavaScript 异步调用框架 (Part 5 - 链式实现)
2009/08/04 Javascript
28个JS验证函数收集
2010/03/02 Javascript
元素的内联事件处理函数的特殊作用域在各浏览器中存在差异
2011/01/12 Javascript
jQuery源码分析-05异步队列 Deferred 使用介绍
2011/11/14 Javascript
初识Node.js
2015/03/20 Javascript
JS获取图片高度宽度的方法分享
2015/04/17 Javascript
详解JavaScript中void语句的使用
2015/06/04 Javascript
Highcharts 多个Y轴动态刷新数据的实现代码
2016/05/28 Javascript
vue配置文件实现代理v2版本的方法
2019/06/21 Javascript
vue如何限制只能输入正负数及小数
2019/07/04 Javascript
TypeScript类型声明书写详解
2019/08/28 Javascript
微信小程序swiper实现文字纵向轮播提示效果
2020/01/21 Javascript
HTML元素拖拽功能实现的完整实例
2020/12/04 Javascript
Django实现自定义404,500页面教程
2017/03/26 Python
python使用opencv实现马赛克效果示例
2019/09/28 Python
解决tensorflow添加ptb库的问题
2020/02/10 Python
借助HTML5 Canvas来绘制三角形和矩形等多边形的方法
2016/03/14 HTML / CSS
美国家喻户晓的保健品品牌:Vitamin World(维他命世界)
2016/08/19 全球购物
Rhone官方网站:男士运动服装、健身服装和高级运动服
2019/05/01 全球购物
应届实习生的自我评价范文
2014/01/05 职场文书
技术总监管理岗位职责
2014/03/09 职场文书
青蓝工程实施方案
2014/03/27 职场文书
给校长的建议书400字
2014/05/15 职场文书
中秋节国旗下演讲稿
2014/09/05 职场文书
2014年重阳节敬老活动方案
2014/09/16 职场文书
2014年党员整改措施
2014/10/24 职场文书
黄山导游词
2015/01/31 职场文书
大学生村官工作总结2015
2015/04/09 职场文书
行政处罚事先告知书
2015/07/01 职场文书
2022漫威和DC电影上映作品
2022/04/05 欧美动漫