Rhino 解析网页
Nashorn parse web page
我正在尝试使用 Nashorn 来解析网页的 JS 内容。
我使用以下代码初始化 Nashorn 并加载页面:
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine eng = manager.getEngineByName("nashorn");
//...
URL url = new URL("http://192.168.1.1/userRpm/StatusRpm.htm");
URLConnection connection = url.openConnection();
try {
eng.eval(new InputStreamReader(connection.getInputStream()));
value = eng.get("mobileParam[0]");
System.out.println(value);
} catch (ScriptException ex) {
Logger.getLogger(Router.class.getName()).log(Level.SEVERE, null, ex);
}
URL连接能够到达页面,我尝试打印输出并且它有效,但由于奇怪的原因,指令:eng.eval(new InputStreamReader(connection.getInputStream()));
给我错误:
Caused by: jdk.nashorn.internal.runtime.ParserException: <eval>
:1:0 Expected an operand but found <
也许我误解了它的工作原理。谁能更好地解释我?
URL 的输出是:
< SCRIPT type="....
Nashorn 可以评估 Javascript,但您正在向其中提供 HTML 页面(其中只包含一个脚本元素和一个脚本),因此它失败了。
您可以加载 URL,从脚本元素中提取脚本(例如使用 JSoup),然后使用 Nashorn 运行 提取的脚本。
我正在尝试使用 Nashorn 来解析网页的 JS 内容。 我使用以下代码初始化 Nashorn 并加载页面:
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine eng = manager.getEngineByName("nashorn");
//...
URL url = new URL("http://192.168.1.1/userRpm/StatusRpm.htm");
URLConnection connection = url.openConnection();
try {
eng.eval(new InputStreamReader(connection.getInputStream()));
value = eng.get("mobileParam[0]");
System.out.println(value);
} catch (ScriptException ex) {
Logger.getLogger(Router.class.getName()).log(Level.SEVERE, null, ex);
}
URL连接能够到达页面,我尝试打印输出并且它有效,但由于奇怪的原因,指令:eng.eval(new InputStreamReader(connection.getInputStream()));
给我错误:
Caused by: jdk.nashorn.internal.runtime.ParserException:
<eval>
:1:0 Expected an operand but found <
也许我误解了它的工作原理。谁能更好地解释我?
URL 的输出是:
< SCRIPT type="....
Nashorn 可以评估 Javascript,但您正在向其中提供 HTML 页面(其中只包含一个脚本元素和一个脚本),因此它失败了。
您可以加载 URL,从脚本元素中提取脚本(例如使用 JSoup),然后使用 Nashorn 运行 提取的脚本。