我正在尝试使用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);
        }


URLConnection能够访问该页面,我尝试打印输出并成功,但是由于奇怪的原因,指令:eng.eval(new InputStreamReader(connection.getInputStream()));给我错误:


  引起原因:jdk.nashorn.internal.runtime.ParserException:<eval>:1:0期望一个操作数,但是找到<


也许我误会了它的工作原理。有人可以更好地解释我吗?

URL的输出是:


  

最佳答案

Nashorn可以评估Java脚本,但是您正在向其中填充HTML页面(该页面仅包含一个脚本元素和一个脚本),因此失败。

您可以加载网址,从脚本元素中提取脚本(例如,使用JSoup),然后使用Nashorn运行提取的脚本。

关于java - Nashorn解析网页,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33255068/

10-11 22:28
查看更多