Bonjour,
cette table se trouve dans l'ID dt_partants …
Bonjour,
cette table se trouve dans l'ID dt_partants …
C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)
Bonjour Marc,
Oui tout a fait, mais impossible de les extraire, Chez moi elles sont dans une table, alors que chez Patrick non....cela serait dû à Windows 8 et IE 11!!!!! mais cela n'explique pas pourquoi du jour au lendemain le XML change....
Bref
Seb
Je viens de regarder sous Seven & IE9 (ma version préférée d'IE !) : j'ai bien une table dans l'ID de ce DIV !
Comme piloter IE est la solution la moins performante, à envisager en dernier recours, as-tu tenté via une requête ?
C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)
Mais non ! Celle la c est toujours dt partants
Mais depuis deux jours tu parle d une autre
Avant de coder je t ai fait un outils sert toi en non de dieu !!!! Il te donne le id ou la classe du parent c est pas compliqué
mes fichiers dans les contributions:
mail avec CDO en vba et mail avec CDO en vbs dans un HTA
survol des bouton dans userform
prendre un cliché d'un range
si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
et n'oublie pas de voter
@Marc:
Oui j'ai déjà essayé avec une requête, mais pas possible d'importer, c pour cela que j'ai convoité Patrick, voir fil de discussion post#1
Patrick de là, m'a sorti une belle procédure qui "imite" l'ouverture IE, en gros....
@Patrick:
Ce n'est pas loin sans faute, que j'utilise activement ton outil, j'ai également essayé avec l'outil de Qwazerty, qui donne les ID, ClassName etc...
, je me fais rouspétéAvant de coder je t ai fait un outils sert toi en non de dieu !!!!
Mais comme je te le dis, je l'utilise, mais je n'arrive pas à extraire "InnerText" de ces deux tableaux, il me renvoit à chaque fois celui de "dt-partants".
Je remets l'image de ce que j'obtiens:
en Surligné jaune, les tableaux de la page à récupérer et les <table summary="">
Pour info, la table "dt-partants", c'est bon
Bonne journée à tous
En pointant l'ID principal tu devrais alors pouvoir cibler une de ses tables.
Poste aussi ton code …
C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)
Voici un code succinct,
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
49
50
51
52
53
54
55
56
57
58 Option Explicit Sub Recup() 'Récupère l'arrivée '****************** 'Déclaration des variables Dim IE As New InternetExplorer Dim IEdoc As HTMLDocument Dim iedoc2 As HTMLGenericElement Dim HtmlElementStandard As HTMLGenericElement Dim HtmlElementSt As IHTMLElementCollection 'Dim HtmlElementStandard As HTMLDivElement Dim Entraineur As String 'Chargement d'une page Web IE.navigate "http://www.geny.com/partants-pmu/2015-05-27-longchamp-pmu-prix-du-mont-cenis_c716679" 'Affichage de la fenêtre IE IE.Visible = False 'On attend le chargement complet de la page WaitIE IE 'On pointe le document Set IEdoc = IE.document 'Allons chercher "l'Arrivée" dans nos Items 'dans item 6(n-1) Set HtmlElementStandard = IEdoc.all("tv-j") '("yui-navset yui-navset-top") Set iedoc2 = IEdoc.all("tv-j") Set HtmlElementSt = iedoc2.getElementsByTagName("table") 'ou 'Set HtmlElementSt = iedoc2.getElementsByClassName("yui-dt") 'On le place dans notre variable prévue à cet effet 'Entraineur = HtmlElementStandard.innerText 'ou Entraineur = HtmlElementSt.innerText 'On affiche le texte MsgBox Entraineur, Title:="Le texte extrait de la page" 'On libère les variables Set IE = Nothing Set IEdoc = Nothing IE.Quit End Sub Sub WaitIE(IE As InternetExplorer) 'On boucle tant que la page n'est pas totalement chargée Do Until IE.readyState = READYSTATE_COMPLETE DoEvents Loop End Sub
A tester dans un classeur vierge :
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 Sub Demo1() Const ELT = "dt_partants", _ URL = "http://www.geny.com/partants-pmu/2015-05-27-longchamp-pmu-prix-du-mont-cenis_c716679" With Feuil1: .UsedRange.Clear: .Cells(6).Value = " Connexion en cours ": End With With CreateObject("InternetExplorer.Application") .Navigate URL While .Busy Or .ReadyState < 4: DoEvents: Wend With .Document If IsObject(.all(ELT)) Then T$ = .all(ELT).innerHTML End With .Quit End With If T = "" Then Feuil1.Cells(6).Clear: Beep Else With CreateObject("HTMLFile") .Write T If .parentWindow.clipboardData.setData("Text", .body.innerHTML) Then With Feuil1 Application.ScreenUpdating = False .Paste .Cells(1) With .Rows(4) If .Cells(1).Value = "Loading..." Then .Delete End With End With .parentWindow.clipboardData.clearData "Text" End If End With End If End SubLe résultat est « brut de pomme », les liens ne fonctionneront pas, c'est juste pour voir si c'est correct de ton côté …
Au passage Patrick, la requête n'a pas besoin du paramètre Cookie mais juste de User-Agent !
C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)
salut marc
avec ton exemple on récupère que la table de dt-partants ce que l'on fait déjà avec la requête
en fait j'ai regarder de plus prêt et les tables qu'il veux sont en hidden et apparaissent que quand le bouton (balise "li") est cliqué
d'autant plus que même en hidden les éléments n'apparaissent pas dans le code html puisque qu'il sont créés de toute pièces par les sript quelques lignes plus bas
j'ai essayé de voir et impossible de récupérer les json il sont dynamiques on a que le js dans l'espion
donc pour les autres tables il faut repérer les li et cliquer dessus ,boucle d'attente ,et récupe de la table toujours avec le parent dt-partants le tout avec IE la requête étant inutile de ce coté
Pièce jointe 179196
mes fichiers dans les contributions:
mail avec CDO en vba et mail avec CDO en vbs dans un HTA
survol des bouton dans userform
prendre un cliché d'un range
si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
et n'oublie pas de voter
Slt Patrick et marc,
Comme de faite Marc, on récupère la table "dt-partants" avec ta procédure.
mais cela reste un belle approche sous cette forme que je ne connaissais pas.....
Patrick, j'ai déjà repéré cette balise "li", et comme de faite il faut cliquer dessus pour accéder aux autres tableaux.
Dans le tuto de Qwazerty, il en parle, de cibler un bouton et de simule un click...
Je regarde ce que je peux faire
Seb
J'ai mis un exemple avec IE à cause de ton code utilisant IE …
Sinon je préfère évidemment utiliser une requê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
22
23
24
25
26
27
28
29
30
31
32 Sub Demo2() Const ELM = "dt_partants", _ URL = "http://www.geny.com/partants-pmu/2015-05-27-longchamp-pmu-prix-du-mont-cenis_c716679" Dim oTD As Object With Feuil1: .UsedRange.Clear: .Cells(6).Value = " Connexion en cours ": End With With CreateObject("MSXML2.XMLHttp") .Open "GET", URL, False .setRequestHeader "DNT", "1" .setRequestHeader "User-Agent", "Mozilla/5.0" On Error Resume Next .send On Error GoTo 0 If .Status = 200 Then T$ = .responseText End With If T > "" Then With CreateObject("HTMLFile") .Write T If .getElementsByName(ELM).Length Then If .parentWindow.clipboardData.SetData("Text", .all(ELM).innerHTML) Then Application.ScreenUpdating = False With Feuil1: .Paste .Cells(1): .Hyperlinks.Delete: End With .parentWindow.clipboardData.ClearData "Text" End If End If End With End If If Feuil1.Cells(1).Value = "" Then Feuil1.Cells(6).Clear: Beep End SubSinon je ne vois pas quelles sont ces tables cachées : avec un navigateur, c'est où dans la page ?
S'il s'agit des statistiques, elles ne sont pas cachées : elles sont juste appelées par requête …
C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)
Marc,
Ta procédure fonctionne très bien, mais je récupère toujours le même tableau!!!!
Pour ton info,
quand tu vas sur ce lien (((ICI))) ce que je souhaite récupérer, ce sont les tableaux situés dans les onglets:
- "Statistiques des jockeys"
- "Statistiques des entraineurs"
Oui certes, mais visiblement cela n'est pas possible car "impossible d'importer les données", c d'ailleurs pour cela que j'ai posé la questionSinon je préfère évidemment utiliser une requête :
Si on peut le faire par requête, tant mieux....Mais moi et Patrick n'y arrivons pas de cette manière.S'il s'agit des statistiques, elles ne sont pas cachées : elles sont juste appelées par requête …
Bonne soirée
Seb
re
salut marc et sebphyto
les tables supplémentaire se font par requête oui!!!
j'ai donc mis f12 en route et copier la requête comme l'initiale
mais walou!! ca ne fonctionne pas bizarre
ca commence a m'intéresser cette bizarrerie
sinon comme j'ai dis avec IE c'est 1 boucle sur 3 clic sur les onglets au-dessus de la table
mes fichiers dans les contributions:
mail avec CDO en vba et mail avec CDO en vbs dans un HTA
survol des bouton dans userform
prendre un cliché d'un range
si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
et n'oublie pas de voter
C'est possible mais comme les informations sont redondantes entre les chevaux et les statistiques,
souhaites-tu conserver la même présentation en trois tables séparées
(mais dans la même feuille ou dans trois onglets, un par table ?)
ou ajouter dans la table des chevaux les statistiques (dans ce cas décrire la présentation souhaitée
ou joindre un classeur en .xlsx (sans code) avec une feuille contenant le tableau) ?
C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)
@Patrick:
Content que cela te pose souci, car si c le cas pour toi qui métrise le sujet alors pour moi t'imagine ce que ça représenteca commence a m'intéresser cette bizarrerie
@Marc:
Mon fichier se présente ainsi:souhaites-tu conserver la même présentation en trois tables séparées
(mais dans la même feuille ou dans trois onglets, un par table ?)
je récupère chaque table dans un onglet différent nommé : "Chevaux"; "Entraineurs"; "Jockeys"
dans chaque tableau je ne récupère que les "musiques", à la suite de cela les requêtes sont effacées et boucle sur les autres courses de la journée.
Lorsque je récupère les musiques, celle-ci sont copier/coller dans un autre onglet "Calcul" qui génère des calculs et me sort un prono pour chaque course.
Avant je copiais/collais manuellement chaque tableau, puis de là je faisais la même chose avec les musiques dans l'autre onglet.
bref c'est laborieux d'où ma demande afin d'automatiser tout ceci.
pour moi c juste la partie récup qui m'intéresse, pour le reste je gère.
Je te joins un fichier sans code, dans l'onglet "Explications", tu as la marche à suivre
Bon WE
Seb
re
debrouille toi avec ca por le mettre a ton gout
explication:
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 'http://www.geny.com/partants-pmu/2015-05-27-longchamp-pmu-prix-du-mont-cenis_c716679 Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub test() Feuil1.Cells.Clear Dim IE As Object, doc As Object, URL As String, i As Long URL = "http://www.geny.com/partants-pmu/2015-05-27-longchamp-pmu-prix-du-mont-cenis_c716679" Set IE = CreateObject("internetexplorer.application") IE.navigate URL IE.Visible = True Do: DoEvents: Loop While IE.busy Or IE.readystate <> 4 Set doc = IE.document With doc texte = texte & .getelementsbytagname("table")(2).outerhtml & vbCrLf & "<br>" Set onglet = .getelementsbyclassname("yui-nav")(0) For i = 1 To onglet.Children.Length - 1 onglet.Children(i).Children(0).Click 'Do: DoEvents: Loop While IE.busy Or IE.readystate <> 4 Sleep 700 ' Application.Wait (Now + TimeValue("0:00:01")) Set matable = .getelementsbytagname("table")(i + 2) texte = texte & matable.outerhtml & vbCrLf & "<br>" Next End With IE.Quit With CreateObject("HTMLFile") If .parentWindow.clipboardData.SetData("Text", texte) Then Application.ScreenUpdating = False With Feuil1: .Cells.Clear: .Paste .Cells(1): .Hyperlinks.Delete: End With .parentWindow.clipboardData.ClearData "Text" End If End With End Sub
on s'est fait leurrer grave comme des débutants
la table n'est pas dans le dt-partant , le script qui la génère la page remet la page a jour et modifie la structure du coup on pouvait toujours chercher walou!!walou!!
d'autant plus que la gestion d'attente est encore une fois un fastidieuses (ca faisait longtemps que l'on avait travaillé sur une page web similaire Marc pourrait t'en parler)
j'ai donc utilisé les indexs de table et non son appartenance a un parent
en effet par exemple l'index 3 représente une des trois dernières table en bas de pages MAIS!! des que l'on click sur un onglet les index changent
le 3 deviens le statistique entraineur etc.....
et le MUST sur cette page c'est que l'espion F12 ne peut pas trouver la table des que l'on a cliqué sur un onglet il accroche pas
j'es déjà vu ca sur d'autres pages web
zen restons zen
mes fichiers dans les contributions:
mail avec CDO en vba et mail avec CDO en vbs dans un HTA
survol des bouton dans userform
prendre un cliché d'un range
si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
et n'oublie pas de voter
Seb, dans les explications, un onglet MUSIQUE est évoqué mais il n'existe pas dans le classeur joint …
Ce dont j'ai besoin, par rapport à ton lien du post #61, est juste de savoir quelles sont les colonnes à importer
dans les tables des chevaux et des statistiques, leur ordre et leur feuille de destination.
Sinon actuellement je récupère tout (pas le choix avec la méthode utilisée pour la table des chevaux
mais pour les statistiques c'est déjà en précisant chaque colonne) par requêtes à partir de Demo2
dans la même feuille de calculs, les trois tables à la suite. Cela pourrait être dans ta feuille TEMP …
_____________________________________________________________________________________________________
Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)
slut marc
le post 65 pourrait constituer sa feuill temp!!
mes fichiers dans les contributions:
mail avec CDO en vba et mail avec CDO en vbs dans un HTA
survol des bouton dans userform
prendre un cliché d'un range
si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
et n'oublie pas de voter
Je récupère déjà l'intégralité des tables par requêtes;
pour les statistiques après requête je précise la structure des colonnes à copier …
C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)
re
@marc tu récupère par le json?
fait voir
au fait marc!!! si tu remplie pas le header de la requête en entier au bout de X requête c'est walou!!!!!je viens de faire le test
sujet que l'on avais abordé avec qwazerty il y a un moment déjà
mes fichiers dans les contributions:
mail avec CDO en vba et mail avec CDO en vbs dans un HTA
survol des bouton dans userform
prendre un cliché d'un range
si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
et n'oublie pas de voter
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager