Selenium + ChromeDriver 代理使用,无密码或已设置白名单 IP

1
2
3
4
5
6
7
8
from selenium import webdriver

chromeOptions = webdriver.ChromeOptions()
chromeOptions.add_argument("--proxy-server=http://127.0.0.1:7890")
browser = webdriver.Chrome(options=chromeOptions)
browser.get("https://httpbin.org/get?show_env=1")
browser.get_screenshot_as_file("httpbin.png")
browser.close()

注: --proxy-server=http://host:port 等号两边不能有空格

Selenium + ChromeDriver 代理使用,支持 Http、Https 账号密码

1
2
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
from selenium import webdriver


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 = r"C:\Users\shitao\IIoTProjects\htmlcrawler\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="127.0.0.1",
proxy_port=7890,
proxy_username=None,
proxy_password=None
)
options = webdriver.ChromeOptions()
options.add_argument("--start-maximized")
options.add_extension(proxyauth_plugin_path)
browser = webdriver.Chrome(options=options)
browser.get("https://httpbin.org/get?show_env=1")
browser.get_screenshot_as_file("httpbin.png")
browser.close()