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 :

Regex d'une page HTML


Sujet :

JavaScript

  1. #1
    Membre confirm�
    Profil pro
    Administrateur syst�mes et r�seaux
    Inscrit en
    Novembre 2007
    Messages
    146
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : Administrateur syst�mes et r�seaux

    Informations forums :
    Inscription : Novembre 2007
    Messages : 146
    Par d�faut Regex d'une page HTML
    Bonjour � tous,

    depuis ce matin je suis sur un "probl�me"? de regex sur du code source html ...
    Bon, d�j�, le regex c'est pas si simple en JS mais bon, je suis oblig�, et bien ca fait bosser un peu

    Je suis en train de creer un script GreaseMonkey qui avec le code source de la page courante :
    je veux r�cup�rer une multitude d'info, pour �tre pr�cis 50*6.

    Voici mon code JS :

    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
     
    var ok = true;
     
    var all_user = /<input type='hidden' name='do' value='delete'>(.*?)<BR><input type='button'/g.exec(document.body.innerHTML);
    var all_user4 = document.body.innerHTML.match(/<input type='hidden' name='do' value='delete'>([\s\S]*?)<BR><input type='button'/m);
    var all_user2 = /<li class="index"><a href="index.php"><span>(.*?)<li class="forums"><a href="forums.php"><span>/g.exec(document.body.innerHTML);
    var all_user3 = /<li class="index"><a href="index.php"><span>/.exec(document.body.innerHTML);
    var string = document.body.innerHTML;
    var regex  = /<input type='hidden' name='do' value='delete'>([\s\S]*?)<\/table><BR><input type='button' value='Check All' onclick='this\.value=check\(form\)'>/g; 
    console.log( regex.exec(string) ); // Console Firebug 
     
    for (j=1; j<=50; j++){ 
    var user = /<tr>(.*?)<\/tr>/.exec(all_user);
    var var1 = /<a href=dtls.php\?id=[0-9]+>(.*?)<\/a>/.exec(user);
    var var2 = /<td class=table_col2 align=center>(.*?)<\/td>/.exec(user);
    var var3= /<td class=table_col1 align=center>(.*?)<\/td>/.exec(user);
    var var4= /<td class=table_col2 align=center>(.*?)<\/td>/.exec(user);
    var var5= /<td class=table_col1 align=center>(.*?)<\/td>/.exec(user);
    var var6 = /<td class=table_col2 align=center>(.*?)<\/td>/.exec(user);
    if (ok) {
    	alert(var1+ " " +  var2+ " " +  var3+ " " +  var4+ " " +  var5+ " " +  var6);
    	ok = false;
    	}
    //file.WriteLine(var1+ " " +  var2+ " " +  var3+ " " +  var4+ " " +  var5+ " " +  var6); //ActiveXObject ne marche pas sous FF
    }
    //}

    Mon code source qui m'interesse ici est de cette t�te :

    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
    <form action='test.php?ok=users' method='POST'><input type='hidden' name='do' value='delete'>
    		<tr><td class=table_col1 align=center><a href=dtls.php?id=128895>VAR1</a></td>
    		<td class=table_col2 align=center>VAR2</td>
    		<td class=table_col1 align=center>VAR3</td>
     
    		<td class=table_col2 align=center>VAR4</td>
    		<td class=table_col1 align=center>VAR5</td>
    		<td class=table_col2 align=center>VAR6</td>
    		<td class=table_col1 align=center><input type=checkbox name='userids[]' value='128895'></td>
    		</tr>
     
    <tr><td class=table_col1 align=center><a href=dtls.php?id=12895>VAR1</a></td>
    		<td class=table_col2 align=center>VAR2</td>
    		<td class=table_col1 align=center>VAR3</td>
     
    		<td class=table_col2 align=center>VAR4</td>
    		<td class=table_col1 align=center>VAR5</td>
    		<td class=table_col2 align=center>VAR6</td>
    		<td class=table_col1 align=center><input type=checkbox name='userids[]' value='12895'></td>
    		</tr>
    ETC
    bref, voil�, je veux r�cup les VARx

    Alors j'ai commenc� � �crire un truc. Il y a une partie dont je ne suis pas sur, c'est ca :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    var var1 = /<a href=dtls.php\?id=[0-9]+>(.*?)<\/a>/.exec(user);
    var var2 = /<td class=table_col2 align=center>(.*?)<\/td>/.exec(user);
    var var3 = /<td class=table_col1 align=center>(.*?)<\/td>/.exec(user);
    var var4 = /<td class=table_col2 align=center>(.*?)<\/td>/.exec(user);
    var var5 = /<td class=table_col1 align=center>(.*?)<\/td>/.exec(user);
    var var6  = /<td class=table_col2 align=center>(.*?)<\/td>/.exec(user);
    Je ne sais pas si ca capture bien ce que je veux puisque "<td class=table_col2 align=center>" n'est pas unique ...

    Mais c'est pas ici que je coince pour le moment, mais ici :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    var string = document.body.innerHTML;
    var regex  = /<input type='hidden' name='do' value='delete'>([\s\S]*?)<\/table><BR><input type='button' value='Check All' onclick='this\.value=check\(form\)'>/g; 
    console.log( regex.exec(string) ); // Console Firebug
    Il me renvoie NULL.


    Une id�e ? (ca doit pas �tre tr�s compliqu�, mais j'ai absuloment rien trouv� sur le net)

    PS : y a des testes dans mon js : all_usersX

  2. #2
    Membre exp�riment� Avatar de nod__
    Profil pro
    �tudiant
    Inscrit en
    Avril 2009
    Messages
    176
    D�tails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 176
    Par d�faut
    C'est a peu pr�s une tr�s mauvaise id�e d'utiliser une regex pour chercher des infos dans une page HTML.

    Utilise le DOM avec document.getElementsByTagName("td");

    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
     
    /**
     * @param table element DOM optionnel pour réduire la recherche à un seul element
     */
    function recupVAR (table) {
      table = table || document;
      var tds = table.getElementsByTagName("td"),
          tmp, i, il = tds.length,
          out = [];
     
     
      for (i =0; i < il; i++) {
        tmp = tds[i];
        // vu que c'est greasemonkey y'a moyen de virer tmp.innerText, c'est pour IE
        tmp = (tmp.textContent || tmp.innerText).replace(/^\s+|\s+$/g, ""); //trim()
        if (tmp) { // si c'est pas vide, virer les input quoi
          out.push(tmp);
        }
      /*
        La version FF only ça donne 
        tmp = tds[i].textContent.replace(/^\s+|\s+$/g, "");
        if (tmp) {
          out.push(tmp);
        }
      */
      }
      alert(out);
      return out;
    }
    C'est 100% pas tester mais �a devrait marcher.

  3. #3
    Membre confirm�
    Profil pro
    Administrateur syst�mes et r�seaux
    Inscrit en
    Novembre 2007
    Messages
    146
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : Administrateur syst�mes et r�seaux

    Informations forums :
    Inscription : Novembre 2007
    Messages : 146
    Par d�faut
    D�j� merci pour une r�ponse si rapide, j'ai pas encore test�, et j'arrive pas bien a tout comprendre.

    A quoi correspond le table en param�tre ?

    A la table qui contient mes td ? Si oui, comment dire quel table c'est ? car j'en ai vraiment pas qu'un dans mon code source ...

    Et la fonction retourne juste 6 variables je suppose, donc il faut faire 1 boucle, 50 fois car y a 50 TR dans ma table.

    C'est bien ca ?

  4. #4
    Membre exp�riment� Avatar de nod__
    Profil pro
    �tudiant
    Inscrit en
    Avril 2009
    Messages
    176
    D�tails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 176
    Par d�faut
    Si ta table a un id ou une classe �a aiderais.

    L� le code prends tous les td de la page id�pendemment du tableau dans lequel il se trouve donc t'as pas besoin de mettre �a dans une autre boucle. C'est l'utilit� du param�tre. Si le tableau contenant tes cases a un id "scores" alors tu appelles
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    var tableau = document.getElementByID("score");
    recupVAR(tableau);
    Test le code et tu verras comment il fonctionne

  5. #5
    Membre confirm�
    Profil pro
    Administrateur syst�mes et r�seaux
    Inscrit en
    Novembre 2007
    Messages
    146
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : Administrateur syst�mes et r�seaux

    Informations forums :
    Inscription : Novembre 2007
    Messages : 146
    Par d�faut
    Oula, je pensais avoir compris mais la je sais plus ...

    le code prends tout les TD de la page ? ou tous les TD du tableau que je donne en param�tre ?

    Oui il a une class : "table_table"

    Sinon j'ai reussi a trouv� le xpath avec firebug : /html/body/table/tbody/tr[2]/td/table[2]/tbody/tr/td[2]/table[2]/tbody/tr/td/table/tbody/tr/td[2]/table[3]/tbody/tr/td/table[2]/tbody/tr/td[2]/center[2]/table/


    EDIT : j'ai un message d'erreur :
    Erreur*: table.getElementsByTagName is not a function
    Fichier Source*: file:///C:/Documents%20and%20Settings/Flo/Application%20Data/Mozilla/Firefox/Profiles/k0n19797.default/gm_scripts/user-ut/user-ut.user.js
    Ligne*: 15

    EDIT2 : 1er erreur r�solu mais j'en ai une autre :

    Erreur*: tmp.innerText is undefined
    Fichier Source*: file:///C:/Documents%20and%20Settings/Flo/Application%20Data/Mozilla/Firefox/Profiles/k0n19797.default/gm_scripts/user-ut/user-ut.user.js
    Ligne*: 23

  6. #6
    Membre confirm�
    Profil pro
    Administrateur syst�mes et r�seaux
    Inscrit en
    Novembre 2007
    Messages
    146
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : Administrateur syst�mes et r�seaux

    Informations forums :
    Inscription : Novembre 2007
    Messages : 146
    Par d�faut
    (d�sol� pour le double post)
    Bon j'ai reussi a r�soudre le probl�me, j'ai juste enlever le commentaire de FF only et je l'ai mis sur l'autre et maintenant ca marche

    Merci bien

    J'ai vu l'"alert" c'est assez horrible, on dirais du CVS.

    je suppose que c'est un tableau le out, donc j'ai plus qu'� faire une boucle pour r�cup�rer les variables avec un modulo 6 pour passer au TR suivant.

    Juste pour savoir, savez vous comment je peu stocker ca dans un fichier (� la fin) car le ActiveXObject ne marche pas sous FF :S

Discussions similaires

  1. RegEx : Extraire une partie d'une page HTML
    Par tittoto dans le forum G�n�ral Python
    R�ponses: 9
    Dernier message: 19/04/2010, 09h28
  2. RegEx pour extraire les liens d'une page html
    Par herch dans le forum API standards et tierces
    R�ponses: 7
    Dernier message: 13/05/2009, 17h26
  3. Inserer une page HTML comme une boite!
    Par thief dans le forum MFC
    R�ponses: 4
    Dernier message: 16/01/2004, 21h13
  4. [VB.Net] Comment generer une page html dynamiquement ?
    Par Anonymous dans le forum ASP.NET
    R�ponses: 3
    Dernier message: 13/03/2003, 10h22
  5. [CR] Tranfert de formulaire a travers une page HTMl
    Par LIEU dans le forum SAP Crystal Reports
    R�ponses: 3
    Dernier message: 12/09/2002, 08h37

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