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

NodeJS Discussion :

Se connecter à un site et faire une copie d'écran


Sujet :

NodeJS

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 112
    Points : 48
    Points
    48
    Par défaut Se connecter à un site et faire une copie d'écran
    Bonjour
    j'ai un site et je désire utiliser phantomjs pour ce connecter et prendre une photo
    mais sa ne marche pas
    Quelqu'un peux me dire ou se situe mon erreur
    Cordialement

    CODE DE LA PAGE
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <input name="USER" size="40" style="margin-left: 1px" type="text">
    <input id="pwd" name="PASSWORD" size="40" style="margin-left: 1px" type="password">
    <input class="im-button" vspace="2" type="submit" border="0" hspace="4" onclick="to_Utf8();setCookie('yse_USERLOGIN',document.forms['Login'].elements['USER'].value,30);submitForm();" name="loginValid" value="   OK   ">

    CODE ESSAYE
    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
    var webPage = require('webpage');
    var page = webPage.create();
     
     
     
    page.open('http://sitesenquestion.php/', function(status) {
      console.log('Status: ' + status);
      if(status =="success"){
              page.evaluate(function(){
     
    			document.getElementsByTagName ('USER').value="login";
                document.getElementsByid ('pwd').value="password";
    			document.getElementsByTagName ('loginValid').submit();
              });
            console.log('ok');
            page.render('googletest.png');
     
      }else{
        console.log('mort');
      }
      phantom.exit();
    });
    erreur sur phantomJS
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Status: success
    TypeError: undefined is not a constructor (evaluating 'document.getElementsByid
    ('pwd')')
     
      phantomjs://webpage.evaluate():4
      phantomjs://webpage.evaluate():6
    ok

  2. #2
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Ce que je vais dire ne concerne que, par nature, html et ne concerne pas de phantomjs ou d'autres.

    [1] La méthode getElementById() s'écrit comme montrée pas getElementsByid().

    [2] Et puis, vous cherchez les éléments HTML par name pas par TagName: la méthode s'appele getElementsByName(), pas getElementsByTagName().

    [2.1] Les deux méthodes toutes retournent une collections, il faut préciser laquelle par indice qu'on veut donner sa valeur.

    [2.2] Et là, c'est plus délicat: l'input du type submit ne supporte pas de méthode submit(), non. Comme il y a un handler onclick pour elle, je pense vous voulez la faire appel: et c'est par click().

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        document.getElementsByName('USER')[0].value="login";
        document.getElementById('pwd').value="password";
        document.getElementsByName('loginValid')[0].click();

    [3] Et ce n'est pas tout. Dans l'élément HTML du type submit, il y a un handler onclick. Dedans, je vois "submitForm();" (le reste je ne sais pas quoi non plus, mais ce n'est pas l'issue). Si vous voulez dire faire sousmettre la forme où l'élément input se trouve, il vaut mieux ne pas faire ça. Soit vous le gqrdez et mettez "return false;" après pour stopper l'evènement qui va se propager jusqu'à la forme elle-même donc sousmettre encore, soit vous enlevez "submitForm();" et à sa place remettez "return true;".
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <input class="im-button" vspace="2" type="submit" border="0" hspace="4"
        onclick="to_Utf8();setCookie('yse_USERLOGIN',document.forms['Login'].elements['USER'].value,30);return true,"
        name="loginValid" value="   OK   "> 
    <!-- ou
    <input class="im-button" vspace="2" type="submit" border="0" hspace="4"
        onclick="to_Utf8();setCookie('yse_USERLOGIN',document.forms['Login'].elements['USER'].value,30);submitForm(); return false;"
        name="loginValid" value="   OK   "> 
    -->
    Voilà !

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 112
    Points : 48
    Points
    48
    Par défaut
    Bonjour tout d’abord un immense merci pour ton aide
    1-2-2.1-2.2 OK
    En effet, j'ai reussis à mettre les informations sur la page
    par contre sa ne valide pas.

    Par contre je suis perdu dans le 3
    en effet je ne comprend pas ce que je dois mettre dans le fichier JS
    peux tu me dire ou je dois mettre les éléments input

    Car les éléments viennent de se site
    D'avance merci pour ton aide

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <input name="USER" size="40" style="margin-left: 1px" type="text">
    <input id="pwd" name="PASSWORD" size="40" style="margin-left: 1px" type="password">
    <input class="im-button" vspace="2" type="submit" border="0" hspace="4" onclick="to_Utf8();setCookie('yse_USERLOGIN',document.forms['Login'].elements['USER'].value,30);submitForm();" name="loginValid" value="   OK   ">


    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
    var webPage = require('webpage');
    var page = webPage.create();
     
    page.open('http://sitesenquestion.php/', function(status) {
      console.log('Status: ' + status);
      if(status =="success"){
              page.evaluate(function(){
     
    			document.getElementsByName('USER')[0].value="login";
    			document.getElementById('pwd').value="password";
    			document.getElementsByName('loginValid')[0].click();
              });
            console.log('ok');
            page.render('googletest.png');
     
      }else{
        console.log('mort');
      }
      phantom.exit();
    });

  4. #4
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Si la page provient d'une partie tierce, on s'en fiche un peu et on la laisse tranquille.
    En effet, j'ai reussis à mettre les informations sur la page
    par contre sa ne valide pas.
    Je n'ai pas bien compris ce que "ne valide pas" veut dire. Mais, je ne sais pas quelle page il s'agit, quelle information qu'on veut tirer, comment les pages l'une après l'autre secomportent etc, donc, on m'en excuse que je ne sais pas quoi dire de suite.

    Si on n'est pas très sûr finalement à quoi serve le handler onclick, on peut toujours essayer de soumettre la forme directement, comme ça.
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //document.getElementsByName('loginValid')[0].click();
    document.forms['Login'].submit();

  5. #5
    Membre extrêmement actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2016
    Messages
    223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2016
    Messages : 223
    Points : 561
    Points
    561
    Par défaut
    Bonjour,

    Peut être que ce git peut t'aider
    https://github.com/maboiteaspam/pageres

    c'est un fork donc `npm i maboiteaspam/pageres` contraitement à ce que laisse penser le readme.

    voir l'option script.

    Sinon ouvres un github et fais une demo, cela aiderait tout le monde .... à t'aider.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 112
    Points : 48
    Points
    48
    Par défaut
    Bonjour
    Encore un immense merci de vous penchez sur ma demande
    Je vous ai joint une partie de la pages HTML
    mon but et de saisir le user, le password, cliquer sur OK et faire une copie de la page suivante, dans un premier temps j'avais pensé à CURL mais sans succes
    donc j'ai pensé utilisé phantomjs

    j'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.forms['Login'].submit();
    mais sans succes, je vois pas ou sa bloque
    Cordialement


    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
    <!DOCTYPE html>
    <html>
    	<head>
    		<script src="/GMAO.js"></script> 
    		<title>Acces</title>
    		<link rel="stylesheet" type="text/css" href="/style.css">
    		<meta charset="UTF-8">
    	</head>
    	<body onLoad="computeLogin()">
    		<table class="maintable" >
    			<tr>
    				<td class="maintable" >
    					<table class="secondtable" >
    					</table>
    					<br><br>
    					<table class="thirdtable" >
    						<tr><td class="Gras" ><b>Authentification</b></td></tr>
    						<tr><td class="tdChamp">Votre login ou mot de passe est pas valide .</td></tr>
    						<tr><td class="tdChamp"></td></tr>
    					</table>
    <form name="Login" method="POST" action="https://site-passerel.com/login.fcc">
    					<table class="champtable" >
    						<tr>
    							<td class="tdchampform" ><b> Utilisateur : </b></td>
    							<td class="tdinputform"  ><input type="text" name="USER" size="40" style="margin-left: 1px"></td>
    							<td class="tdfinform" >&nbsp;</td>
    						</tr>
    						<tr>
    							<td class="tdchampform"><b> Mot de passe : </b></td>
    							<td class="tdinputform" ><input type="password" id=pwd name="PASSWORD" size="40" style="margin-left: 1px" autocomplete="off"></td>
    						</tr>
    						<tr><td class="tdformat1" colspan=3 >&nbsp;</td></tr>
    						<tr>
    							<td class="tdformat2" colspan="3" >
    	<input type="hidden" name="SMINNC" value="UTF-8">
    	<input type="hidden" name="SMLOCAL" value="US-EN">
    	<input type="submit" value="&nbsp;&nbsp;&nbsp;OK&nbsp;&nbsp;&nbsp;" class="im-button" name="loginValid" onClick="computeSubmit()">
    							</td>
    						</tr>
     
    					</table>
    </form>
    				</td>
    			</tr>
    		</table>
    		<br>
    	</body>
    </html>

  7. #7
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Si cela reflète fidèlement la page en question, essaye ceci.
    Code javascript : 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
    var webPage = require('webpage');
    var page = webPage.create();
     
    page.open('http://sitesenquestion.php/', function(status) {
      console.log('Status: ' + status);
      if(status =="success"){
              page.evaluate(function(){
     
    			document.getElementsByName('USER')[0].value="login";
    			document.getElementsByName('PASSWORD')[0].value="password";
    			document.getElementsByName('loginValid')[0].click();
              });
            console.log('ok');
            window.setTimeout(function(){
                    page.render('googletest.png');
                    phantom.exit();
            }, 
            5000);
      }else{
        console.log('mort');
      }
      //phantom.exit();
    });

    [1] Il m'énvere de voir id=pwd sans quot: ça marche plus probablement depuis toujours mais c'est pas très sympa pour le temps modèrne. C'est pour ça je prends plutôt le nom (name) pour le rechercher.
    [2] Et puis, je mets un délai de cinq seconds avant de faire un render() - je pense il est bien nécessaire si les essayes avant ne réussient jamais. Si c'est une réussite, on peut contempler à le raccourcir, sinon à l'allonger un peu pour voir.
    [3] Comme il y a un délai désigné, il faut remettre l'exit() à sa propre place.

    Essaie-le pour tester, je crois il devrait avoir toute la chance de réussir.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 112
    Points : 48
    Points
    48
    Par défaut
    Merci a vous tous pour votre aide
    Avec 8 secondes sa fonctionne
    Parfait, dommage que l'on doit mettre un temps car en cas de lenteur sa plante la requête, il y a un autre moyen de contourner le temps?
    Cordialement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment faire une copie d'écran d'une page web ?
    Par benj63 dans le forum C++Builder
    Réponses: 1
    Dernier message: 13/06/2013, 16h11
  2. Faire une copie d'écran en vba
    Par deubelte dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/10/2009, 12h10
  3. probléme pour faire une copie de base de donnée
    Par nours33 dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 31/12/2005, 12h35
  4. cmt se connecté a oracle pour faire une requete avec python
    Par dipajero dans le forum Bibliothèques tierces
    Réponses: 6
    Dernier message: 28/12/2005, 20h22
  5. Faire une copie d'écran d'un Panel
    Par Wilco dans le forum Langage
    Réponses: 2
    Dernier message: 19/10/2005, 17h28

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