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爬虫之使用urllib2组件抓取网页内容
Nov 04 Python
python继承和抽象类的实现方法
Jan 14 Python
Python从文件中读取数据的方法讲解
Feb 14 Python
详解Python解决抓取内容乱码问题(decode和encode解码)
Mar 29 Python
Python 2/3下处理cjk编码的zip文件的方法
Apr 26 Python
Python3.5基础之变量、数据结构、条件和循环语句、break与continue语句实例详解
Apr 26 Python
python动态进度条的实现代码
Jul 03 Python
python单例模式的多种实现方法
Jul 26 Python
Numpy之将矩阵拉成向量的实例
Nov 30 Python
深入了解NumPy 高级索引
Jul 24 Python
Python使用socket_TCP实现小文件下载功能
Oct 09 Python
使用tkinter实现三子棋游戏
Feb 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
php基础知识:类与对象(3) 构造函数和析构函数
2006/12/13 PHP
PHP获取当前文件所在目录 getcwd()函数
2009/05/13 PHP
ThinkPHP模板引擎之导入资源文件方法详解
2014/06/18 PHP
php删除二维数组中的重复值方法
2018/03/12 PHP
在JavaScript中通过URL传递汉字的方法
2007/04/09 Javascript
javascript 极速 隐藏/显示万行表格列只需 60毫秒
2009/03/28 Javascript
THREE.JS入门教程(2)着色器-上
2013/01/24 Javascript
jQuery插件 selectToSelect使用方法
2013/10/02 Javascript
Js保留小数点的4种效果实现代码分享
2014/04/12 Javascript
JavaScript更改原始对象valueOf的方法
2015/03/19 Javascript
Vue.js中的图片引用路径的方式
2017/07/28 Javascript
利用pm2部署多个node.js项目的配置教程
2017/10/22 Javascript
JavaScript满天星导航栏实现方法
2018/03/08 Javascript
Vue 实现展开折叠效果的示例代码
2018/08/27 Javascript
微信小程序上线发布流程图文详解
2019/05/06 Javascript
js常用正则表达式集锦
2019/05/17 Javascript
原生js实现日期选择插件
2020/05/21 Javascript
[03:20]次级联赛厮杀超职业 现超级兵对拆世纪大战
2014/10/30 DOTA
Python冲顶大会 快来答题!
2018/01/17 Python
Python3.5装饰器原理及应用实例详解
2019/04/30 Python
PyCharm刷新项目(文件)目录的实现
2020/02/14 Python
Django 用户认证Auth组件的使用
2020/11/30 Python
css3如何绘制一个圆圆的loading转圈动画
2018/01/09 HTML / CSS
Html5实现单张、多张图片上传功能
2019/04/28 HTML / CSS
国际书籍零售商:Wordery
2017/11/01 全球购物
美国男士西装打折店:Jos. A. Bank
2017/11/13 全球购物
经典C++面试题一
2016/11/06 面试题
数据管理员的自我评价分享
2013/11/15 职场文书
亲子拓展活动方案
2014/02/20 职场文书
保安公司服务承诺书
2014/05/28 职场文书
贫困生助学金感谢信
2015/01/21 职场文书
2015毕业生自我评价范文
2015/03/02 职场文书
2015年第十五个全民国防教育日宣传活动方案
2015/05/06 职场文书
2015年科协工作总结
2015/05/19 职场文书
公司周年庆寄语
2019/06/21 职场文书
uwsgi+nginx代理Django无法访问静态资源的解决
2021/05/10 Servers