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脚本日志功能
Aug 14 Python
详解python中executemany和序列的使用方法
Aug 12 Python
Python利用openpyxl库遍历Sheet的实例
May 03 Python
Python模拟浏览器上传文件脚本的方法(Multipart/form-data格式)
Oct 22 Python
十个Python练手的实战项目,学会这些Python就基本没问题了(推荐)
Apr 26 Python
windows下Python安装、使用教程和Notepad++的使用教程
Oct 06 Python
解决TensorFlow程序无限制占用GPU的方法
Jun 30 Python
python的flask框架难学吗
Jul 31 Python
Python中正则表达式对单个字符,多个字符和匹配边界等使用
Jan 27 Python
Python使用tkinter实现小时钟效果
Feb 22 Python
python pyg2plot的原理知识点总结
Feb 28 Python
python中mongodb包操作数据库
Apr 19 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数据类型转换
2014/01/09 PHP
php事件驱动化设计详解
2016/11/10 PHP
nodejs URL模块操作URL相关方法介绍
2015/03/03 NodeJs
jquery图片切换实例分析
2015/04/15 Javascript
Java框架SSH结合Easyui控件实现省市县三级联动示例解析
2016/06/12 Javascript
js动态获取子复选项并设计全选及提交的实现方法
2016/06/24 Javascript
bootstrap模态框嵌套、tabindex属性、去除阴影的示例代码
2017/10/17 Javascript
JavaScript的setter与getter方法
2017/11/29 Javascript
vue中阻止click事件冒泡,防止触发另一个事件的方法
2018/02/08 Javascript
浅析Visual Studio Code断点调试Vue
2018/02/27 Javascript
jQuery实现常见的隐藏与展示列表效果示例
2018/06/04 jQuery
js实现动态添加上传文件页面
2018/10/22 Javascript
JS中的一些常用的函数式编程术语
2019/06/15 Javascript
解决vue中el-tab-pane切换的问题
2020/07/19 Javascript
vue3.0中setup使用(两种用法)
2020/12/02 Vue.js
全面解析Vue中的$nextTick
2020/12/24 Vue.js
[03:52]显微镜下的DOTA2第三期——英雄在无聊的时候干什么
2014/06/20 DOTA
CentOS安装pillow报错的解决方法
2016/01/27 Python
python使用Tkinter实现在线音乐播放器
2018/01/30 Python
python用win32gui遍历窗口并设置窗口位置的方法
2019/07/26 Python
Python单元测试与测试用例简析
2019/11/09 Python
pytorch实现mnist分类的示例讲解
2020/01/10 Python
通过python检测字符串的字母
2020/02/18 Python
python列表切片和嵌套列表取值操作详解
2020/02/27 Python
python 如何区分return和yield
2020/09/22 Python
关于python scrapy中添加cookie踩坑记录
2020/11/17 Python
详解FireFox下Canvas使用图像合成绘制SVG的Bug
2019/07/10 HTML / CSS
复核员上岗演讲稿
2014/01/05 职场文书
小学生期末评语大全
2014/04/21 职场文书
个人委托书范本汇总
2014/10/01 职场文书
导游欢送词
2015/01/31 职场文书
新员工试用期自我评价
2015/03/10 职场文书
亮剑精神观后感
2015/06/05 职场文书
解决jupyter notebook启动后没有token的坑
2021/04/24 Python
nginx请求限制配置方法
2021/07/09 Servers
你知道Java Spring的两种事务吗
2022/03/16 Java/Android