【问题标题】:Automatic clicking an button in JavaFX Webview自动单击 JavaFX Webview 中的按钮
【发布时间】:2013-12-25 18:37:38
【问题描述】:

我正在使用一个可以自动登录到某些站点的 JavaFX Webbrowser,我知道如何将数据设置为用户名和密码字段,但是如何让它执行登录按钮单击? 这是我到目前为止得到的:

String email  =  "document.getElementsByName('email')[0].value='MY_EMAIL';";
            String pass =    "document.getElementsByName('pass')[0].value='MY_PASSWORD';";
            String login =   "";
            webEngine.executeScript(email);
            webEngine.executeScript(pass);
            webEngine.executeScript(login);

这是它应该点击的按钮的 javascript 代码:

<label class="uiButton uiButtonConfirm" id="loginbutton" for="u_0_c"><input value="Aanmelden" tabindex="4" type="submit" id="u_0_c"></label>  

【问题讨论】:

    标签: java javascript button browser javafx


    【解决方案1】:

    这是一个集中的、非专业的示例...使用 dom.w3c.Node.* 包

    HTMLInputElement element = (HTMLInputElement)myWebView.getEngine().getDocument().getElementsByTagName("input").item(0);
    element.click();
    

    找到一种方法来处理您正在寻找的对象,它会起作用。

    【讨论】:

    • 我收到了com.sun.webkit.dom.HTMLButtonElementImpl cannot be cast to org.w3c.dom.html.HTMLInputElement 任何想法?
    • 据我记忆,按钮元素和输入元素不是彼此的扩展。我认为你可以通过首先检查类来解决这个问题,然后相应地转换你的元素。使用 instanceof 或 getClass().equals(someElement.class) 或类似的。应该工作。
    【解决方案2】:

    我还没有尝试过,但它应该可以工作。这个想法是将 jQuery 添加到加载的页面,然后使用它来单击按钮。这篇文章解释了如何用 JS 做到这一点:How Do I Add jQuery To Head With JavaScript? 所以用 Java 应该是这样(我已经将第一个答案复制到一个字符串中并用网络引擎执行它):

    String script = "script = document.createElement('script');\n" +
        "\n" +
        "script.onload = function() {\n" +
        "    // jQuery is available now\n" +
        "};\n" +
        "var head = document.getElementsByTagName(\"head\")[0];\n" +
        "\n" +
        "script.type = 'text/javascript';\n" +
        "script.src = 'https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js';\n" +
        "\n" +
        "head.appendChild(script);";
    
    webEngine.executeScript(script);
    

    这应该在 WebView 初始化时正确完成(通过webEngine.getLoadWorker().stateProperty().addListener(...))。注意:jQuery 是异步加载的。

    现在您应该可以使用 jQuery 单击按钮了:

    webEngine.executeScript("$('#buttonId')[0].click()");
    

    这篇文章应该可以帮助您在 WebView 中调试 JS:JAVAFX / WebView / WebEngine FireBugLite or Some other debugger?

    【讨论】:

    • 我收到一个错误:netscape.javascript.JSException:ReferenceError:找不到变量:在 com.sun.webpane.platform.WebPage.twkExecuteScript(Native Method) 在 com.sun.webpane .platform.WebPage.executeScript(WebPage.java:1438) at javafx.scene.web.WebEngine.executeScript(WebEngine.java:811)
    • 该错误表示head未声明。我已经更新了代码示例并检查了它是否正常工作。在 FirebugLite 中,您可以检查您的 jQuery 选择器,即在控制台中输入 jQuery('body')$('body')
    • 修复了错误谢谢,但我现在又遇到了另一个错误:netscape.javascript.JSException: TypeError: 'undefined' is not an object at com.sun.webpane.platform.WebPage.twkExecuteScript(Native Method ) 在 com.sun.webpane.platform.WebPage.executeScript(WebPage.java:1438) 在 javafx.scene.web.WebEngine.executeScript(WebEngine.java:811)
    • 这是一个 JS 错误,类似于 Java 中的 NullPointerException。可能是buttonId 或者按钮有不同的ID?您可以在 FirebugConsole 中测试 jQuery 选择器:输入 $('#buttonId') 以检查按钮是否存在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-06
    • 1970-01-01
    • 1970-01-01
    • 2013-06-13
    • 2013-10-25
    • 1970-01-01
    相关资源
    最近更新 更多