Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过WebView的Javascript交互不适用于特定页面_Javascript_Javafx_Webview_Webkit - Fatal编程技术网

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

通过WebView的Javascript交互不适用于特定页面,javascript,javafx,webview,webkit,Javascript,Javafx,Webview,Webkit,我正在尝试加载带有JavaFXWebView控件的网页。特定页面为:。然后,一旦load worker的状态设置为Successed,我就使用w3c文档API在加载的网页上执行Javascript。具体来说,我想自动填写电子邮件登录输入,然后集中密码输入。出于某种原因,对于这个特定的页面,什么也没有发生(页面只是加载,两个文本输入保持空白)。我已经在其他几个登录页面上使用了这个确切的过程,它工作得非常完美(一个例子是:)。这让我很困惑。我的想法包括Bitfinex网站是否以某种方式“阻止”了互动

我正在尝试加载带有JavaFXWebView控件的网页。特定页面为:。然后,一旦load worker的状态设置为Successed,我就使用w3c文档API在加载的网页上执行Javascript。具体来说,我想自动填写电子邮件登录输入,然后集中密码输入。出于某种原因,对于这个特定的页面,什么也没有发生(页面只是加载,两个文本输入保持空白)。我已经在其他几个登录页面上使用了这个确切的过程,它工作得非常完美(一个例子是:)。这让我很困惑。我的想法包括Bitfinex网站是否以某种方式“阻止”了互动?另外,为什么将load worker状态设置为Successed两次(你会看到我使用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();
    }
}

如果你注入,你会在控制台上得到什么?还可以看看页面的代码:加载时有很多请求,而且涉及大量JavaScript。很酷的建议!使用Firebug控制台,尝试执行
document.getElementById('login')).value='Hello'
也不做任何操作。这意味着什么?我猜在状态切换到
成功时,
网页JavaScript尚未完全初始化,并且您要查找的元素尚未出现在DOM中。当我必须从javafx与网页交互时,我注册了JavaJavaScript桥我按照你的建议打开了一个Firebug控制台,实际上每一分钟执行一次命令,持续了20分钟,但它仍然没有执行任何操作,所以我不确定是否是这样。无论如何,我将采用不同的方法,使用他们的JavaScript使用的相同API,但是来自Java。