danilshik Asked:2020-04-07 02:22:08 +0000 UTC2020-04-07 02:22:08 +0000 UTC 2020-04-07 02:22:08 +0000 UTC 在 Selenium WebDriver 中初始化后是否可以更改浏览器代理? 772 在浏览器初始化过程中,我们可以在初始化设置中指定代理。问题:我们可以在请求执行时更改它吗? 编程语言:Python 浏览器:Chrome python 1 个回答 Voted Best Answer Sergey Nudnov 2020-04-08T12:48:27Z2020-04-08T12:48:27Z 答案是“是”,但前提是我们为此创建了一个特殊的扩展,它将监听特定事件并根据该事件的参数更改代理设置。 这里有一个很好的例子。通过添加监听器,您可以动态更改代理: from selenium import webdriver from selenium.webdriver.common.proxy import Proxy from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.desired_capabilities import DesiredCapabilities from selenium.webdriver.chrome.options import Options import zipfile,os def proxy_chrome(PROXY_HOST,PROXY_PORT,PROXY_USER,PROXY_PASS): 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 = """ var config = { mode: "fixed_servers", rules: { singleProxy: { scheme: "http", host: "%(host)s", port: parseInt(%(port)d) }, bypassList: ["foobar.com"] } }; chrome.proxy.settings.set({value: config, scope: "regular"}, function() {}); function callbackFn(details) { return { authCredentials: { username: "%(user)s", password: "%(pass)s" } }; } chrome.webRequest.onAuthRequired.addListener( callbackFn, {urls: ["<all_urls>"]}, ['blocking'] ); """ % { "host": PROXY_HOST, "port": PROXY_PORT, "user": PROXY_USER, "pass": PROXY_PASS, } pluginfile = 'extension/proxy_auth_plugin.zip' with zipfile.ZipFile(pluginfile, 'w') as zp: zp.writestr("manifest.json", manifest_json) zp.writestr("background.js", background_js) co = Options() #extension support is not possible in incognito mode for now #co.add_argument('--incognito') co.add_argument('--disable-gpu') #disable infobars co.add_argument('--disable-infobars') co.add_experimental_option("excludeSwitches",["ignore-certificate-errors"]) #location of chromedriver, please change it according to your project. chromedriver = os.getcwd()+'/Chromedriver/chromedriver' co.add_extension(pluginfile) driver = webdriver.Chrome(chromedriver,chrome_options=co) #return the driver with added proxy configuration. return driver
答案是“是”,但前提是我们为此创建了一个特殊的扩展,它将监听特定事件并根据该事件的参数更改代理设置。
这里有一个很好的例子。通过添加监听器,您可以动态更改代理: