Bonjour,

Je cherche à ce que mon application ouvre directement une page web dans un WebView. L'accès étant restreint, le but est de passer le login/password pour accéder directement à la page protégée... Le code en dessous fonctionne... Presque !
Je me heurte à la problématique suivante:
- si je ne mets pas le submit() dans le traitement, le code injecte bien le login/mot de passe et un CLIC sur le bouton submit ouvre la page protégée
- si je mets le submit(), je vois bien apparaître la page de login avec l'injection du login/mdp mais, le WebView rouvre la page de login au lieu de la page protégée.

J'avoue que je sèche ! Cela doit être évident mais...

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
 
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.concurrent.Worker;
import javafx.scene.layout.StackPane;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.html.HTMLButtonElement;
import org.w3c.dom.html.HTMLFormElement;
import org.w3c.dom.html.HTMLInputElement;
 
public class Meteo extends StackPane {
 
    final WebView MET_VIEW;
    final BooleanProperty loginAttempted = new SimpleBooleanProperty(false);
    HTMLFormElement form;
 
    public Meteo() {
        super();
        MET_VIEW = new WebView();
        WebEngine WE = MET_VIEW.getEngine();
        WE.getLoadWorker().stateProperty().addListener(new ChangeListener<Worker.State>() {
            @Override
            public void changed(ObservableValue<? extends Worker.State> observableValue, Worker.State state, Worker.State t1) {
                System.out.println(observableValue);
                if (t1 == Worker.State.SUCCEEDED&&!loginAttempted.get()) {
                    Document doc = WE.getDocument();
                    if (doc.getElementsByTagName("form").getLength() > 0) {
                        form = (HTMLFormElement) doc.getElementsByTagName("form").item(0);
                        HTMLInputElement username = null;
                        HTMLInputElement password = null;
                        NodeList nodes = form.getElementsByTagName("input");
                        for (int i = 0; i < nodes.getLength(); i++) {
                            HTMLInputElement input = (HTMLInputElement) nodes.item(i);
                            switch (input.getName()) {
                                case "login": username = input;
                                    break;
                                case "pass": password = input;
                                    break;
                            }
                        }
                        if (username != null && password != null && !loginAttempted.get()) {
                            loginAttempted.setValue(true);
                            username.setValue("****LOGIN****");
                            password.setValue("***PASSWORD***");
                            form.submit();
                        }
                    }
                }
            }
        });
        WE.getLoadWorker().exceptionProperty().addListener(new ChangeListener<Throwable>() {
               @Override
               public void changed(ObservableValue<? extends Throwable> ov, Throwable oldException, Throwable exception) {
                   System.out.println("Load Exception: " + exception);
               }
        });
        WE.load("https://*********************");
 
        this.getChildren().add(MET_VIEW);
    }