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开发常用的一些开源Package分享
Feb 14 Python
Python基础教程之正则表达式基本语法以及re模块
Mar 25 Python
Python编程实现生成特定范围内不重复多个随机数的2种方法
Apr 14 Python
Python模拟用户登录验证
Sep 11 Python
深入浅出学习python装饰器
Sep 29 Python
TensorFlow搭建神经网络最佳实践
Mar 09 Python
python excel使用xlutils类库实现追加写功能的方法
May 02 Python
python实现超简单的视频对象提取功能
Jun 04 Python
在Pytorch中计算自己模型的FLOPs方式
Dec 30 Python
python读取当前目录下的CSV文件数据
Mar 11 Python
Pycharm github配置实现过程图解
Oct 13 Python
Django搭建项目实战与避坑细节详解
Dec 06 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递归实现无限分类 格式化数组的详解
2013/06/08 PHP
使用PHP求两个文件的相对路径
2013/06/20 PHP
PHP获得数组交集与差集的方法
2015/06/10 PHP
非常重要的php正则表达式详解
2016/01/04 PHP
PHP用函数嵌入网站访问量计数器
2017/10/27 PHP
PHP读取文件,解决中文乱码UTF-8的方法分析
2020/01/22 PHP
PHP标准库 (SPL)――Countable用法示例
2020/06/05 PHP
Js中获取frames中的元素示例代码
2013/07/30 Javascript
解析Javascript中难以理解的11个问题
2013/12/09 Javascript
JavaScript格式化日期时间的方法和自定义格式化函数示例
2014/04/04 Javascript
javascript下拉框选项单击事件的例子分享
2015/03/04 Javascript
复杂的javascript窗口分帧解析
2016/02/19 Javascript
js仿小米官网图片轮播特效
2016/09/29 Javascript
微信小程序 跳转传递数据的实例
2017/07/06 Javascript
深入理解angular2启动项目步骤
2017/07/15 Javascript
Vue组件模板形式实现对象数组数据循环为树形结构(实例代码)
2017/07/31 Javascript
Angular 5.x 学习笔记之Router(路由)应用
2018/04/08 Javascript
vue的传参方式汇总和router使用技巧
2018/05/22 Javascript
vue-router动态设置页面title的实例讲解
2018/08/30 Javascript
js微信分享接口调用详解
2019/07/23 Javascript
layui-select动态选中值的例子
2019/09/23 Javascript
vue自定义指令实现仅支持输入数字和浮点型的示例
2019/10/30 Javascript
[06:25]第二届DOTA2亚洲邀请赛主赛事第二天比赛集锦.mp4
2017/04/03 DOTA
Python的Flask框架应用调用Redis队列数据的方法
2016/06/06 Python
Python基于list的append和pop方法实现堆栈与队列功能示例
2017/07/24 Python
Django实现组合搜索的方法示例
2018/01/23 Python
Django 实现下载文件功能的示例
2018/03/06 Python
在NumPy中创建空数组/矩阵的方法
2018/06/15 Python
python广度优先搜索得到两点间最短路径
2019/01/17 Python
python多进程并行代码实例
2019/09/30 Python
Python多重继承之菱形继承的实例详解
2020/02/12 Python
python爬虫实现获取下一页代码
2020/03/13 Python
浅谈python锁与死锁问题
2020/08/14 Python
Bench加拿大官方网站:英国城市服装品牌
2017/11/03 全球购物
工程部部长岗位职责
2015/02/12 职场文书
python基础入门之字典和集合
2021/06/13 Python