selenium启动chrome时Proxy server需要验证用户

说明一下,本文的情景是“代理服务器需要验证用户名和密码”,至于“只需设置代理服务器地址”的情况请另行搜索

Step1.新建一个util模块
import string
import zipfile

def create_proxyauth_extension(proxy_host,proxy_port,proxy_username, proxy_password,scheme='http', plugin_path=None):
	"""代理认证插件
	args:
		proxy_host (str): 你的代理地址或者域名(str类型)
        proxy_port (int): 代理端口号(int类型)
        proxy_username (str):用户名(字符串)
        proxy_password (str): 密码 (字符串)
  	kwargs:
  		scheme (str): 代理方式 默认http
        plugin_path (str): 扩展的绝对路径
        
    return str -> plugin_path
    """
    
    if plugin_path is None:
    plugin_path = 'vim_chrome_proxyauth_plugin.zip'

    manifest_json = """ 
    { 
        "version": "1.0.0", 
        "manifest_version": 2, 
        "name": "Chrome Proxy", 
        "permissions": [ 
            "proxy", 
            "tabs", 
            "unlimitedStorage", 
            "storage", 
            "", 
            "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: [""]}, 
                    ['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
Step2.调用util模块
from selenium import webdriver
from util import create_proxyauth_extension

#selenium启动chrome之授权代理插件
proxyauth_plugin_path = create_proxyauth_extension(
    proxy_host="xx.xxx.xxx.xx",
    proxy_port=xxxx,
    proxy_username="xxxxx",
    proxy_password="xxxxx"
)

co = webdriver.ChromeOptions()
co.add_extension(proxyauth_plugin_path)
browser = webdriver.Chrome(chrome_options=co)
browser.get('https://www.baidu.com/')
result:

selenium启动chrome时Proxy server需要验证用户_第1张图片

你可能感兴趣的:(WebSpider)