如何在最新版Python Selenium中配置Selenium Grid远程连接的代理
如何在最新版Python Selenium中配置Selenium Grid远程连接的代理
嘿,我来帮你把这个代理配置的事儿理清楚!你现在用的是最新版的Selenium和Python,这里有两个容易混淆的代理场景,我一步步给你讲明白,顺便解答你对参数的疑问:
首先得先明确你要配置的是哪一种代理——这很关键,很多人会搞混:
- 场景1:你的Python脚本(Selenium客户端)需要通过代理才能连接到Selenium Grid服务器
- 场景2:远程启动的浏览器需要通过代理访问目标网页
先解答你对ClientConfig参数的疑问
remote_server_addr:这就是你的Selenium Grid Hub服务器的完整地址,比如本地运行的Grid就是"http://localhost:4444",如果是远程服务器就填对应的IP+端口,比如"http://192.168.1.100:4444"username和password:如果你的Grid服务器本身设置了身份验证(不是代理的认证),这里就填Grid的账号密码;如果只是代理需要认证,那这俩参数不用填在这儿proxy:这个参数是给客户端连接Grid服务器用的,不是浏览器访问网页的代理——如果你不需要通过代理连Grid,这个参数可以直接去掉
场景2:浏览器实例通过代理访问网页(最常见需求)
如果你是想让远程启动的Chrome浏览器走代理访问https://www.selenium.dev这类网站,那应该把代理配置在ChromeOptions里,而不是ClientConfig。下面是完整的代码示例:
from selenium import webdriver from selenium.webdriver.chrome.options import Options def get_default_chrome_options(): options = Options() # 替换成你的代理信息 proxy_host_port = "123.45.67.89:8080" # 代理地址+端口 proxy_username = "admin" # 代理用户名(如果需要认证) proxy_password = "myStrongPassword" # 代理密码(如果需要认证) # 构造代理配置参数 if proxy_username and proxy_password: # 带认证的代理格式:用户名:密码@代理地址:端口 proxy_str = f"http://{proxy_username}:{proxy_password}@{proxy_host_port}" else: # 无认证的代理直接填地址 proxy_str = f"http://{proxy_host_port}" options.add_argument(f"--proxy-server={proxy_str}") # 忽略证书错误(和你原来的ignore_certificates功能一致) options.add_argument("--ignore-certificate-errors") return options # 替换成你的Grid Hub地址 grid_server = "http://your-grid-hub-ip:4444/wd/hub" options = get_default_chrome_options() # 不需要ClientConfig的话可以直接这样初始化driver driver = webdriver.Remote(command_executor=grid_server, options=options) driver.get("https://www.selenium.dev") # 可以访问httpbin验证代理是否生效:driver.get("https://httpbin.org/ip"),然后打印页面内容看IP driver.quit()
场景1:客户端通过代理连接Grid服务器
如果你的Python脚本所在的机器无法直接访问Grid Hub,必须通过代理才能建立连接,那才需要配置ClientConfig的proxy参数,示例代码如下:
from selenium import webdriver from selenium.webdriver.remote.client_config import ClientConfig from selenium.webdriver.common.proxy import Proxy, ProxyType # 配置客户端连接Grid用的代理 client_proxy = Proxy({ "proxyType": ProxyType.MANUAL, "httpProxy": "client-proxy-addr:port", # 客户端连Grid用的代理地址 "httpsProxy": "client-proxy-addr:port" }) client_config = ClientConfig( remote_server_addr="http://your-grid-hub-ip:4444", proxy=client_proxy, timeout=3600, ignore_certificates=True, # 如果Grid Hub本身需要认证,这里填Grid的账号密码 username="grid-admin", password="grid-password" ) options = webdriver.ChromeOptions() driver = webdriver.Remote( command_executor="http://your-grid-hub-ip:4444", options=options, client_config=client_config ) driver.get("https://www.selenium.dev") driver.quit()
备注:内容来源于stack exchange,提问作者Hee Mi
相关产品推荐
相关产品推荐

