Selenium设置Firefox代理的正确性验证及当前代理查询方法咨询
Firefox Selenium代理设置:正确性验证与配置查询
1. 你的代理设置方式是否正确?
没错,这个设置方法是完全有效且可靠的。
你用的是Firefox Selenium中比较底层的配置方式:通过切换到chrome上下文(Firefox的核心浏览器配置层,区别于网页内容的content上下文),直接调用Firefox内置的Services.prefs来修改代理偏好。这种方式的优势是可以在浏览器运行时动态调整代理,而不需要提前通过FirefoxOptions配置。
具体来说:
network.proxy.type = 1是正确的参数,代表手动指定代理(0是无代理,2是系统代理);- 你分别为HTTP、SSL、SOCKS代理设置了地址和端口,逻辑清晰;
- 最后切回
content上下文的操作也很必要,避免后续的网页操作受到影响。
小补充:如果只设置了HTTP代理但未指定SSL代理,Firefox会默认使用HTTP代理处理HTTPS请求,这是符合预期的行为。
2. 如何获取驱动当前使用的代理值?
你可以用类似设置代理的方式,在chrome上下文里读取对应的偏好设置。这里给你写一个和set_proxy对应的get_proxy函数:
def get_proxy(driver): driver.execute("SET_CONTEXT", {"context": "chrome"}) try: # 读取所有代理相关的偏好,带默认值避免报错 proxy_info = driver.execute_script(""" return { proxy_type: Services.prefs.getIntPref('network.proxy.type'), http_proxy: `${Services.prefs.getCharPref('network.proxy.http', '')}:${Services.prefs.getIntPref('network.proxy.http_port', 0)}`, ssl_proxy: `${Services.prefs.getCharPref('network.proxy.ssl', '')}:${Services.prefs.getIntPref('network.proxy.ssl_port', 0)}`, socks_proxy: `${Services.prefs.getCharPref('network.proxy.socks', '')}:${Services.prefs.getIntPref('network.proxy.socks_port', 0)}` }; """) finally: driver.execute("SET_CONTEXT", {"context": "content"}) return proxy_info # 调用示例 driver = webdriver.Firefox() set_proxy(driver, http_addr="212.35.56.21", http_port=8080) current_proxy = get_proxy(driver) print("当前代理配置:", current_proxy)
额外验证方式
除了读取配置,你还可以通过访问IP查询网站来间接验证代理是否生效:
from selenium.webdriver.common.by import By driver.get("https://api.ipify.org") print("当前对外IP:", driver.find_element(By.TAG_NAME, "body").text)
把返回的IP和你设置的代理IP对比,就能确认代理是否在正常工作了。
内容的提问来源于stack exchange,提问作者Metariat
相关产品推荐
相关产品推荐

