| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 
 | from selenium import webdriverfrom selenium.webdriver.chrome.options import Options
 
 
 def 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 = './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
 
 
 def set_windows(proxy="", proxyauth_plugin_path=""):
 chrome_options = Options()
 chrome_options.add_argument(f"--proxy-server={proxy}")
 chrome_options.add_argument(
 'user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36')
 chrome_options.add_experimental_option('useAutomationExtension', True)
 chrome_options.add_experimental_option('excludeSwitches', ['enable-automation'])
 chrome_options.add_argument("--disable-blink-features=AutomationControlled")
 chrome_options.add_extension(proxyauth_plugin_path)
 dr = webdriver.Chrome(options=chrome_options)
 
 dr.get("http://httpbin.org/ip")
 print(dr.page_source)
 
 
 if __name__ == '__main__':
 ip,port = get_ip()
 ip_port = "http://" + ip + ":" + str(port)
 proxyauth_plugin_path = create_proxyauth_extension(
 proxy_host=ip,
 proxy_port=port,
 proxy_username="代理云账号",
 proxy_password="代理云密码"
 )
 set_windows(ip_port, proxyauth_plugin_path)
 
 |