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 httplib,smtplib使用方法
Sep 06 Python
使用Python的Flask框架构建大型Web应用程序的结构示例
Jun 04 Python
Python实现代码统计工具(终极篇)
Jul 04 Python
python 捕获shell脚本的输出结果实例
Jan 04 Python
浅谈Python2.6和Python3.0中八进制数字表示的区别
Apr 28 Python
python pcm音频添加头转成Wav格式文件的方法
Jan 09 Python
python列表使用实现名字管理系统
Jan 30 Python
python 的topk算法实例
Apr 02 Python
python访问hdfs的操作
Jun 06 Python
Python定时任务APScheduler安装及使用解析
Aug 07 Python
Jmeter调用Python脚本实现参数互相传递的实现
Jan 22 Python
解决pycharm安装scrapy DLL load failed:找不到指定的程序的问题
Jun 08 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
XAMPP安装与使用方法详细解析
2013/11/27 PHP
解析PHP的Yii框架中cookie和session功能的相关操作
2016/03/17 PHP
php实现PDO中捕获SQL语句错误的方法
2017/02/16 PHP
php上传后台无法收到数据解决方法
2019/10/28 PHP
PHP中isset、empty的用法与区别示例详解
2020/11/05 PHP
javascript 类型判断代码分析
2010/03/28 Javascript
让js弹出窗口居前显示的实现方法
2013/07/10 Javascript
JS打开新窗口防止被浏览器阻止的方法
2015/01/03 Javascript
jquery实现页面关键词高亮显示的方法
2015/03/12 Javascript
JS实现浏览器状态栏文字从右向左弹出效果代码
2015/10/27 Javascript
完善的jquery处理机制
2016/02/21 Javascript
带有定位当前位置的百度地图前端web api实例代码
2016/06/21 Javascript
JS实现图文并茂的tab选项卡效果示例【附demo源码下载】
2016/09/21 Javascript
JS获取年月日时分秒的方法分析
2016/11/28 Javascript
js窗口震动小程序分享
2016/11/28 Javascript
重新理解JavaScript的六种继承方式
2017/03/24 Javascript
Vue2.0如何发布项目实战
2017/07/27 Javascript
MUI顶部选项卡的用法(tab-top-webview-main)详解
2017/10/08 Javascript
JavaScript使用闭包模仿块级作用域操作示例
2019/01/21 Javascript
react高阶组件添加和删除props
2019/04/26 Javascript
Vue代码整洁之去重方法整理
2019/08/06 Javascript
js中位数不足自动补位扩展padLeft、padRight实现代码
2020/04/06 Javascript
python网络编程示例(客户端与服务端)
2014/04/24 Python
django文档学习之applications使用详解
2018/01/29 Python
python自带tkinter库实现棋盘覆盖图形界面
2019/07/17 Python
修改 CentOS 6.x 上默认Python的方法
2019/09/06 Python
Python __slots__的使用方法
2020/11/15 Python
python中@contextmanager实例用法
2021/02/07 Python
canvas离屏技术与放大镜实现代码示例
2018/08/31 HTML / CSS
ASOS西班牙官网:英国在线时尚和美容零售商
2020/01/10 全球购物
小学先进集体事迹材料
2014/05/31 职场文书
计算机多媒体专业自荐信
2014/07/04 职场文书
罗马假日观后感
2015/06/08 职场文书
企业安全生产规章制度
2015/08/06 职场文书
爱心捐款倡议书:点燃希望,传递温暖
2019/11/04 职场文书
golang的文件创建及读写操作
2022/04/14 Golang