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 socket函数中,send与sendall的区别与使用方法
May 09 Python
Python实现字典的遍历与排序功能示例
Dec 23 Python
EM算法的python实现的方法步骤
Jan 02 Python
python版微信跳一跳游戏辅助
Jan 11 Python
Python cookbook(字符串与文本)针对任意多的分隔符拆分字符串操作示例
Apr 19 Python
python SMTP实现发送带附件电子邮件
May 22 Python
windows下搭建python scrapy爬虫框架步骤
Dec 23 Python
用Python解数独的方法示例
Oct 24 Python
spyder 在控制台(console)执行python文件,debug python程序方式
Apr 20 Python
编写python程序的90条建议
Apr 14 Python
python本地文件服务器实例教程
May 02 Python
利用Python实时获取steam特惠游戏数据
Jun 25 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
星际流派综述
2020/03/04 星际争霸
PHP使用mysqldump命令导出数据库
2015/04/14 PHP
Zend Framework框架教程之Zend_Db_Table_Rowset用法实例分析
2016/03/21 PHP
php好代码风格的阶段性总结
2016/06/25 PHP
JavaScript入门教程(8) Location地址对象
2009/01/31 Javascript
js 关于=+与+=日期函数使用说明(赋值运算符)
2011/11/15 Javascript
js计算字符串长度包含的中文是utf8格式
2013/10/15 Javascript
取消选中单选框radio的三种方式示例介绍
2013/12/23 Javascript
浅析javascript中的DOM
2015/03/01 Javascript
JS+CSS实现鼠标经过弹出一个DIV框完整实例(带缓冲动画渐变效果)
2016/03/25 Javascript
JavaScript 实现的checkbox经典实例分享
2016/10/16 Javascript
浅谈js数组和splice的用法
2016/12/04 Javascript
jQuery实现的弹幕效果完整实例
2017/09/06 jQuery
详解Nodejs 通过 fs.createWriteStream 保存文件
2017/10/10 NodeJs
jQuery使用bind函数实现绑定多个事件的方法
2017/10/11 jQuery
Vue 菜单栏点击切换单个class(高亮)的方法
2018/08/22 Javascript
JS获取今天是本月第几周、本月共几周、本月有多少天、是今年的第几周、是今年的第几天的示例代码
2018/12/05 Javascript
js根据需要计算数组中重复出现某个元素的个数
2019/01/18 Javascript
Vue组件化开发之通用型弹出框的实现
2020/02/28 Javascript
简单介绍Python中的struct模块
2015/04/28 Python
Python中dict和set的用法讲解
2019/03/28 Python
python爬虫神器Pyppeteer入门及使用
2019/07/13 Python
django的分页器Paginator 从django中导入类
2019/07/25 Python
python twilio模块实现发送手机短信功能
2019/08/02 Python
Python一键安装全部依赖包的方法
2019/08/12 Python
一行Python代码制作动态二维码的实现
2019/09/09 Python
详解Python设计模式之策略模式
2020/06/15 Python
python删除文件、清空目录的实现方法
2020/09/23 Python
Python Sqlalchemy如何实现select for update
2020/10/12 Python
人民教师的自我评价分享
2014/02/21 职场文书
交通事故赔偿协议书
2014/10/16 职场文书
工作会议通知
2015/04/15 职场文书
新课程改革心得体会
2016/01/22 职场文书
python3 实现mysql数据库连接池的示例代码
2021/04/17 Python
python开发人人对战的五子棋小游戏
2022/05/02 Python
Android实现获取短信验证码并自动填充
2023/05/21 Java/Android