2 votes

Phantom.js remplir les champs, cliquer sur soumettre, et maintenant bloqué à l'accès à la page suivante

J'ai commencé avec phantom.js (j'adore). J'essaie de faire en sorte que le navigateur headless aille sur mon panneau d'administration php, se connecte avec un nom d'utilisateur et un mot de passe, et à partir de la page vers laquelle il redirige après la connexion, je veux obtenir un texte à partir d'une balise div.

Jusqu'à présent, j'ai réussi à remplir les champs, à créer un événement de clic, et même à accéder à la partie DOM de la balise div et à obtenir le texte intérieur (inner.Text).

La seule partie manquante pour moi est ce qu'il faut faire lorsque phantom.js clique sur un bouton (le bouton de connexion dans ce cas) qui me connectera et changera le contenu de la page. Je ne trouve pas comment gérer l'événement après .click() ;.

Voici le code que j'ai créé jusqu'à présent (c'est d'ailleurs une bonne façon de commencer...)

var page = new WebPage();

page.open("the url comes here",
function(status){
if(status != "success"){console.log('fail loading the page');}
    page.evaluate(function(){
        var arr = document.getElementsByName("formname");
        arr[0].elements["username"].value="username here";
        arr[0].elements["password"].value="password here";
    arr[0].elements["submit"].click();
        return;
    }
    phantom.exit()
});

Le code que je veux exécuter sur la page qui suit est le suivant

console.log(window.frames[1].document.getElementById('status').innerHTML)

La seule question qui reste est donc de savoir comment gérer la redirection et lancer le script sur l'autre page.

Merci,

1voto

Ricardo Tomasi Points 13398

Vous devez configurer un nouveau callback pour le chargement de la page :

page.onLoadFinished = function(status){
  console.log(window.frames[1].document.getElementById('status').innerHTML)
}

Ceci devrait se produire juste avant le déclenchement .click() .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X