IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

PhantomJS - Accéder à une fonction de la page


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut PhantomJS - Accéder à une fonction de la page
    Bonjour,

    Je fais mes premiers tests avec PhantomJS, la partie qui m'intéresse étant l'automatisation de pages (Page Automation) et je cherche a comprendre un truc.
    J'utilise l'évènement onLoadFinished (comme les évènements décrit ici), pour lancer un "page.evaluate" dans lequel j'espèrais pouvoir appeller une fonction qui me semble "global scope", et évidemment si je suis ici, c'est que cela ne fonctionne pas, pour le moment.
    Donc imaginons, j'ai une page qui contient des liens du type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <a class="unClasse" onclick="doSomething(Parameter)">BlaBla</a>
    Première question, car je suis peut être dès ce niveau à côté de la plaque -> cette fonction "doSomething()", telle qu'elle est dans la page, elle est bien définie au niveau "global", correct ?
    (note: je ne suis pas l'auteur de la page en question sur laquelle je dois faire le test)

    Je me suis amusé a tester d'un manière plus rustique, en chargeant la page via une bonne vieille IFrame, et une fois arrivé au niveau "contentWindow", j'ai pu bel et bien appeller la fonction "doSomething".
    Donc j'espérais pouvoir faire de même en mieux via PhantomJS, ou j'imaginais pouvoir bien contrôler que les pages sont bien loadées via onLoadFinished, et lancer des actions sur celles-ci de manière "sûre" via page.evaluate... qu'est ce que je rate ?

    Certes, je pourrais toujours me ballader dans le DOM, trouver le bon lien et simuler un click dessus. Mais ca me casse les pieds et je pensais vraiment pouvoir appeler la fameuse fonction en lui passant les paramètres qui me vont bien.

    Merci d'avance !
    @+

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 672
    Par défaut
    Citation Envoyé par Sunchaser Voir le message
    cela ne fonctionne pas
    qu'est ce que cela veut dire pour vous ?
    quel est le code que vous lancez ? quel résultat attendiez vous ? quel résultat obtenez-vous ?

  3. #3
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Bonsoir,

    Le résultat obtenu est cette erreur:
    ReferenceError: Can't find variable: doSomething
    Grosso modo, le code utilisé suit les exemples trouvés de-ci de-là:
    . dans le onLoadFinished
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	page.onLoadFinished= function() {
    		page.render(currentStep + '_Printscreen.png');
    		console.log('Step ', currentStep, ': onLoadFinished');
    		currentStep++;
    		steps[currentStep]();
    	};
    A ce stade, la variable "currentStep" vaut 1, "steps" est un tableau dont chaque item fait référence a une fonction.
    La fonction en question ne contient rien de plus que:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
             page.evaluate(function() {  
    	    doSomething();
    	});
    Citation Envoyé par mathieu Voir le message
    quel résultat attendiez vous ?
    Que la fonction "doSomething()" soit executée.

    Je sais que:
    . la page est bien loadée
    . le code passe bien par l'évènement "onLoadFinished"
    . le code passe bien dans le "page.evaluate"

    Notez que si j'opte pour l'option " me ballader dans le DOM " au moment du "page.evaluate", et que je fais en sorte de selectionner le bon élément, je suis bien en mesure de simuler le click dessus et donc de faire en sorte que la fonction "doSomething" soit executée.

    @+

Discussions similaires

  1. [Débutant] Appeller une fonction de la page aspx depuis un control ascx
    Par Alegreg dans le forum ASP.NET
    Réponses: 19
    Dernier message: 24/03/2015, 15h38
  2. Accéder à une fonction d'un xla à parti d'un UserForm d'un autre xlsm
    Par baracuda dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 20/11/2012, 13h53
  3. Réponses: 2
    Dernier message: 04/12/2011, 10h58
  4. Accéder à une fonction d'une autre form
    Par Djang0 dans le forum C++Builder
    Réponses: 8
    Dernier message: 21/08/2009, 14h20
  5. appel d'une fonction sur autre page
    Par champion dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 03/03/2007, 14h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo