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 datetime时间格式化去掉前导0
Jul 31 Python
Python中规范定义命名空间的一些建议
Jun 04 Python
Python键盘输入转换为列表的实例
Jun 23 Python
python字典嵌套字典的情况下找到某个key的value详解
Jul 10 Python
TensorFlow车牌识别完整版代码(含车牌数据集)
Aug 05 Python
如何利用Python开发一个简单的猜数字游戏
Sep 22 Python
Python帮你识破双11的套路
Nov 11 Python
Django后台管理系统的图文使用教学
Jan 20 Python
解决paramiko执行命令超时的问题
Apr 16 Python
Python 如何测试文件是否存在
Jul 31 Python
如何通过python实现IOU计算代码实例
Nov 02 Python
教你怎么用Python生成九宫格照片
May 20 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语法小结之基础和变量
2015/11/22 PHP
Zend Framework教程之MVC框架的Controller用法分析
2016/03/07 PHP
PHP文件上传、客户端和服务器端加限制、抓取错误信息、完整步骤解析
2017/01/12 PHP
PHP示例演示发送邮件给某个邮箱
2019/04/03 PHP
教你如何解密js/vbs/vbscript加密的编码异处理小结
2008/06/25 Javascript
JavaScript中的View-Model使用介绍
2011/08/11 Javascript
javascript 使用 NodeList需要注意的问题
2013/03/04 Javascript
Js注册协议倒计时的小例子
2013/06/24 Javascript
Node.js实现简单聊天服务器
2014/06/20 Javascript
JavaScript的变量声明提升问题浅析(Hoisting)
2016/11/30 Javascript
Node.js操作redis实现添加查询功能
2017/05/25 Javascript
详解开源的JavaScript插件化框架MinimaJS
2017/10/26 Javascript
bootstrap表格内容过长时用省略号表示的解决方法
2017/11/21 Javascript
利用ES6实现单例模式及其应用详解
2017/12/09 Javascript
用react-redux实现react组件之间数据共享的方法
2018/06/08 Javascript
vue如何引入sass全局变量
2018/06/28 Javascript
css配合JavaScript实现tab标签切换效果
2018/10/11 Javascript
微信小程序实现跑马灯效果
2020/10/21 Javascript
vue2中引用及使用 better-scroll的方法详解
2018/11/15 Javascript
解决Vue.js应用回退或刷新界面时提示用户保存修改问题
2019/11/24 Javascript
JS箭头函数和常规函数之间的区别实例分析【 5 个区别】
2020/05/27 Javascript
Python中表达式x += y和x = x+y 的区别详解
2017/06/20 Python
pandas.dataframe中根据条件获取元素所在的位置方法(索引)
2018/06/07 Python
深入理解Django-Signals信号量
2019/02/19 Python
python读取目录下所有的jpg文件,并显示第一张图片的示例
2019/06/13 Python
简单了解python gevent 协程使用及作用
2019/07/22 Python
纯CSS3实现圆角效果(含IE兼容解决方法)
2014/05/07 HTML / CSS
迪卡侬比利时官网:Decathlon比利时
2019/12/28 全球购物
寻找迷宫的一条出路,o通路;X:障碍
2016/07/10 面试题
环境科学专业个人求职信
2013/09/26 职场文书
机电一体化专业应届本科生求职信
2013/09/27 职场文书
学生保证书范文
2014/04/28 职场文书
世博会口号
2014/06/20 职场文书
大学生个人年度总结范文
2015/02/15 职场文书
2016婚礼主持词开场白
2015/11/24 职场文书
SpringBoot SpringEL表达式的使用
2021/07/25 Java/Android