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学习笔记(二)基础语法
Jun 06 Python
深入讲解Python函数中参数的使用及默认参数的陷阱
Mar 13 Python
Python切片工具pillow用法示例
Mar 30 Python
解决python3 json数据包含中文的读写问题
May 10 Python
Python安装lz4-0.10.1遇到的坑
May 20 Python
Python OpenCV处理图像之图像像素点操作
Jul 10 Python
python运用sklearn实现KNN分类算法
Oct 16 Python
pytorch 常用线性函数详解
Jan 15 Python
scrapy数据存储在mysql数据库的两种方式(同步和异步)
Feb 18 Python
python高阶函数map()和reduce()实例解析
Mar 16 Python
python如何导出微信公众号文章方法详解
Aug 31 Python
Django实现文章详情页面跳转代码实例
Sep 16 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
一个好用的分页函数
2006/11/16 PHP
PHP XML操作类DOMDocument
2009/12/16 PHP
php源码分析之DZX1.5字符串截断函数cutstr用法
2015/06/17 PHP
PHP中抽象类和抽象方法概念与用法分析
2016/05/24 PHP
ecshop添加菜单及权限分配问题
2017/11/21 PHP
为指定元素增加样式的js代码
2009/12/09 Javascript
js面向对象设计用{}好还是function(){}好(构造函数)
2011/10/23 Javascript
模拟多级复选框效果的jquery代码
2013/08/13 Javascript
jquery获取元素值的方法(常见的表单元素)
2013/11/15 Javascript
Jquery中CSS选择器用法分析
2015/02/10 Javascript
jQuery-1.9.1源码分析系列(十)事件系统之事件体系结构
2015/11/19 Javascript
js获取鼠标位置实例详解
2015/12/09 Javascript
Javascript将数字转化成为货币格式字符串
2016/06/22 Javascript
jQuery ready()和onload的加载耗时分析
2016/09/08 Javascript
WEB开发之注册页面验证码倒计时代码的实现
2016/12/15 Javascript
angularJS实现动态添加,删除div方法
2018/02/27 Javascript
微信小程序定位当前城市的方法
2018/07/19 Javascript
简单的Python的curses库使用教程
2015/04/11 Python
Python搭建APNS苹果推送通知推送服务的相关模块使用指南
2016/06/02 Python
python 函数传参之传值还是传引用的分析
2017/09/07 Python
pygame游戏之旅 计算游戏中躲过的障碍数量
2018/11/20 Python
Python对接支付宝支付自实现功能
2019/10/10 Python
使用Pandas将inf, nan转化成特定的值
2019/12/19 Python
PyQt5连接MySQL及QMYSQL driver not loaded错误解决
2020/04/29 Python
关于Kotlin中SAM转换的那些事
2020/09/15 Python
使用CSS媒体查询(Media Queries)和JavaScript判断浏览器设备类型的方法
2014/04/03 HTML / CSS
解决HTML5中滚动到底部的事件问题
2019/08/22 HTML / CSS
Html5 new XMLHttpRequest()监听附件上传进度
2021/01/14 HTML / CSS
世界上最全面的草药补充剂和顶级品牌维生素网站:HerbsPro
2019/01/20 全球购物
运动鞋、街头服装、手表和手袋的实时市场:StockX
2020/11/25 全球购物
大学新生军训感言
2014/02/25 职场文书
工业自动化专业自荐信范文
2014/04/10 职场文书
北京故宫导游词
2015/01/31 职场文书
银行求职自荐信范文
2015/03/04 职场文书
2015秋学期开学寄语
2015/05/28 职场文书
python某漫画app逆向
2021/03/31 Python