gpt4 book ai didi

java - 如何单击加载到 JavaFX Webengine 的网站上的按钮

转载 作者:搜寻专家 更新时间:2023-11-01 03:05:18 25 4
gpt4 key购买 nike

我是 JavaFX 的新手。我已成功将网站加载到我的 JavaFX 应用程序中。我想从我的 java 应用程序登录网站。到目前为止,我可以将我的登录值插入到相应的输入框中,但我不知道如何单击提交按钮。有人能帮我吗。这是我到目前为止所拥有的。 enter image description here

这是我的 Controller 类。

    public class Controller implements Initializable{


@FXML
protected TextField usernameLogin;
@FXML
protected TextField passwordLogin;
@FXML
protected Button loginButton;
@FXML
protected WebView webviewBrowser;
@Override
public void initialize(URL location, ResourceBundle resources) {

final WebEngine engine = webviewBrowser.getEngine();
engine.load("http://gmail.com");
engine.setJavaScriptEnabled(true);

loginButton.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {


String username = usernameLogin.getText().toString();
String password = passwordLogin.getText().toString();

engine.getDocument().getElementById("Email").setAttribute("Value", username);
engine.getDocument().getElementById("Passwd").setAttribute("Value", password);

//engine.getDocument().getElementById("submit"). ??submit code??

}
});


}
}

有人可以帮助我吗?我应该怎么做才能提交?谢谢。

最佳答案

我发现此链接包含在 JavaFX 的 WebView 组件中使用 html 表单的示例:https://community.oracle.com/thread/2510161?start=0&tstart=0 .

下面的示例将获取对表单的引用并提交它。

由于 jfxwebkit.dll 的错误,我实际上无法让 gmail 完全加载到 WebView 组件中。

import java.util.concurrent.atomic.AtomicBoolean;

import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.concurrent.Worker;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
import org.w3c.dom.Element;
import org.w3c.dom.html.HTMLFormElement;

public class Main extends Application {
@Override
public void start( Stage stage ) throws Exception {
stage.setTitle( "JavaFX WebView Example" );
BorderPane borderPane = new BorderPane();
WebView webviewBrowser = new WebView();
borderPane.setCenter( webviewBrowser );
final WebEngine engine = webviewBrowser.getEngine();
engine.load( "http://gmail.com" );
engine.setJavaScriptEnabled( true );
final String username = "324jlk23j4l2klj34l2kj34l2jk34l2kj3lkjlajksdflkj@gmail.com";
final String password = "password";
final AtomicBoolean submitted = new AtomicBoolean();
engine.getLoadWorker().stateProperty().addListener(
new ChangeListener<Worker.State>() {
@Override
public void changed( ObservableValue<? extends Worker.State> ov,
Worker.State oldState, Worker.State newState ) {
if ( newState == Worker.State.SUCCEEDED ) {
Element emailField = engine.getDocument().getElementById( "Email" );
if ( emailField != null ) {
emailField.setAttribute( "Value", username );
}
Element passwordField = engine.getDocument().getElementById( "Passwd" );
if ( emailField != null ) {
passwordField.setAttribute( "Value", password );
}
HTMLFormElement gaia_loginform = ( HTMLFormElement ) engine.getDocument().getElementById( "gaia_loginform" );
if ( gaia_loginform != null ) {
if ( !submitted.get() ) {
submitted.set( true );
gaia_loginform.submit();
}
}
}
}
}
);
stage.setScene( new Scene( borderPane, 800, 600 ) );
stage.show();
}
}

关于java - 如何单击加载到 JavaFX Webengine 的网站上的按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24847951/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com