使用提示

1.基于用户名密码方式使用Selenium + Chrome认证代理(chrome86版已测试通过)

2.运行环境要求python2/3 + selenium + Chrome + Chromedriver + Windows/Linux/macOS

3.下载chromedriver(注意chromedriver版本要和Chrome版本对应)

4.selenium不是python原生库,需要安装才能使用:pip install selenium

5.请注意替换代码中的部分信息:

${proxy_ip}:代理IP

${proxy_port}:端口号

${username}}:用户名

${password}:密码

${chromedriver_path}:您本机chromedriver驱动存放路径,如:"C:\chromedriver.exe"

#!/usr/bin/env python

# encoding: utf-8

from selenium import webdriver

import string

import zipfile

import time

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 = '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_ip}", # 代理IP

proxy_port="${proxy_port}", # 端口号

# 用户名密码(私密代理/独享代理)

proxy_username="${username}",

proxy_password="${password}"

)

options = webdriver.ChromeOptions()

options.add_extension(proxyauth_plugin_path)

# ${chromedriver_path}: chromedriver驱动存放路径

driver = webdriver.Chrome(executable_path="${chromedriver_path}", options=options)

driver.get("https://dev.kdlapi.com/testproxy")

# 获取页面内容

print(driver.page_source)

# 延迟3秒后关闭当前窗口,如果是最后一个窗口则退出

time.sleep(3)

driver.close()