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将人民币转换大写的脚本代码
Feb 10 Python
Python的lambda匿名函数的简单介绍
Apr 25 Python
python 创建一个空dataframe 然后添加行数据的实例
Jun 07 Python
Python二叉搜索树与双向链表转换算法示例
Mar 02 Python
Python 获取windows桌面路径的5种方法小结
Jul 15 Python
详解python列表(list)的使用技巧及高级操作
Aug 15 Python
解决安装pyqt5之后无法打开spyder的问题
Dec 13 Python
基于python修改srt字幕的时间轴
Feb 03 Python
python 使用raw socket进行TCP SYN扫描实例
May 05 Python
Keras实现DenseNet结构操作
Jul 06 Python
基于python实现可视化生成二维码工具
Jul 08 Python
Python的三个重要函数详解
Jan 18 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
海贼王动画变成“真人”后,凯多神还原,雷利太帅了!
2020/04/09 日漫
通过ICQ网关发送手机短信的PHP源程序
2006/10/09 PHP
PHP根据传入参数合并多个JS和CSS文件的简单实现
2014/06/13 PHP
ThinkPHP3.2.3数据库设置新特性
2015/03/05 PHP
微信公众号开发之通过接口删除菜单
2017/02/20 PHP
PHP编程实现微信企业向用户付款的方法示例
2017/07/26 PHP
让插入到 innerHTML 中的 script 跑起来的实现代码
2006/07/01 Javascript
Javascript alert消息换行的方法
2013/08/07 Javascript
JS案例分享之金额小写转大写
2014/05/15 Javascript
jQuery实现简单的间隔向上滚动效果
2015/03/09 Javascript
JavaScript动态插入CSS的方法
2015/12/10 Javascript
浅析JavaScript作用域链、执行上下文与闭包
2016/02/01 Javascript
JS判断鼠标进入容器的方向与window.open新窗口被拦截的问题
2016/12/23 Javascript
JS 调试中常见的报错问题解决方法
2017/05/20 Javascript
基于JavaScript实现淘宝商品广告效果
2017/08/10 Javascript
AngularJS select设置默认值的实现方法
2017/08/25 Javascript
JavaScript显式数据类型转换详解
2019/03/18 Javascript
微信小程序new Date()方法失效问题解决方法
2019/07/29 Javascript
谈谈IntersectionObserver懒加载的具体使用
2019/10/15 Javascript
Python操作Mysql实例代码教程在线版(查询手册)
2013/02/18 Python
使用python实现省市三级菜单效果
2016/01/20 Python
Python基于scapy实现修改IP发送请求的方法示例
2017/07/08 Python
python 判断是否为正小数和正整数的实例
2017/07/23 Python
python实现ip地址查询经纬度定位详解
2019/08/30 Python
对python中arange()和linspace()的区别说明
2020/05/03 Python
PyQt中使用QtSql连接MySql数据库的方法
2020/07/28 Python
怎样声明子类
2013/07/02 面试题
物流管理专业大学生自荐信
2013/10/04 职场文书
美德少年事迹材料
2014/01/23 职场文书
三查三看党性分析材料
2014/02/18 职场文书
大学生优秀自荐信范文
2014/02/25 职场文书
《北大荒的秋天》教学反思
2014/04/14 职场文书
年终晚会活动方案
2014/08/21 职场文书
中班教师个人总结
2015/02/05 职场文书
销售会议开幕词
2016/03/04 职场文书
使用canvas实现雪花飘动效果的示例代码
2021/03/30 HTML / CSS