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使用metaclass实现Singleton模式的方法
May 05 Python
Python实现合并字典的方法
Jul 07 Python
以视频爬取实例讲解Python爬虫神器Beautiful Soup用法
Jan 20 Python
Python编程实现及时获取新邮件的方法示例
Aug 10 Python
使用Python的turtle模块画图的方法
Nov 15 Python
Python自定义简单图轴简单实例
Jan 08 Python
python中virtualenvwrapper安装与使用
May 20 Python
python处理两种分隔符的数据集方法
Dec 12 Python
用python求一个数组的和与平均值的实现方法
Jun 29 Python
pytorch三层全连接层实现手写字母识别方式
Jan 14 Python
tensorflow 分类损失函数使用小记
Feb 18 Python
vue常用指令代码实例总结
Mar 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
php旋转图片90度的方法
2013/11/07 PHP
Yii中使用PHPExcel导出Excel的方法
2014/12/26 PHP
如何通过View::first使用Laravel Blade的动态模板详解
2017/09/21 PHP
javascript中Number对象的toString()方法分析
2014/12/20 Javascript
javascript事件冒泡实例分析
2015/05/13 Javascript
纯JS实现本地图片预览的方法
2015/07/31 Javascript
微信小程序Server端环境配置详解(SSL, Nginx HTTPS,TLS 1.2 升级)
2017/01/12 Javascript
jQuery插件zTree实现更新根节点中第i个节点名称的方法示例
2017/03/08 Javascript
javascript内存分配原理实例分析
2017/04/10 Javascript
vue2.0+vuex+localStorage代办事项应用实现详解
2018/05/31 Javascript
JS内部事件机制之单线程原理
2018/07/02 Javascript
关于RxJS Subject的学习笔记
2018/12/05 Javascript
小程序日历控件使用方法详解
2018/12/29 Javascript
详解vue更改头像功能实现
2019/04/28 Javascript
微信小程序indexOf的替换方法(推荐)
2020/01/14 Javascript
axios解决高并发的方法:axios.all()与axios.spread()的操作
2020/11/09 Javascript
从零学Python之入门(三)序列
2014/05/25 Python
Python按行读取文件的实现方法【小文件和大文件读取】
2016/09/19 Python
在Django中URL正则表达式匹配的方法
2018/12/20 Python
Python图像滤波处理操作示例【基于ImageFilter类】
2019/01/03 Python
12个步骤教你理解Python装饰器
2019/07/01 Python
Python实现PyPDF2处理PDF文件的方法示例
2019/09/25 Python
tensorflow ckpt模型和pb模型获取节点名称,及ckpt转pb模型实例
2020/01/21 Python
pytorch梯度剪裁方式
2020/02/04 Python
pytorch SENet实现案例
2020/06/24 Python
python 实现网易邮箱邮件阅读和删除的辅助小脚本
2021/03/01 Python
英国独特的时尚和生活方式品牌:JOY
2018/03/17 全球购物
英国标志性生活方式品牌:Skinnydip London
2019/12/15 全球购物
澳大利亚有机化妆品网上商店:The Well Store
2020/02/20 全球购物
Shell编程面试题
2012/05/30 面试题
优秀的个人求职信范文
2014/05/09 职场文书
装修施工安全责任书
2014/07/24 职场文书
单位一把手群众路线四风问题整改措施
2014/09/25 职场文书
校园文化艺术节宣传标语
2014/10/09 职场文书
使用css样式设计一个简单的html登陆界面的实现
2021/03/30 HTML / CSS
深入浅析python3 依赖倒置原则(示例代码)
2021/07/09 Python