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 12 Python
python 链接和操作 memcache方法
Mar 04 Python
python学习基础之循环import及import过程
Apr 22 Python
Python获取好友地区分布及好友性别分布情况代码详解
Jul 10 Python
使用python将excel数据导入数据库过程详解
Aug 27 Python
python+pygame实现坦克大战
Sep 10 Python
在Python中使用MongoEngine操作数据库教程实例
Dec 03 Python
PyQt5实现登录页面
May 30 Python
python 解决pycharm运行py文件只有unittest选项的问题
Sep 01 Python
Python实现FTP文件定时自动下载的步骤
Dec 19 Python
python实现定时发送邮件
Dec 23 Python
用OpenCV进行年龄和性别检测的实现示例
Jan 29 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加密解密的代码
2007/07/16 PHP
PHP异步调用socket实现代码
2012/01/12 PHP
浅析PHP中strlen和mb_strlen的区别
2014/08/31 PHP
php中base64_decode与base64_encode加密解密函数实例
2014/11/24 PHP
php 实现一个字符串加密解密的函数实例代码
2016/11/01 PHP
laravel5.4生成验证码的实例讲解
2017/08/05 PHP
tp5框架基于ajax实现异步删除图片的方法示例
2020/02/10 PHP
JavaScript Cookie显示用户上次访问的时间和次数
2009/12/08 Javascript
HTML Color Picker(js拾色器效果)
2013/08/27 Javascript
关于Function中的bind()示例详解
2016/12/02 Javascript
jQuery导航条固定定位效果实例代码
2017/05/26 jQuery
Three.js如何实现雾化效果示例代码
2017/09/27 Javascript
countUp.js实现数字动态变化效果
2019/10/17 Javascript
JS数组及对象遍历方法代码汇总
2020/06/16 Javascript
Vue单文件组件开发实现过程详解
2020/07/30 Javascript
[01:32]TI奖金增速竟因它再创新高!DOTA2勇士令状不朽珍藏Ⅰ饰品欣赏
2018/05/18 DOTA
Python脚本实现网卡流量监控
2015/02/14 Python
TensorFLow用Saver保存和恢复变量
2018/03/10 Python
基于Python 装饰器装饰类中的方法实例
2018/04/21 Python
解决python大批量读写.doc文件的问题
2018/05/08 Python
Python的argparse库使用详解
2018/10/09 Python
python 中Arduino串口传输数据到电脑并保存至excel表格
2019/10/14 Python
HTML5对手机页面长按会粘贴复制禁用的解决方法
2016/07/19 HTML / CSS
意大利网上药房:Farmacia 33
2020/01/27 全球购物
linux面试题参考答案(7)
2012/10/29 面试题
某/etc/fstab文件中的某行如下: /dev/had5 /mnt/dosdata msdos defaults,usrquota 1 2 请解释其含义
2013/04/11 面试题
上班睡觉检讨书
2014/01/09 职场文书
青年教师培训方案
2014/02/06 职场文书
毕业生如何写自我鉴定
2014/03/15 职场文书
公司总经理助理岗位职责
2014/07/09 职场文书
《中国梦我的梦》小学生演讲稿
2014/08/20 职场文书
安全事故隐患排查治理制度
2015/08/05 职场文书
2016暑期社会实践心得体会范文
2016/01/14 职场文书
php png失真的原因及解决办法
2021/11/17 PHP
解决 Redis 秒杀超卖场景的高并发
2022/04/12 Redis