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 相关文章推荐
在 Django/Flask 开发服务器上使用 HTTPS
Jul 03 Python
python脚本实现查找webshell的方法
Jul 31 Python
python端口扫描系统实现方法
Nov 19 Python
简单谈谈Python中的json与pickle
Jul 19 Python
python获取外网IP并发邮件的实现方法
Oct 01 Python
Python3多进程 multiprocessing 模块实例详解
Jun 11 Python
Sanic框架应用部署方法详解
Jul 18 Python
使用django的objects.filter()方法匹配多个关键字的方法
Jul 18 Python
Django media static外部访问Django中的图片设置教程
Apr 07 Python
Python使用OpenCV和K-Means聚类对毕业照进行图像分割
Jun 11 Python
利用Python第三方库实现预测NBA比赛结果
Jun 21 Python
python中sqllite插入numpy数组到数据库的实现方法
Jun 21 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使用trim函数去除字符串左右空格及特殊字符实例
2016/01/07 PHP
ThinkPHP自定义Redis处理SESSION的实现方法
2016/05/16 PHP
php实现mysql连接池效果实现代码
2018/01/25 PHP
js读取注册表的键值示例
2013/09/25 Javascript
JavaScript中遍历对象的property的3种方法介绍
2014/12/30 Javascript
Node.js中的缓冲与流模块详细介绍
2015/02/11 Javascript
js实现跨域的方法实例详解
2015/06/24 Javascript
JavaScript知识点总结之如何提高性能
2016/01/15 Javascript
微信小程序 教程之模板
2016/10/18 Javascript
vue实现动态数据绑定
2017/04/28 Javascript
浅谈angular4 ng-content 中隐藏的内容
2017/08/18 Javascript
小程序scroll-view组件实现滚动的示例代码
2018/09/20 Javascript
jQuery实现的点击图片居中放大缩小功能示例
2019/01/16 jQuery
微信小程序下拉菜单效果的实例代码
2019/05/14 Javascript
微信小程序开发之获取用户手机号码(php接口解密)
2020/05/17 Javascript
python实现简单socket通信的方法
2016/04/19 Python
深入学习Python中的上下文管理器与else块
2017/08/27 Python
TensorFlow实现随机训练和批量训练的方法
2018/04/28 Python
十分钟利用Python制作属于你自己的个性logo
2018/05/07 Python
Python3.5实现的三级菜单功能示例
2019/03/25 Python
Pytorch技巧:DataLoader的collate_fn参数使用详解
2020/01/08 Python
解决Jupyter notebook中.py与.ipynb文件的import问题
2020/04/21 Python
keras模型保存为tensorflow的二进制模型方式
2020/05/25 Python
Scrapy项目实战之爬取某社区用户详情
2020/09/17 Python
Django实现简单的分页功能
2021/02/22 Python
Python实现Excel自动分组合并单元格
2021/02/22 Python
YesStyle美国/全球:购买亚洲时装、美容化妆品和生活百货
2017/01/16 全球购物
十八届三中全会学习方案
2014/02/16 职场文书
赔偿协议书范本
2014/04/15 职场文书
有关九一八事变的演讲稿
2014/09/14 职场文书
个人简历求职信范文
2015/03/20 职场文书
小学数学教学反思范文
2016/02/16 职场文书
SpringCloud Alibaba项目实战之nacos-server服务搭建过程
2021/06/21 Java/Android
MySql子查询IN的执行和优化的实现
2021/08/02 MySQL
win10如何开启ahci模式?win10开启ahci模式详细操作教程
2022/07/23 数码科技
Python编写车票订购系统 Python实现快递收费系统
2022/08/14 Python