You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派Zero 2运行Selenium JAR脚本遇NoSuchDriverException错误求助

树莓派Zero 2运行Java Selenium JAR脚本报错排查与解决

问题场景

在树莓派Zero 2上运行打包为JAR的Selenium Java脚本时出现错误,脚本在Windows环境修改路径后可正常运行,树莓派已安装匹配版本的chromium-chromedriver和OpenJDK,直接执行chromedriver无异常。

错误日志

Exception in thread "main" org.openqa.selenium.remote.NoSuchDriverException: Unable to obtain: Capabilities {browserName: chrome, goog:chromeOptions: {args: [--headless=new], binary: /usr/bin/chromedriver, extensions: []}}, error Command failed with code: 2, executed: [--browser, chrome, --language-binding, java, --output, json, --browser-path, /usr/bin/chromedriver]
/tmp/selenium-manager12749831998940039089/manager/0.4.18/selenium-manager: 1: Syntax error: "(" unexpected
at org.openqa.selenium.remote.service.DriverFinder.getPath(DriverFinder.java:48)
at org.openqa.selenium.remote.service.DriverFinder.getPath(DriverFinder.java:33)
at org.openqa.selenium.chrome.ChromeDriver.generateExecutor(ChromeDriver.java:99)
at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:89)
at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:84)
at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:73)
at chess.Main.main(Main.java:13)
Caused by: org.openqa.selenium.WebDriverException: Command failed with code: 2, executed: [--browser, chrome, --language-binding, java, --output, json, --browser-path, /usr/bin/chromedriver]
/tmp/selenium-manager12749831998940039089/manager/0.4.18/selenium-manager: 1: Syntax error: "(" unexpected
at org.openqa.selenium.manager.SeleniumManager.runCommand(SeleniumManager.java:159)
at org.openqa.selenium.manager.SeleniumManager.getDriverPath(SeleniumManager.java:303)
at org.openqa.selenium.remote.service.DriverFinder.getPath(DriverFinder.java:45)
... 6 more
Caused by: org.openqa.selenium.json.JsonException: Unable to parse: /tmp/selenium-manager12749831998940039089/manager/0.4.18/selenium-manager: 1: Syntax error: "(" unexpected
at org.openqa.selenium.json.Json.toType(Json.java:169)
at org.openqa.selenium.json.Json.toType(Json.java:152)
at org.openqa.selenium.manager.SeleniumManager.runCommand(SeleniumManager.java:144)
... 8 more
Caused by: org.openqa.selenium.json.JsonException: Unable to determine type from: /. Last 1 characters read: /, next 106 characters to read: tmp/selenium-manager12749831998940039089/manager/0.4.18/selenium-manager: 1: Syntax error: "(" unexpected
Build info: version: '4.18.1', revision: 'b1d3319b48'
System info: os.name: 'Linux', os.arch: 'arm', os.version: '6.1.21-v7+', java.version: '11.0.22'
Driver info: driver.version: ChromeDriver
at org.openqa.selenium.json.JsonInput.peek(JsonInput.java:166)
at org.openqa.selenium.json.JsonTypeCoercer.lambda$buildCoercer$6(JsonTypeCoercer.java:167)
at org.openqa.selenium.json.JsonTypeCoercer.coerce(JsonTypeCoercer.java:146)
at org.openqa.selenium.json.Json.toType(Json.java:206)
at org.openqa.selenium.json.Json.toType(Json.java:167)

运行脚本

package chess;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

public class Main {

public static void main(String args[]) {
    ChromeOptions c = new ChromeOptions();
    c.setBinary("/usr/bin/chromedriver");
    c.addArguments("--headless=new");
    WebDriver chess = new ChromeDriver(c);
    chess.get("https://chess.com");
    System.out.print(chess.getTitle());
}

}

环境说明

  • 树莓派Zero 2,系统版本Linux 6.1.21-v7+
  • 已通过sudo apt install chromium-chromedriver安装驱动,驱动路径/usr/bin/chromedriver,直接运行驱动无异常
  • 已安装最新OpenJDK 11
  • 脚本在Windows Eclipse中用Maven打包为包含所有依赖的胖JAR,运行命令java -cp ch9.jar chess.Main

解决步骤

1. 修正ChromeOptions的setBinary参数

当前错误地将setBinary指向了chromedriver的路径,这个方法应该设置浏览器程序的路径,而非驱动程序。树莓派上Chromium浏览器的默认路径通常是/usr/bin/chromium-browser,修改代码:

ChromeOptions c = new ChromeOptions();
// 替换为浏览器路径,而非驱动路径
c.setBinary("/usr/bin/chromium-browser");
c.addArguments("--headless=new");

2. 禁用Selenium自动管理驱动

错误日志显示Selenium Manager下载的二进制文件在ARM架构的树莓派上无法运行,出现语法错误。由于已手动安装匹配版本的chromedriver,可通过以下方式禁用自动管理:

方法一:设置驱动路径系统属性

在初始化ChromeDriver前添加:

System.setProperty("webdriver.chrome.driver", "/usr/bin/chromedriver");

方法二:禁用Selenium Manager

运行命令时添加参数:

java -Dwebdriver.chrome.driver=/usr/bin/chromedriver -Dselenium-manager.disable=true -cp ch9.jar chess.Main

或在代码中设置:

System.setProperty("selenium-manager.disable", "true");
System.setProperty("webdriver.chrome.driver", "/usr/bin/chromedriver");

3. 验证依赖适配ARM架构

在Windows(x86架构)打包的胖JAR可能包含x86架构的二进制依赖,导致在ARM架构的树莓派上无法运行。建议:

  • 在树莓派本地编译打包项目,确保所有依赖适配ARM架构
  • 或在Maven打包时指定ARM架构的依赖,排除x86版本

4. 补充headless稳定性参数(可选)

针对树莓派的headless模式,可添加额外参数提升稳定性:

c.addArguments("--disable-gpu");
c.addArguments("--no-sandbox");
c.addArguments("--disable-dev-shm-usage");

内容的提问来源于stack exchange,提问作者Wesley Droll

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 00:43:21