2016-10-19 4 views
1

私のアプリケーションは自動的にウェブサイトのkolotibabloにログオンしますが、サイトはタグフォームが存在しません。送信するにはどうすればよいですか?ありがとう。ウェブサイト:JavaFX Webengine

@Override 
    public void initialize(URL url, ResourceBundle rb) { 
     // 
     WebEngine engine = browser.getEngine(); 
     engine.load("https://www.kolotibablo.com/panel/login#login"); 
     engine.setJavaScriptEnabled(true); 

     engine.documentProperty().addListener(new ChangeListener<Document>() { 
      @Override 
      public void changed(ObservableValue<? extends Document> observable, Document oldValue, Document newValue) { 
       engine.getDocument().getElementById("login").setAttribute("value", "User Name"); 
       engine.getDocument().getElementById("password").setAttribute("value", "Password"); 
      //Login 
      } 
     }); 

    } 

答えて

2

これを以下のコードを使用して成功させました。私はあなたのengine.documentPorperty()リスナーを使用しなかったので、私はそのコードを完全に削除しました。

this answerの助けを借りて私は少し編集することができました。

engine.getLoadWorker().stateProperty().addListener((ov, oldState, newState) -> { 
    if (newState == Worker.State.SUCCEEDED) { 
     Element login = engine.getDocument().getElementById("login"); 
     if (login != null) { 
      login.setAttribute("Value", "User_Name"); 
      System.out.println(login.getAttribute("Value")); 
     } 
     Element password = engine.getDocument().getElementById("password"); 
     if (password != null) { 
      password.setAttribute("Value", "Password"); 
      System.out.println(password.getAttribute("Value")); 
     } 
     HTMLElementImpl loginButton = (HTMLElementImpl) engine.getDocument().getElementById("login_button"); 

     if (loginButton != null) { 
      loginButton.addEventListener("click", event -> { 
       System.out.println("here " + event.getType()); 
      }, false); 
      loginButton.click(); 
     } 
    } 
}); 

だから、これは労働者の状態が成功するまで待ってから、login要素をつかむ、属性を設定し、password要素をつかむ、属性を設定し、HTMLElementImplとしてloginButtonをつかむ、私たちはシミュレートすることを可能にするだろうそれをクリックします。

私は印刷物に残っているので、起こったことが完了したことを確認できます。

これが役に立ちます。

編集1

だから私はこの問題を再訪し、私はこの解決策を考え出したも

String username = "User_Name"; 
String password = "Password"; 
String enterUserName = "document.getElementById('login').value='" + username + "';"; 
String enterPw = "document.getElementById('password').value='" + password + "';";; 
engine.getLoadWorker().stateProperty().addListener((ov, oldState, newState) -> { 
    if (newState == Worker.State.SUCCEEDED) { 
     engine.executeScript(enterUserName); 
     engine.executeScript(enterPw); 
    } 
}); 

私は把握できませんでした唯一のことはloginボタンをクリックする方法です。私が試したすべてが失敗しました。だから、すみません。しかし、これを行う別の方法もあります。 。

+0

ダウンロードが完了したら、ウェブサイトのパスワードのみで属性login.setAttribute( "Value"、 "User_Name")を設定できます。 –

+0

それはインストールされません –

+0

'login'は別の'属性 'を使用しなければなりません。私は明日まで見ることができません –

1

HTMLFormElement loginForm =(HTMLFormElement)webEngine.getDocument()getElementByIdを( "ログイン")を使用してください。 loginForm.submit(); 上記のコードでは、上記のコードで "ログイン"はフォームIDです

関連する問題