re
@Marc
chez moi je n'est pas la confusion entre page1 et 2
Version imprimable
re
@Marc
chez moi je n'est pas la confusion entre page1 et 2
Oui enfin quand je disait à la mimine c'est ce que je sous entendais :)
Dommage qu'on puisse pas parcourir comme si c'était en XML....
Ca serait top :)
La à chaque cas particulier il faut adapter les replaces, les spilts.... Galère quand même.
Si la page change que des conteneurs apparaissent pffffff
Alors qu'avec le DOM on est quand même pas mal tranquille :)
@Marc-L : Chez moi aussi ok avec le changement de page comme Patrick :)
Impossible de mixer requête et DOM ou au moins XPath ?
non cerede le parseur avec les replaces fonctionne pour toutes les page
j'ai testésur d'autre projets meme
après oui on peut mixer la requête et le DOM dans un Htmldocument(htmlfile) et travailler dedans comme dans IE
mais avant il faut le transformer en code html valide
soit comme je fait soit en se servant de la fonction qui le fait dans la page web en téléchargeant avec encore une fois une requête le JS
je suis en train de travailler sur un autre multiple replace
Ta un exemple de retransformation ? :mrgreen:
sérieux!!????
ben c'est simple tu remplace "|" par"<tr><TD>"
et les Etoile tu les remplace par "</TD><TD>"
et tu ajoute "</TR>" en fin de ligne dans tout le code
et voila tu a tes TR
au quel tu ajoute devant"<TABLE>" et a la fin "</TABLE>"
et dans ton htmlfile
.body.innerhtml=code
et maintenant tu le manipule comme dans IE
c'est tout bête hein!!!!
on pourrait même le faire directement dans les replace
Ah !!!!!! :)
Que ferais je sans toi ;)
Et dernière question tant qu'on y est....
Avec une requête dans ce genre on peux, sur un site qui nécessiterais un login/MDP renseigner un formulaire et le submit ?
oui pour certain qui l'autorise cela se fait soit dans l'url comme pour Google ou on renseigne l element "q"
soit en argument dans le send mais c'est de moins en moins fréquent
ensuite puisque tu y tiens
tiens voila transformé en htmlvalide pour dans le debug
pour finir il faut arriver a supprimer les ligne des $ en haut et en bas
regarde dans le debugCode:
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 Sub test() Do Dim Req, url As String url = "http://www.kisskissbankbank.com/fr/projects/bigdream/contributors?page=" & i Set Req = CreateObject("microsoft.xmlhttp") With Req .Open "get", url, False .SetRequestHeader "Accept", "*/*;q=0.5, text/javascript, application/javascript, application/ecmascript, application/x-ecmascript" '.SetRequestHeader "X-CSRF-Token", "1ylb833pf7KY9XRb7tNmlnslRsfKlEKPmRI2y/uGVv4=" '.SetRequestHeader "X-Requested-With", "XMLHttpRequest" '.SetRequestHeader "Referer", "http://www.kisskissbankbank.com/fr/projects/bigdream/contributors" '.SetRequestHeader "Accept-Language", "fr-FR" '.SetRequestHeader "Accept-Encoding", "gzip, deflate" '.SetRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko" '.SetRequestHeader "Host", "www.kisskissbankbank.com" '.SetRequestHeader "DNT", "1" '.SetRequestHeader "Connection", "Keep - Alive" '.SetRequestHeader "Cache-Control", "no-cache" .send texte = .responsetext End With With CreateObject("htmlfile") .write texte 'Debug.Print .body.innertext code = .body.innertext code = Replace(code, "<\/a><\/td>\n\n", vbCrLf & "<TR><TD> ") code = Replace(code, "<\/a>\n" & vbCrLf, "</TD><TD>") code = Replace(code, "\n", "") code = Replace(code, "<\/div><\/td>", "</TD><TD>") code = Replace(code, "<\/span>", "") code = Replace(code, "<\/td>", "") code = Replace(code, "<\/td>", "</TD><TD>") code = Replace(code, "<\/div>" & vbCrLf, "</TD><TD>") code = Replace(code, "<\/tr>" & vbCrLf, "</TD></TR>") code = Replace(code, code, "<TABLE>" & vbCrLf & code & vbCrLf & "</TABLE>") code = Replace(code, "<\/table>')", vbCrLf) 'on rajoute la colonne lieu pour ce qui ne l'ont pas 'code = Replace(code, "* ", "* *") Debug.Print code End With i = i + 1 Loop Until i = 1 'InStr(texte, "remove") > 0 End Sub
De quoi elle viennent ces ligne d'ailleurs ?
Pourquoi il reste du JQuery ?
$('a.load-more-contributors').attr('href', '/fr/projects/bigdream/contributors?page=2');
re
petite correction
en effet j'oublis souvent que dans le htmlfile(htmldocument) en mémoire les balise se mettent en majuscules donc pour les replaces c'est hot si tu oublis ce detail
voila reste dans VBE et regarde le code des tables défilerCode:
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 Sub test() Do Dim Req, url As String url = "http://www.kisskissbankbank.com/fr/projects/bigdream/contributors?page=" & i Set Req = CreateObject("microsoft.xmlhttp") With Req .Open "get", url, False .SetRequestHeader "Accept", "*/*;q=0.5, text/javascript, application/javascript, application/ecmascript, application/x-ecmascript" '.SetRequestHeader "X-CSRF-Token", "1ylb833pf7KY9XRb7tNmlnslRsfKlEKPmRI2y/uGVv4=" '.SetRequestHeader "X-Requested-With", "XMLHttpRequest" '.SetRequestHeader "Referer", "http://www.kisskissbankbank.com/fr/projects/bigdream/contributors" '.SetRequestHeader "Accept-Language", "fr-FR" '.SetRequestHeader "Accept-Encoding", "gzip, deflate" '.SetRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko" '.SetRequestHeader "Host", "www.kisskissbankbank.com" '.SetRequestHeader "DNT", "1" '.SetRequestHeader "Connection", "Keep - Alive" '.SetRequestHeader "Cache-Control", "no-cache" .send texte = .responsetext End With With CreateObject("htmlfile") .write texte 'Debug.Print .body.innertext code = .body.innertext code = Replace(code, "<\/a><\/td>\n\n", vbCrLf & "<TR><TD> ") code = Replace(code, "<\/a>\n" & vbCrLf, "</TD><TD>") code = Replace(code, "\n", "") code = Replace(code, "<\/div><\/td>", "</TD><TD>") code = Replace(code, "<\/span>", "") code = Replace(code, "<\/td>", "") code = Replace(code, "<\/td>", "</TD><TD>") code = Replace(code, "<\/div>" & vbCrLf, "</TD><TD>") code = Replace(code, "<\/TR>" & vbCrLf, "</TD></TR>") code = Replace(code, "<\/tr>" & vbCrLf, "</TD></TR>") code = Replace(code, code, "<TABLE>" & vbCrLf & code & vbCrLf & "</TABLE>") code = Replace(code, "<\/table>')", vbCrLf) 'on rajoute la colonne lieu pour ce qui ne l'ont pas 'code = Replace(code, "* ", "* *") Debug.Print code End With i = i + 1 Loop Until InStr(texte, "remove") > 0 End Sub
parce que les fonctions qui mettent a jour la page web sont en jquery
qui elles même utilisent leur propre parseur avec le code que l'on obtiens en brut avec la requête
C'est bio :) :) :)
Reste à virer ces ligne JQuery qui restent.
Et aussi un truc que j'arrive pas a voir même dans les replaces, comment tu fait pour n'avoir que la partie TABLE.
Et pas tout le reste de la page ???
re
dis moi tu n'a jamais appris a parser des fichier json en VBA toi ??,:ptdr:
disons que maintenant quand je regarde un code de ce genre je vois tout de suite les occurrences répétitives c'est presque devenu un reflexe
il suffit de bien regarder et on se rend vite compte que les lignes destinée a être des TR commence par "<\/a><\/td>\n\n"
donc si tu remplace cela par "|" par exemple , il y aura donc entre chaque "|" un contributeur et toutes ses données
en fait dans cet exemple c'est yper simple c'est presque du html pour les autre replaces
Non mais ce que je comprends pas c'est comment tu arrive avoir que la partie TABLE....
Comment se fait il que tu n'est pas les LI des onglets, les DIV qui traînes par ci par la dans la page.....
En fait comment se fait il que ta requête htttp ne revois que ceci en brut :
Code:
1
2 $('#project-contributors a.load-more-contributors').before('<table class=\'contributors\'>\n<tr class=\'user-thumb\'>\n<td class=\'user-avatar\'>\n<a href=\"/fr/users/nathbo\"><img alt=\"Thumb_default\" src=\"https://d3v4jsc54141g1.cloudfront.net/assets/thumb_default.png\" />\n<\/a><\/td>\n<td class=\'name\'>\n<a href=\"/fr/users/nathbo\" class=\"username\">NathBO<\/a>\n<div class=\'date-reward\'>\n 1 avril 2016\n<\/div>\n<\/td>\n<td class=\'contributed\'>\n<\/td>\n<td class=\'amount\'>30 <\/td>\n<\/tr>\n\n<tr class=\'user-thumb\'>\n<td class=\'user-avatar\'>\n<a href=\"/fr/users/namathieu\"><img alt=\"Thumb_default\" src=\"https://d3v4jsc54141g1.cloudfront.net/assets/thumb_default.png\" />\n<\/a><\/td>\n<td class=\'name\'>\n<a href=\"/fr/users/namathieu\" class=\"username\">NaMathieu<\/a>\n<div class=\'date-reward\'>\n 1 avril 2016\n<\/div>\n<\/td>\n<td class=\'contributed\'>\n<\/td>\n<\/tr>\n\n<tr class=\'user-thumb\'>\n<td class=\'user-avatar\'>\n<a href=\"/fr/users/prettyeyes\"><img alt=\"Thumb_img_5344-1417511053\" ......src=\"https://d3v4jsc54141g1.cloudfront.net/assets/thumb_default.png\" />\n<\/a><\/td>\n<td class=\'name\'>\n<a href=\"/fr/users/eltriton\" class=\"username\">eltriton<\/a>\n<div class=\'date-reward\'>\n29 mars 2016\n<\/div>\n<\/td>\n<td class=\'contributed\'>\n<\/td>\n<td class=\'amount\'>30 <\/td>\n<\/tr>\n\n<\/table>\n'); $('a.load-more-contributors').attr('href', '/fr/projects/bigdream/contributors?page=2');
a oui je comprends mieux ta question
mille excuse
j'explique
si tu fait dans IE
tu aura bien entendu toute la page web avec sa presentation css js rellinck etc.....Code:.navigate "http://www.kisskissbankbank.com/fr/projects/bigdream/contributors?page=4"
le point d'interrogation designe un argument en plus ou une fonction a activer en l'occurrence les lignes $ que je n'ai pas enlevé dans la requête quasiment sous sa même forme
pour cela il te suffit d'un petit coup de F12 enregistrer et regarder toutes les requête effectuées et regarder le code JS tu retrouve la fonction
si tu fait la même chose dans la requête tu n'a que la table sous la forme facon json javascript application
en fait dans IE on a
Citation:
Mais du coup....
Si je te demande maintenant d'avoir le montant de l'objectif attendu et le nombre de jours restant :mrgreen:
Avec cette méthode comment tu ferais ?
C'est bon pour moi aussi ! :plusser: (y a moins de risque que cela ne fonctionne pas qu'avec IE !)
Je devais avoir les yeux qui se croisaient hier soir ! (certainement un mauvais setRequestHeader …)
Sinon pour parser, un Split de Split : Chrüterchraft ! Hein Patrick !
re ben la question ne se pose meme pas
tu fait la requête sans "?page=X" et la le code obtenu est bien celui de la page de départ donc html et dans le htmlfile tu manipule comme dans IE
non mais té quelqu'un toi !!!!:ptdr:
Chrüterchraft ! toi meme !!!!!:ptdr:
re
@marc
qué split c'est des replace ca peut pas bloquer ici impossible !!!!!!!!!:ptdr:
c'est bien pour cela que je disais des replaces intelligents pas n'importe comment ni n'importe quel ordre
hein Marc!!!!!!!!!!!!!!!:aie::mouarf:
Oui mais il y a besoin de moins de Split que de Replace !
Sinon oui, j'utiliserais aussi un HTMLfile …
Quand il n'y a pas trop de champs à récupérer, Split est rapide !
puré j'oubliais de preciser
quand tu fait une requête c'est quoi que tu attends ????????
j'te l' donne dans le mille un fichier HTML!!!!!
se sera donc "http://www.kisskissbankbank.com/fr/projects/bigdream/contributors.html" qui est la page de base
mille excuse hein c'est l'age que veux tu hein !!!!
Marc
ca rien n'est moins sur !!!!Citation:
Oui mais il y a besoin de moins de Split que de Replace !
sachant que la on récupère une chaine dans une chaine il y a pour chaque chaine a récupérer un split devant un split après
et sachant qu'il n'on pas tous le même nombre de colonne prévu (children du tr de destination) il va falloir encore mettre des if en pagaille
les replace sont pas dans n'importe quel ordre
fait le test mélange l'ordre des replace et tu verra
Oula .html non pas forcément...
Ca pourrait être .php, .asp, .apsx.......
Alors du coup ça fonctionne ok, mais c'est quand dingue ce truc, la le responseText renvoi un code propre avec des balise sans \ dans tous les sens.
Il y a vraiment un truc qui m'échappe, j'aime pas quand je comprends pas :evilred: :mur: