Selenium DevTools调用createSession时出现NoSuchMethodError错误求助
Selenium DevTools创建会话抛出NoSuchMethodError问题解决
问题代码
尝试启动DevTools会话的代码:
WebDriverManager.chromedriver().driverVersion("121.0.6167.184").setup(); ChromeDriver driver = new ChromeDriver(); DevTools devTools = driver.getDevTools(); devTools.createSession();
报错信息
运行后抛出以下错误:
Exception in thread "main" java.lang.reflect.InvocationTargetException at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:118) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at org.springframework.boot.loader.launch.Launcher.launch(Launcher.java:91) at org.springframework.boot.loader.launch.Launcher.launch(Launcher.java:53) at org.springframework.boot.loader.launch.JarLauncher.main(JarLauncher.java:58) Caused by: java.lang.NoSuchMethodError: 'java.util.function.Function org.openqa.selenium.devtools.ConverterFunctions.map(java.lang.String, java.util.function.Function)' at org.openqa.selenium.devtools.v121.target.Target.getTargets(Target.java:153) at org.openqa.selenium.devtools.v121.v121Target.getTargets(v121Target.java:55) at org.openqa.selenium.devtools.DevTools.findTarget(DevTools.java:171) at org.openqa.selenium.devtools.DevTools.createSession(DevTools.java:131) at org.openqa.selenium.devtools.DevTools.createSession(DevTools.java:117)
当前依赖配置(pom.xml)
<dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>4.19.1</version> </dependency> <dependency> <groupId>io.github.bonigarcia</groupId> <artifactId>webdrivermanager</artifactId> <version>5.8.0</version> </dependency> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-devtools-v121</artifactId> <version>4.19.1</version> </dependency>
环境信息
- Chrome浏览器版本:121.0.6157.0
- ChromeDriver版本:121.0.6167.184
- 导入的类:
import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.devtools.DevTools; import io.github.bonigarcia.wdm.WebDriverManager;
问题原因及解决办法
这个错误是Selenium核心包与DevTools包版本不兼容导致的:ConverterFunctions.map(String, Function)方法在你使用的Selenium 4.19.1核心包中不存在,但devtools-v121包却在调用这个方法,本质是依赖冲突或版本匹配问题。
解决步骤:
检查依赖冲突
用Maven命令查看项目依赖树,确认是否有其他依赖引入了旧版Selenium:mvn dependency:tree如果发现冲突,在对应的依赖中排除旧版Selenium相关组件:
<dependency> <!-- 替换为实际冲突的依赖坐标 --> <groupId>xxx</groupId> <artifactId>xxx</artifactId> <version>xxx</version> <exclusions> <exclusion> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-api</artifactId> </exclusion> <exclusion> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-devtools</artifactId> </exclusion> </exclusions> </dependency>切换Selenium版本
Selenium 4.19.1的devtools-v121存在兼容性问题,建议降级到4.18.1,该版本的核心包与devtools-v121匹配度更稳定:<dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>4.18.1</version> </dependency> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-devtools-v121</artifactId> <version>4.18.1</version> </dependency>简化DevTools初始化
不需要手动调用createSession(),driver.getDevTools()会自动完成会话初始化,直接使用即可:WebDriverManager.chromedriver().driverVersion("121.0.6167.184").setup(); ChromeDriver driver = new ChromeDriver(); DevTools devTools = driver.getDevTools(); // 直接调用devTools的方法,比如设置设备模拟 // devTools.send(Emulation.setDeviceMetricsOverride(375, 667, 1.0, false));
内容的提问来源于stack exchange,提问作者ProfiHartzer
相关产品推荐
相关产品推荐

