zoukankan      html  css  js  c++  java
  • Selenium chrome配置代理Python版

    环境: 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

  • 相关阅读:
    Flink安装排坑指南
    Java对类进行XSS过滤
    java.sql.SQLException: 无法转换为内部表示
    Flutter环境搭建
    运行npm命令 TypeError: Cannot read property 'get' of undefined
    利用Xilinx的cordic ip做开方运算
    modelsim脚本化仿真出现的两个错误
    opencv中使用imread()读入的图像,始终为显示为8位深度
    PS端时钟供给PL使用的问题
    Xilinx 使用shift_RAM消耗分布式RAM(LUTRAM)还是BRAM (Block RAM)?
  • 原文地址:https://www.cnblogs.com/roystime/p/6935543.html
Copyright © 2011-2022 走看看