Selenium webdriver不关闭浏览器前提下修改user-agent的实现方法
实现方案
你需求的效果完全可以实现,无需重启浏览器实例,有两种常用方案:
方案1:通过修改Firefox内置配置实现(兼容所有Selenium版本)
通过访问Firefox的配置页直接修改UA偏好,修改后新标签页自动生效,示例代码如下:
from selenium import webdriver # 原有初始化逻辑 profile = webdriver.FirefoxProfile() profile.set_preference("general.useragent.override", "whatever") driver = webdriver.Firefox(profile) # 需要修改UA时执行以下逻辑 new_user_agent = "替换为你需要的新UA字符串" # 打开配置页 driver.get("about:config") # 确认风险提示 driver.find_element("id", "warningButton").click() # 执行JS修改UA配置 driver.execute_script(f""" const prefService = Components.classes["@mozilla.org/preferences-service;1"] .getService(Components.interfaces.nsIPrefBranch); prefService.setCharPref("general.useragent.override", "{new_user_agent}"); """) # 之后打开的新标签页自动使用新UA driver.execute_script("window.open('');")
方案2:Selenium4+ 调用CDP协议实现(更简便稳定)
Selenium4及以上版本支持调用Firefox的Chrome DevTools协议接口,直接修改UA无需跳转配置页,示例代码如下:
from selenium import webdriver # 原有初始化逻辑 profile = webdriver.FirefoxProfile() profile.set_preference("general.useragent.override", "whatever") driver = webdriver.Firefox(profile) # 需要修改UA时直接执行 new_user_agent = "替换为你需要的新UA字符串" driver.execute_cdp_cmd("Network.setUserAgentOverride", { "userAgent": new_user_agent }) # 之后打开的新标签页自动使用新UA driver.execute_script("window.open('');")
注意事项
- 优先推荐使用方案2,无需跳转配置页,操作更稳定,仅需保证Selenium版本≥4.0、Firefox版本≥86即可
- 修改UA仅对后续新发起的请求、新打开的标签页生效,已加载完成的旧页面不会更新UA
- 需要恢复默认UA时,方案1可执行JS调用
prefService.clearUserPref("general.useragent.override")清空配置,方案2重新调用CDP接口传入浏览器默认UA即可
内容的提问来源于stack exchange,提问作者zizou growler
相关产品推荐
相关产品推荐

