javascript在java中执行失败,XPathResult未定义

我正在尝试使用 java 执行 javascript 函数,但收到一条错误消息,指出它无法找到某些类。有人可以帮我解决这个问题吗?

我的 Java 课程

public class TestException {

    public static void main(String[] args) throws IOException,ScriptException {
        ScriptEngineManager engineMgr=new ScriptEngineManager();
        ScriptEngine engine=engineMgr.getEngineByName("JavaScript");
        Document doc=HtmlPage.getHTML("","C:\\Users\\DELL\\Desktop\\PHPTRAVELS.html","https://phptravels.com");
        String xpath="//input";
        
        //for single value
    /*  String jscript="return document.evaluate('"+xpath+"',document,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue;";
        WebElement element=(WebElement)jse.executeScript(jscript);
        System.out.println(element.getattribute("name"));*/
        
        String multiCode="var test=function(document){"
                + "var results=document.evaluate('//input',XPathResult.ORDERED_NODE_ITERATOR_TYPE,null);"+
                "var tagNames = [];\r\n"
                + "var count=0;" +
                "while(node = results.iterateNext()) {\r\n" + 
                "  count=count+1;" + 
                "}"
                + "\r\n return count}";
        /*FileWriter fileWrite=new FileWriter(new File(System.getProperty("user.dir")+"\\jScript.js"));
        fileWrite.write(multiCode);
        fileWrite.flush();
        fileWrite.close();*/
        
        try{
            engine.eval(multiCode);
            Invocable invc=(Invocable) engine;
            Long count=(Long)invc.invokeFunction("test",doc);
        //Long count=(Long) jse.executeScript(multiCode);
        System.out.println(count);
        }catch(Exception e){
            e.printStackTrace();
        }
        }

例外

javax.script.ScriptException: ReferenceError: "XPathResult" is not defined in <eval> at line number 1
    at jdk.nashorn.api.scripting.NashornScriptEngine.throwAsScriptException(NashornScriptEngine.java:470)
    at jdk.nashorn.api.scripting.NashornScriptEngine.invokeImpl(NashornScriptEngine.java:392)
    at jdk.nashorn.api.scripting.NashornScriptEngine.invokeFunction(NashornScriptEngine.java:190)
    at demo.TestException.main(TestException.java:58)
Caused by: <eval>:1 ReferenceError: "XPathResult" is not defined
    at jdk.nashorn.internal.runtime.ECMAErrors.error(ECMAErrors.java:57)
    at jdk.nashorn.internal.runtime.ECMAErrors.referenceError(ECMAErrors.java:319)
    at jdk.nashorn.internal.runtime.ECMAErrors.referenceError(ECMAErrors.java:291)
    at jdk.nashorn.internal.objects.Global.__noSuchProperty__(Global.java:1441)
    at jdk.nashorn.internal.scripts.Script$Recompilation$1$27A$\^eval\_.test(<eval>:1)
    at jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(ScriptFunctionData.java:639)
    at jdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:494)
    at jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:393)
    at jdk.nashorn.api.scripting.ScriptObjectMirror.callMember(ScriptObjectMirror.java:199)
    at jdk.nashorn.api.scripting.NashornScriptEngine.invokeImpl(NashornScriptEngine.java:386)

如果需要我方的数据,请告诉我。

youkuan 回答:javascript在java中执行失败,XPathResult未定义

您的代码的问题是,您使用的是 XPathResult 对象下的 windowwindow 对象实现由网络浏览器提供。 Nashorn (ScriptEngine) 不提供 window 实现。

来自 Java 文档:

虽然 Oracle Nashorn 运行符合 ECMA 标准的 JavaScript,但需要注意的是,通常可在 Web 浏览器中访问的对象不可用,例如控制台、窗口等。

您可以使用 jjs 选项使用 Nashorn 执行和验证您的 js 代码:

> jjs test.js
abc.js:2 ReferenceError: "XPathResult" is not defined

如果要解析 HTML 文件,可以使用 HTML 解析器(例如 https://jsoup.org/ )来实现,如果使用此代码进行测试,则可以使用 Selenium 的 API JavascriptExecutor#executeScript(...)

本文链接:https://www.f2er.com/1224443.html

大家都在问