Se connecter / S'enregistrer
Votre question

Récupérer valeur dans une page html

Tags :
  • Javascript
  • Programmation
Dernière réponse : dans Programmation
20 Février 2011 17:15:21

Bonjour à tous,

J'aimerai récupérer une valeur dans une page html dans ce cas le 25 et le 01:00:53 dans :
  1. <td align="center">livebox vers mobiles</td><td align="center"> 25 </td><td align="center"> 01:00:53 </td>


Je pense qu'en javascript ça peut être possible mais je suis novice donc j'aurai besoin d'aide.

Merci à tous

Autres pages sur : recuperer valeur page html

a c 232 L Programmation
20 Février 2011 22:52:12

Salut,

Vu qu'il y a que des td sans id ou class, ça ne va pas être pratique là.
Il nous faut un peu plus de code, pour pouvoir récupérer un id, une class et partir de là
m
0
l
21 Février 2011 08:22:57

Bonjour,

Voilà une class juste avant:
  1. <tr class="ligne_orange"> <td align="center">livebox vers mobiles</td><td align="center"> 25 </td><td align="center"> 01:00:53 </td>


Merci
m
0
l
Contenus similaires
21 Février 2011 08:43:06

Le plus pratique serait d'avoir un "id" tout de même qui serait cette solution la :
  1. var premier = document.getElementById('prem').innerHTML;
  2. var deuxieme = document.getElementById('deux').innerHTML;


Avec ce code source la :
  1. <tr class="ligne_orange"> <td align="center">livebox vers mobiles</td><td align="center" id="prem"> 25 </td><td align="center" id="deux"> 01:00:53 </td>


Sinon si tu veux garder ta solution :
  1. var tr = document.getElementsByTagName('tr');
  2. for(i=0;i<tr.length;i++)
  3. {
  4. if(tr[i].className == "ligne_orange")
  5. {
  6. var td = tr[i].getElementsByTagName('td');
  7. var premier = td[1].innerHTML;
  8. var deuxieme = td[2].innerHTML;
  9. }
  10. }


Voila, la deuxième solution étant entre nous plus bancale et plus lourde à gérer. Elle pose aussi le problème qu'elle empêche beaucoup la modularité de ton code plus tard. Donc je te conseil la première.
m
0
l
21 Février 2011 09:02:14

Il y a bien un id devant tout ça mais je pense qu'il y a un peu trop de td après pour récupérer les valeurs non ?
  1. <tr><td colspan="2"><div id="titre_section">Suivi conso téléphone par Internet</div></td></tr>
  2.  
  3. <tr><td height="4"></td></tr>
  4.  
  5. <!-- TABLE SUIVI -->
  6.  
  7. <tr> <td colspan="2" align="left" height="60"> <table cellpadding="0" cellspacing="0" border="0" width="480" > <colgroup> <col width="26%"> <col width="36%"> <col width="36%"> <col width="2%"> </colgroup> <tr><td height="4"></td></tr> <tr class="ligne_grise"> <td></td><td align="center"><b>Nombre d'appels</b></td><td align="center"><b>Durée cumulée</b></td><td align="center" width="1px"> </td> </tr>
  8.  
  9. <tr><td height="4"></td></tr> <tr class="ligne_orange"> <td align="center">livebox vers international</td><td align="center"> 4 </td><td align="center"> 00:49:41 </td><td align="center">   </td> </tr><tr><td height="4"></td></tr> <tr class="ligne_grise"> <td align="center">livebox vers m�tropole</td><td align="center"> 248 </td><td align="center"> 32:29:09 </td><td align="center">   </td> </tr><tr><td height="4"></td></tr> <tr class="ligne_orange"> <td align="center">livebox vers mobiles</td><td align="center"> 25 </td><td align="center"> 01:00:53 </td><td align="center">   </td> </tr><tr><td height="4"></td></tr> <tr class="ligne_grise"> <td align="center">livebox vers num�ros internet</td><td align="center"> 28 </td><td align="center"> 03:25:36 </td><td align="center">   </td> </tr><tr><td height="4"></td></tr> <tr class="ligne_orange"> <td align="center">services sp�ciaux</td><td align="center"> 1 </td><td align="center"> 00:15:34 </td><td align="center">   </td> </tr>
  10.  
  11. <tr><td height="4"></td></tr> <tr class="ligne_fin_tableau"> <td align="center" class="cellule_lettres_oranges" class="ligne_fin_tableau">Total</td> <td align="center" class="cellule_lettres_oranges"> 306 </td> <td align="center" class="cellule_lettres_oranges"> 38:00:53 </td><td align="center" class="cellule_lettres_oranges">   </td> </table> </td></tr>
  12. <!-- /TABLE SUIVI -->


Merci encore
m
0
l
21 Février 2011 09:11:45

J'ai aussi oublié de préciser que la page contenant
  1. <tr class="ligne_orange"> <td align="center">livebox vers mobiles</td><td align="center"> 25 </td><td align="center"> 01:00:53 </td>

se situe sur internet et que les valeurs changent donc je dois récupérer les deux valeurs depuis une autre html et non pas insérer du code dans la page contenant les valeurs.

Merci
m
0
l
a c 232 L Programmation
21 Février 2011 10:30:24

Hmm, en se basant sur le fait que la page va avoir la même structure, tu peux faire une sélection de node absolue grâce au XPath.

Pour récupérer le XPath, par contre c'est un peu galère, je te conseillerai d'utiliser Firefox si tu ne le fais pas déjà, et d'installer Firebug.
Ensuite, quand tu seras sur ta page, tu cliques sur l'icône de Firebug, tu cliques sur l'icône pour inspecter un élément, puis tu choisis l'élément que tu veux récupérer, il devrait s'afficher dans l'onglet HTML sous un fond bleu pour te montrer lequel est sélectionné. Tu fais un clic droit dessus puis "Copier le chemin XPath".

Ca devrait te donner un truc dans ce genre :
/html/body/div[2]/div/div/div/div/div/form/div/div[6]/div/div[2]/div[2]/div[2]/div

Ensuite, pour pouvoir l'utiliser, il te faudra utiliser soit la fonction evaluate, soit la fonction selectSingleNode, suivant le navigateur que tu utilises.
m
0
l
21 Février 2011 11:16:38

Voilà le xpath de:
  1. <td align="center"> 25 </td>
  2. /html/body/table/tbody/tr[2]/td/table/tbody/tr[5]/td/table/tbody/tr[8]/td[2]


et du:
  1. <td align="center"> 01:00:53 </td>
  2. /html/body/table/tbody/tr[2]/td/table/tbody/tr[5]/td/table/tbody/tr[8]/td[3]


Mais je n'est pas compris ce que je dois en faire ?

Merci

m
0
l
a c 232 L Programmation
21 Février 2011 11:56:15

Je t'ai mis deux liens sur les fonctions evaluate et selectSingleNode :) 

Mais tu veux en faire quoi après de ces valeurs ?
m
0
l
21 Février 2011 12:42:33

Bah après je veux faire des calculs savants avec !!!
Nan enfait je suis chez Orange comme FAI et avec le téléphone internet nous avons 1h d'appel gratuit vers les portables.

Hors, pour savoir combien de temps nous avons appelé sur les portables il faut aller sur le site d'Orange.

Mais comme c'est très bien foutu, le compteur comptabilise le 27 tout les 2 mois hors les factures sont du 01 au 31 donc pour savoir combien de temps nous avons appelés entre le 01 et le 31 c'est assez compliqué.

C'est pour cela que j'aimerai faire une page html qui me prenne toute seule les valeur du site orange et qui me calcule automatiquement combien de temps il me reste. En gros la page doit prendre la valeur le 01 du mois et pendant tous le premier mois elle doit soustraire la valeur du 01 à la valeur du jour ou je regarde ma page.(Ça c'est quand le compteur commence le 27 donc le premier mois).

Pour le deuxième mois, il faut que la page prenne la valeur du jour ou je regarde ma page puis soustrait la valeur du 01 mais à la fin du mois il faut qu'elle additionne la valeur du 27 à la valeur quand je regarde ma page entre le 27 et la fin du mois. Et ainsi de suite.

J'espère que j'ai été clair parce que c'est assez complexe quand même.

Je vous met la page d'orange en question:


Merci encore.
m
0
l
a c 232 L Programmation
21 Février 2011 13:12:38

Il va y avoir un peu plus de boulot alors, parce qu'il va falloir :
1) ouvrir la page d'orange en se connectant si besoin
2) sélectionner les dates dans la liste
3) et ensuite, récupérer les valeurs

Ca demanderait un petit temps de développement que personnellement je n'ai pas actuellement.
Je peux te guider vers des trucs par contre si besoin.
m
0
l
21 Février 2011 13:37:37

Bah enfait j'aurai surtout besoin de savoir comment récupérer les valeurs xpath sur la page car j'ai lu la page que tu m'as mis sur la fonction evaluate mais je crois que c'est juste pour le xml non ?

Merci
m
0
l
a c 232 L Programmation
21 Février 2011 15:46:11

Le HTML c'est du XML :) 
Donc oui, ça marche pour du HTML. Avec quelque chose comme ça, ça devrait le faire:
  1. var xpath = document.evaluate('/html/body/table/tbody/tr[2]/td/table/tbody/tr[5]/td/table/tbody/tr[8]/td[2]', document, null, 9, null);
  2. if (xpath.singleNodeValue)
  3. {
  4. alert('la valeur trouvée est ' + xpath.singleNodeValue.textContent);
  5. }
  6. else
  7. {
  8. alert('non trouvé...');
  9. }
m
0
l
21 Février 2011 16:47:45

Oui mais il faudrait que le code de la page d'Orange soit dans la même html que ce code ci, hors ce n'est pas le cas ? J'ai vu un truc en PHP du style LoadHTML il faudrait la même chose, je suis en train de chercher.

Merci
m
0
l
a c 232 L Programmation
21 Février 2011 18:26:16

En effet, il faudrait charger le document avant.
En JavaScript on peut utiliser XMLHttpRequest, mais le soucis c'est que pour des raisons de sécurité, c'est limité au domaine actuel.
m
0
l
21 Février 2011 23:06:51

Je pense que j'ai trouvé une piste en vbs avec:
  1. Option Explicit
  2.  
  3.  
  4. Private Declare Function URLDownloadToFile Lib "urlmon" _
  5. Alias "URLDownloadToFileA" (ByVal pCaller As Long, _
  6. ByVal szURL As String, _
  7. ByVal szFileName As String, ByVal dwReserved As Long, _
  8. ByVal lpfnCB As Long) As Long
  9.  
  10. Private Const ERROR_SUCCESS As Long = 0
  11.  
  12.  
  13. Private Sub CommandButton1_Click()
  14. Dim Cible As String
  15.  
  16. Cible = WebBrowser1.LocationURL
  17. DownloadFile Cible, "C:\" & WebBrowser1.LocationName & ".html"
  18. MsgBox "Terminé"
  19. End Sub
  20.  
  21.  
  22.  
  23. Public Function DownloadFile(ByVal sURL As String, _
  24. ByVal sLocalFile As String) As Boolean
  25.  
  26. Dim lngRetVal As Long
  27. DownloadFile = URLDownloadToFile(0&, sURL, _
  28. sLocalFile, 0&, 0&) = ERROR_SUCCESS
  29. End Function
  30.  
  31.  
  32.  
  33. Private Sub UserForm_Initialize()
  34. WebBrowser1.Navigate "http://www.nomdusite.fr"
  35. End Sub

Qui peut m'enregistrer mon code source de la page voulue apparement mais je n'arrive pas à le faire fonctionner.
Il m'indique "Fin d'instruction attendue" ligne 4 et caractère 17.
Quel est le problème?

Merci
m
0
l
22 Février 2011 20:30:01

Bonsoir,

J'ai réussie à trouver un code en vbs pour récupérer mon code source sauf que pour ma page d'Orange ça ne fonctionne pas car il me renvoi une page d'erreur(page d'erreur aussi avec wget et aussi en intégrant la page dans une autre page) (fonctionne très bien pour www.google.fr).
Voila le code du script:
  1. Set ie = CreateObject("internetexplorer.application")
  2. ie.Navigate ("http://compte.orange.fr/moninternet/comptesc/bin/compte.cgi?info=synthesevoip")
  3. Do While ie.Busy
  4. Wscript.Sleep 200
  5. Loop
  6. Set doc = ie.Document
  7. dim code
  8. code = doc.getElementsByTagName("HTML").item(0).outerhtml
  9. ie.quit
  10. Const ForReading = 1, ForWriting = 2
  11. Set WshShell = WScript.CreateObject("WScript.Shell")
  12. Dim fso, f
  13. Set fso = CreateObject("Scripting.FileSystemObject")
  14. Set f = fso.OpenTextFile("G:\code.txt", ForWriting,true)
  15. f.write code

Et voila le code ce trouvant dans le .txt:
  1. <HTML><HEAD><TITLE>Orange</TITLE>
  2. <META content="text/html; charset=iso-8859-1" http-equiv=Content-Type><LINK title=Orange rel=search type=application/opensearchdescription+xml href="http://opensearch.search.ke.voila.fr/orange.xml">
  3. <SCRIPT language=javascript>
  4. // A noter : à partir de www.wanadoo.fr on ne peut pas manipuler un document sur quelconque.wanadoo.fr
  5. // Ceci pour des raisons de sécurité.
  6.  
  7. function UrlTitle( title, url ) {
  8. this.url = url;
  9. this.title = title;
  10. }
  11.  
  12. var urlArray = new Array(
  13. new UrlTitle ('Contacts - Orange','contacts.orange.fr/'),
  14. new UrlTitle ('Messagerie - Orange','webmail.orange.fr/'),
  15. new UrlTitle ('Le Messager - Orange','messager.orange.fr'),
  16. new UrlTitle ('Mobile - Orange','mobile.orange.fr/'),
  17. new UrlTitle ('t\'Chat - Orange','tchat.orange.fr'),
  18. new UrlTitle ('Annuaires - Orange','annuaires.orange.fr'),
  19. new UrlTitle ('Guide TV - Orange','guidetv.orange.fr'),
  20. new UrlTitle ('Horoscope - Orange','astrocenter.orange.fr'),
  21. new UrlTitle ('Météo - Orange','meteo.orange.fr'),
  22. new UrlTitle ('Plans & itinéraires','orange.mappy.com/'),
  23. new UrlTitle ('Service Photo Orange - developpement photo - album photo en ligne','photos.orange.fr'),
  24. new UrlTitle ('Traduction - Orange','traduction.orange.fr'),
  25. new UrlTitle ('Actualités - Orange','actu.orange.fr'),
  26. new UrlTitle ('Cinéma - Orange','cine.orange.fr'),
  27. new UrlTitle ('Finances - Orange','finances.orange.fr'),
  28. new UrlTitle ('Musique et Juke-Box - Orange','music.orange.fr'),
  29. new UrlTitle ('recherche - Orange','r.orange.fr'),
  30. new UrlTitle ('recherche - Orange','ke.voila.fr'),
  31. new UrlTitle ('recherche - Orange','r.voila.fr'),
  32. new UrlTitle ('Sports - Orange','sports.orange.fr'),
  33. new UrlTitle ('Favoris - Orange','favoris.orange.fr'),
  34. new UrlTitle ('Boutique Orange Pro','boutiquepro.orange.fr'),
  35. new UrlTitle ('Davantage - Orange','davantage.orange.fr')
  36. );
  37.  
  38. var theUrl = "url=http://compte.orange.fr/common/html/exc-incident-service.html";
  39. var urlIndex = -1;
  40. if (theUrl.indexOf("u=") > -1) urlIndex = theUrl.indexOf("u=") + 2;
  41. else if (theUrl.indexOf("url=") > -1) urlIndex = theUrl.indexOf("url=") + 4;
  42. else if (theUrl.indexOf("service=") > -1) urlIndex = theUrl.indexOf("service=") + 8;
  43. else if (theUrl.indexOf("s=") > -1) urlIndex = urlIndex.indexOf("s=") + 2;
  44.  
  45. if (urlIndex > -1){
  46. theUrl = unescape(theUrl.substring(urlIndex));
  47. for (var index=0; index<urlArray.length; index++){
  48. if (theUrl.indexOf(urlArray[index].url) > 0){
  49. this.document.title = urlArray[index].title;
  50. break;
  51. }
  52. }
  53. }
  54. var pub = "ok";
  55. if (theUrl.indexOf("actu.orange.fr") > 0){
  56. document.write('<link rel="alternate" type="application/rss+xml" title="Actu Orange: France" href="http://actu.orange.fr/Inc/RSS/rss_fra.xml">');
  57. document.write('<link rel="alternate" type="application/rss+xml" title="Actu Orange: Monde" href="http://actu.orange.fr/Inc/RSS/rss_mon.xml">');
  58. document.write('<link rel="alternate" type="application/rss+xml" title="Actu Orange: Insolite" href="http://actu.orange.fr/Inc/RSS/rss_ins.xml">');
  59. document.write('<link rel="alternate" type="application/rss+xml" title="Actu Orange: People" href="http://actu.orange.fr/Inc/RSS/rss_peo.xml">');
  60. document.write('<link rel="alternate" type="application/rss+xml" title="Actu Orange: Politique" href="http://actu.orange.fr/Inc/RSS/rss_pol.xml">');
  61. document.write('<link rel="alternate" type="application/rss+xml" title="Actu Orange: Economie" href="http://actu.orange.fr/Inc/RSS/rss_eco.xml">');
  62. document.write('<link rel="alternate" type="application/rss+xml" title="Actu Orange: Culture" href="http://actu.orange.fr/Inc/RSS/rss_clt.xml">');
  63. document.write('<link rel="alternate" type="application/rss+xml" title="Actu Orange: Sciences" href="http://actu.orange.fr/Inc/RSS/rss_sci.xml">');
  64. document.write('<link rel="alternate" type="application/rss+xml" title="Actu Orange: High-tech" href="http://actu.orange.fr/Inc/RSS/rss_hig.xml">');
  65. document.write('<link rel="alternate" type="application/rss+xml" title="Actu Orange: Dossier" href="http://actu.orange.fr/Inc/RSS/rss_dos.xml">');
  66. document.write('<link rel="alternate" type="application/rss+xml" title="Actu Orange: Médias" href="http://actu.orange.fr/Inc/RSS/rss_med.xml">');
  67. }
  68. </SCRIPT>
  69. </HEAD><FRAMESET frameSpacing=0 border=0 frameBorder=no rows=110,*><FRAME noResize marginHeight=0 src="/walledgarden/bin/walledgarden.cgi?url=http://compte.orange.fr/common/html/exc-incident-service.html" frameBorder=no name=w_wg marginWidth=0 scrolling=no><FRAME marginHeight=0 src="" frameBorder=no name=w_contenu marginWidth=0 pub="ok"></FRAMESET></HTML>


J'ai besoin d'aide.
Merci
m
0
l
a c 232 L Programmation
22 Février 2011 23:37:03

C'est parce que le site d'orange contient des frames, il faut que tu récupères la bonne frame.
Dans le site d'orange (avec Firefox), fais un clic droit sur le contenu que tu veux, et normalement tu as une option pour afficher seulement cette frame, tu dois pouvoir récupérer l'URL de la frame grâce à ça
m
0
l
23 Février 2011 10:17:32

Bonjour,

L'adresse rentrée dans le code vbs est déjà l'URL de la frame donc je ne comprend pas pourquoi ça ne fonctionne pas ?

Merci
m
0
l
a c 145 L Programmation
23 Février 2011 10:51:30

Cette frame nécessite surement une authentification et/ou d'être chargée dans une page. Autrement dit, elle vérifie qu'elle est bien chargée par un conteneur parent et si tel n'est pas le cas, elle recharge la page principale.
m
0
l
23 Février 2011 12:19:42

En tout cas, elle ne nécessite pas d'être chargée dans une autre page car je peut l'afficher toute seule dans un autre onglet de firefox. Sinon je peut enregistrer la page avec firefox et ,dans ce cas, la page s'ouvre bien en local. Lorsque j'enregistre la page en question, il y a la page html mais aussi un dossier contenant les images de la page (logique) mais aussi des .js
C'est peut être à cause d'eux que la page me retourne une page d'erreur ?

Merci
m
0
l
23 Février 2011 15:05:42

Bon je crois que je vais pas arriver à récupérer mon code source automatiquement.
Admettons que je récupère mon code source manuellement et que je le mette dans un fichier texte. J'ai besoin de récupérer mes deux valeur donc j'ai fais un vbs pour parser le txt:
  1. Set objFSO = CreateObject("Scripting.FileSystemObject")
  2. Set objFile = objFSO.OpenTextFile("G:\orange.txt")
  3. arrContents = Split(objFile.ReadAll, "livebox vers mobiles")
  4. For i = 0 to Ubound(arrContents)
  5. dim codeparser
  6. codeparser = arrContents(i)
  7. Next
  8. Const ForReading = 1, ForWriting = 2
  9. Set WshShell = WScript.CreateObject("WScript.Shell")
  10. Dim fso, f
  11. Set fso = CreateObject("Scripting.FileSystemObject")
  12. Set f = fso.OpenTextFile("G:\codeparser.txt", ForWriting,true)
  13. f.write codeparser


mais le problème c'est que je récupère tout le code après "livebox vers mobile" alors que j'ai besoin de prendre juste le 25 et le 01:00:53
  1. <td align="center">livebox vers mobiles</td><td align="center"> 25 </td><td align="center"> 01:00:53 </td>


Comment faire ?
Merci encore
m
0
l
28 Février 2011 18:48:38

Bonsoir,

J'essaye toujours de parser mon texte mais je n'y arrive pas.
J'ai essayé en batch avec:
  1. @echo off
  2. for /f "tokens=43 delims= " %%a in ('type orange.txt^| findstr "livebox vers mobiles"') do echo %%a
  3. pause

Mais à partir de tokens=32 ca ne fonctionne plus donc je ne sais pas quoi faire.
Je pense que le code en vbs est plus exploitable ???

Merci
m
0
l
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS