通过WebView进行Javascript交互不适用于特定页面

时间:2016-01-19 07:02:14

标签: javascript javafx webview webkit

我正在尝试使用JavaFX WebView控件加载网页。具体页面为:https://bitfinex.com/login。然后,一旦将load worker的状态设置为SUCCEEDED,我就使用w3c Document API在加载的网页上执行Javascript。具体来说,我想自动填写电子邮件登录输入,然后关注密码输入。由于某种原因,对于这个特定的页面,没有任何反应(页面只是加载,两个文本输入保持空白)。我已经在其他几个登录页面上使用了这个确切的过程,并且它运行得很完美(例如:https://www.coinbase.com/signin)。这让我很困惑。我的想法不仅仅是Bitfinex网站以某种方式“阻止”互动?另外,为什么load worker状态设置为SUCCEEDED两次(你会看到我使用if语句通过检查这两个元素是否仍为null来防止这种情况,这对我的理解不是必需的,并且对于其他页面,但我不知道这是否与手头的问题有关?这是一些非常模糊,奇怪的错误,很难复制/深入研究吗?无论如何......我希望这将被清除。

代码:

package test;

import javafx.application.Application;
import javafx.concurrent.Worker;
import javafx.scene.Scene;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;

import org.w3c.dom.Document;
import org.w3c.dom.html.HTMLInputElement;

public class MainApp extends Application
{
    public static void main(String[] args) throws Exception
    {
        launch(args);
    }

    public void start(Stage stage) throws Exception
    {
        WebView webView = new WebView();
        WebEngine webEngine = webView.getEngine();
        webEngine.load("https://www.bitfinex.com/login");
        webView.setPrefSize(610, 610);
        webEngine.getLoadWorker().stateProperty().addListener((observableValue, oldState, newState) ->
        {
            if (newState == Worker.State.SUCCEEDED)
            {
                Document document = webEngine.getDocument();
                if (document.getElementById("login") == null || document.getElementById("auth-password") == null)
                {
                    return;
                }
                ((HTMLInputElement) document.getElementById("login")).setValue("john_appleseed@gmail.com");
                ((HTMLInputElement) document.getElementById("auth-password")).focus();
            }
        });
        stage.setScene(new Scene(webView));
        stage.show();
    }
}

0 个答案:

没有答案