如何在Selenium中为Chrome远程调试端口设置代理?
问题原因
当通过debuggerAddress连接已启动的Chrome实例时,Selenium Options中添加的--proxy-server参数不会生效。这是因为Chrome的启动参数(包括代理配置)是在启动时加载的,已运行的实例不会再读取新的启动参数。
解决方案
有两种可行的解决方式:
方式一:启动Chrome时直接指定代理
修改启动Chrome的CMD命令,在启动时就带上代理参数,后续Selenium仅需连接调试端口即可:
修改后的启动命令
chrome.exe --remote-debugging-port=8798 --user-data-dir="C:\Users\HP Elitebook\Desktop\Projects\Project Gmail\chromedriver-win64\localhost" --proxy-server=35.236.207.242:33333
对应Selenium代码
import os from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait from selenium import webdriver os.environ['PATH'] += os.getcwd()+r"\chromedriver-win64" options = Options() options.add_experimental_option('debuggerAddress','127.0.0.1:8798') chrome = webdriver.Chrome(options=options) chrome.get("https://whatismyipaddress.com") myip = WebDriverWait(chrome, 10).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="ipv4"]'))) print(myip.text)
方式二:通过Chrome DevTools Protocol(CDP)动态设置代理
如果无法修改Chrome的启动命令,可以通过CDP在运行时为已连接的实例动态配置代理:
Selenium代码示例
import os from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait from selenium import webdriver PROXY = "35.236.207.242:33333" os.environ['PATH'] += os.getcwd()+r"\chromedriver-win64" options = Options() options.add_experimental_option('debuggerAddress','127.0.0.1:8798') chrome = webdriver.Chrome(options=options) # 使用CDP配置代理 chrome.execute_cdp_cmd('Network.setProxy', { 'proxySettings': { 'proxyType': 'manual', 'httpProxy': PROXY, 'httpsProxy': PROXY, 'ftpProxy': PROXY, 'socksProxy': PROXY, 'socksVersion': 5 } }) # 启用网络监听使配置生效 chrome.execute_cdp_cmd('Network.enable', {}) chrome.get("https://whatismyipaddress.com") myip = WebDriverWait(chrome, 10).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="ipv4"]'))) print(myip.text)
内容的提问来源于stack exchange,提问作者Abdullah Zaman Babar
相关产品推荐
相关产品推荐

