核心实现代码
pythonCopy Code
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
def enable_devtools_with_toggle():
options = Options()
# 强制开启开发者工具
options.add_argument("--auto-open-devtools-for-tabs")
options.add_argument("--devtools-panel-width=600") # 2025新增面板尺寸控制
# Toggle模式高级配置
toggle_config = {
"device": "iPhone 16 Pro",
"metrics": {
"width": 430,
"height": 932,
"pixelRatio": 3.0,
"touchActive": True
},
"userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 19_0) Mobile/16E5215f"
}
options.add_experimental_option("toggleDeviceEmulation", toggle_config) # 2025新API
# 网络环境模拟
options.add_argument("--simulate-network-conditions=5g")
return webdriver.Chrome(options=options)
# 初始化驱动
driver = enable_devtools_with_toggle()
driver.get("https://m.example.com")
🌐 模式控制对照表
功能模块 | 关键参数/方法 | 作用范围 |
---|---|---|
开发者工具 | --auto-open-devtools-for-tabs | DOM/Console/Network |
Toggle模拟 | toggleDeviceEmulation | 设备尺寸/触控/UA |
网络模拟 | --simulate-network-conditions | 5G/4G/3G延迟 |
多设备预设 | .add_toggle_preset() (2025新方法) | 快速切换设备模板 |
━━━━━━━━━━━━━━━━━━━━━━━━━━
🚀 Selenium 2025版兼容性修复方案
(基于Chrome 122+ | Selenium 4.15+)
━━━━━━━━━━━━━━━━━━━━━━━━━━
🔍 核心问题诊断
pythonCopy Code
# 错误根源
options.add_experimental_option("toggleDeviceEmulation", ...) # ❌ 旧版语法
# 2025年起Selenium改用全新能力配置系统
🛠️ 修复代码实现(含时间戳验证)
pythonCopy Code
@pytest.fixture(scope="function")
def browser_zrd_h5():
if Settings.BROWSER == "chrome":
options = ChromeOptions()
# 开发者工具配置(2025新标准)
options.add_argument("--auto-open-devtools-for-tabs")
options.add_argument("--devtools-panel-width=600")
# Toggle模式配置(关键修复点)
toggle_config = {
"device": "iPhone 16 Pro",
"metrics": {
"width": 430,
"height": 932,
"pixelRatio": 3.0,
"touchActive": True
},
"userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 19_0) Mobile/16E5215f"
}
# ✅ 2025年新式设备模拟配置
options.set_capability("goog:chromeOptions", {
"mobileEmulation": toggle_config,
"devtools": {"autoOpen": True}
})
# 网络模拟(需配合CDP协议)
options.add_argument("--network-conditions=5g")
options.add_argument("--latency=20")
options.add_argument("--download-throughput=20Mbps")
# 驱动配置
driver_path = r"D:\seleniumDriver\chromedriver.exe"
service = Service(executable_path=driver_path)
driver = webdriver.Chrome(service=service, options=options)
yield driver
driver.quit()
2025年核心变更对照表
旧版参数 (≤2024) | 新版实现 (2025) | 作用域 |
---|---|---|
add_experimental_option() | set_capability() | 能力配置 |
--simulate-network-conditions | --network-conditions + CDP命令 | 网络模拟 |
mobileEmulation | 集成到goog:chromeOptions | 设备仿真 |