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

Selenium Grid4通过ngrok组网测试时RemoteWebDriver抛出JsonException异常

异常产生原因

你遇到的org.openqa.selenium.json.JsonException: Unable to determine type from: R错误,核心原因是Selenium组件收到了非JSON格式的响应,首字符R来自ngrok默认HTTP/HTTPS隧道返回的重定向报文或者错误HTML页面的开头内容,具体触发场景如下:

  • Selenium Grid 4的Node注册时,你配置的--host和--port对应的是ngrok的HTTP隧道地址,ngrok默认会将80端口的HTTP请求301/302重定向到HTTPS端口,Selenium Grid的内部通信默认不会处理3xx重定向,直接将重定向响应内容当作JSON解析触发报错
  • 你转发Hub的4442、4443、4444端口时如果使用了HTTP隧道,Selenium Grid事件总线基于TCP协议的报文会被HTTP隧道插入额外的请求头/响应头,导致报文格式损坏无法解析
解决方案

按照以下步骤调整配置即可解决:

  1. Hub侧端口转发全部改用TCP隧道
    停止原有ngrok进程,分别为Hub的3个端口启动TCP转发,示例命令:
    ngrok tcp 4442
    ngrok tcp 4443
    ngrok tcp 4444
    
    记录每个TCP隧道的对外地址,比如1.tcp.ngrok.io:20001对应4442端口,1.tcp.ngrok.io:20002对应4443端口,1.tcp.ngrok.io:20003对应4444端口。
  2. Node侧端口转发改用TCP隧道
    停止Node侧原有ngrok进程,为Node的服务端口启动TCP转发,示例命令(本地端口可自定义未占用端口即可):
    ngrok tcp 5555
    
    记录Node侧TCP隧道的对外地址,比如2.tcp.ngrok.io:30001。
  3. 调整Node启动参数
    替换原有启动命令中的事件总线地址、Node对外地址参数:
    java -jar "selenium-server-4.0.0.jar" node --detect-drivers true --publish-events tcp://1.tcp.ngrok.io:20001 --subscribe-events tcp://1.tcp.ngrok.io:20002 --host 2.tcp.ngrok.io --port 30001
    
  4. 调整测试代码连接地址
    将RemoteWebDriver的连接地址改为Hub的4444端口对应TCP隧道地址,使用http协议:
    URL url = new URL("http://1.tcp.ngrok.io:20003/wd/hub");
    

调整完成后先访问Hub的/status接口,确认Node已正常注册且Node的对外地址为TCP隧道地址,再执行测试即可正常运行。

内容的提问来源于stack exchange,提问作者Программер

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:45:03