通过WebView的Javascript交互不适用于特定页面
我正在尝试加载带有JavaFXWebView控件的网页。特定页面为:。然后,一旦load worker的状态设置为Successed,我就使用w3c文档API在加载的网页上执行Javascript。具体来说,我想自动填写电子邮件登录输入,然后集中密码输入。出于某种原因,对于这个特定的页面,什么也没有发生(页面只是加载,两个文本输入保持空白)。我已经在其他几个登录页面上使用了这个确切的过程,它工作得非常完美(一个例子是:)。这让我很困惑。我的想法包括Bitfinex网站是否以某种方式“阻止”了互动?另外,为什么将load worker状态设置为Successed两次(你会看到我使用if语句来防止出现这种情况,方法是检查这两个元素是否仍然为null,这对我的理解来说是不必要的,对其他页面来说也是不必要的,但我不知道这是否与手头的问题有关?这真的是一个很难复制/钻取的模糊、奇怪的错误吗不管怎样,我希望这件事会得到澄清 守则:通过WebView的Javascript交互不适用于特定页面,javascript,javafx,webview,webkit,Javascript,Javafx,Webview,Webkit,我正在尝试加载带有JavaFXWebView控件的网页。特定页面为:。然后,一旦load worker的状态设置为Successed,我就使用w3c文档API在加载的网页上执行Javascript。具体来说,我想自动填写电子邮件登录输入,然后集中密码输入。出于某种原因,对于这个特定的页面,什么也没有发生(页面只是加载,两个文本输入保持空白)。我已经在其他几个登录页面上使用了这个确切的过程,它工作得非常完美(一个例子是:)。这让我很困惑。我的想法包括Bitfinex网站是否以某种方式“阻止”了互动
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。