Recuperation d'un bout de texte, Webrowser VBA

Bonjour a tous,

Je cherche à récupérer un simple bout de texte sur une page internet accessible seulement depuis les postes de mon entreprise. Sur le papier c'est une page comme une autre mais je ne pourrais évidemment pas vous la partager parce que le lien ne marchera tout simplement pas.

J'ai une liste de client sur Excel et je cherche à automatiser la récupération de leur code activité (ou code NAF), aujourd'hui j'ai créé une solution qui ouvre un Webrowser sur Excel qui rentre le lien, qui fait un Ctrl A + Ctrl C sur la page en question puis un Ctrl V sur Excel, puis j'arrive a récupérer l'info que je veux, seulement pour traiter 250clients (à cause du chargement/affichage de la page) cela prend entre 6 et 10min, soit une éternité.

J'essaye donc depuis se matin de ne plus passer par l'affichage mais de récupérer le code de la page et de réussir a récupérer l'information en question. (Ce qui me permettrait de ne plus avoir à récupérer la page, et serait donc un sacré gain de temps.)

Le chemin d'accès complet de ma variable est visible sur l'image jointe :

Quelqu'un aurait-il une suggestion?

Merci d'avance

capture

Bonjour,

essaie avec ceci (j'espère que c'est compréhensible)

il faudra ensuite faire un peu de traitement de texte si nécessaire

@AlienFall : je vais retravailler le code demain pour mieux coller à ton besoin qui est plus simple

Hello Steelson,

Merci pour ton aide ! Je vais tout de suite jeter un œil sur le fichier que tu as envoyé ! Et encore merci si tu retravailles dessus aujourd'hui !

Steelson a écrit :

Bonjour,

essaie avec ceci (j'espère que c'est compréhensible)

il faudra ensuite faire un peu de traitement de texte si nécessaire

Alors, j'ai eu bon regarder, il y a une chose qui m'échappe, tu as beau utiliser la fonction .responseText mais quand je l'affiche elle ne contient pas les informations que tu arrives à récupérer, il me manque une étape, je pense que tu utilises les balises que tu as mis en dur sur la feuille Excel mais encore une fois je comprend pas bien comment, ni pourquoi tu enchaines les Splits

Bref, je suis un peu perdu

Utilise cette version plus adaptée à ton besoin

Mets bien le texte avant la zone à récupérer et celle après comme dans l'exemple joint

dis moi si ok, n'hésite pas ...


dans ton cas, mets dans le "texte avant" de l'onglet param

<td class="FUnie" rowspan="1" colspan="1">

et dans "texte après"

<span


ici le double split permet de ne conserver que le texte avant et après la zone désignée dans param

il faudra ensuite retravailler pour ne conserver la valeur entre parenthèses dans ton cas (?)

Steelson a écrit :

Utilise cette version plus adaptée à ton besoin

Mets bien le texte avant la zone à récupérer et celle après comme dans l'exemple joint

dis moi si ok, n'hésite pas ...


dans ton cas, mets dans le "texte avant" de l'onglet param

<td class="FUnie" rowspan="1" colspan="1">

et dans "texte après"

<span


ici le double split permet de ne conserver que le texte avant et après la zone désignée dans param

il faudra ensuite retravailler pour ne conserver la valeur entre parenthèses dans ton cas (?)

Hello,

Déjà, vraiment merci de prendre le temps de m'aider ! J'ai essayé le fichier que tu m'as donné, et en m'étant les lignes en question dans l'onglet paramètre, la fonction me renvoi une case vide, elle ne trouve pas les lignes j'imagine puisque le retour est vide. Je ne sais pas quoi faire :/


ok j'avance a mon rythme, mais la principal question c'est comment a tu fais pour récuperer le nom de la classe pour "cibler" la valeur sur Boursorama? Parce que si je passe par F12 et ciblé depuis IE, je trouve :

<span id="brs-sl598319fbb9c08">17.990 EUR</span>

Or tu as mis :

<span class="cotation">

Ou récupères tu cette info?

[EDIT] : En relançant j'ai effectivement trouver le span class = cotation, du coup ça venait que la page n'étais surement pas encore chargé a 100%

Par contre, cela ne marche toujours pas dans mon cas :/

Alors là je ne sais pas quoi te dire sans avoir la source complète !

Essaie avec d'autres paramètres comme :

<td class=" _____ et tout ce qui suit ____>

et comme texte de fin

</td>

tu devrais récupérer Activité

capture d ecran xx

Si nécessaire ajoute un msgbox .respondText comme ceci :

    If .Status = 200 Then
        MsgBox .responseText
        Valeurs(i, 1) = Split(Split(.responseText, [deb_texte])(1), [fin_texte])(0)
    End If

Alors j'ai essayé beaucoup de chose ! Même de tout récupérer en mettant debut : <html et fin </html>

Mais je me suis rendu compte que on ne parcours pas la bonne partie du code ! C'est donc normal qu'il ne trouvais pas les balises en question, je ne sais pas quoi changer pour acceder au code source,

J'ai changé d'adresse source, elle est plus simple, elle posséde seulement l'information que je souhaite, et je peux cette fois même voir le resultat souhaitez dans le code source pur et dur avec Ctrl U sur IE,

Comment faire pour recuperer le code source tout simplement? celui qu'on aperçois avec Ctrl U? Cela doit bien être possible?

J'ai eu beau essayé :

WebF.Document.DocumentElement.innerHTML

Mais ça ne pointe pas vers les bonnes données encore une fois

En fait avec le code que tu m'as donnée je recup les données :

<html><body onload="document.FrmVal.submit();">

Hors je cherche les données de :

<body onload="null">

AlienFall a écrit :

Alors j'ai essayé beaucoup de chose ! Même de tout récupérer en mettant debut : <html et fin </html>

Mais je me suis rendu compte que on ne parcours pas la bonne partie du code !

Je pense donc que l'URL n'est l'URL définitive ... soit il y a des frames, soit elle renvoie vers une autre page après identification (elle renvoie des données en "post") ou simple reroutage !

Je ne peux pas aller plus loin pour ma part ... le code fonctionne comme tu l'as vu avec Boursorama sur l'URL "définitive" intégrant éventuellement les paramètres en "get" ... l'adresse comporte des ? ou & dans ce cas

Dis moi quand même si l'adresse change entre l'interro web direct via navigateur et la réponse toujours via un navigateur web quelconque (hors excel).

Alors l'adresse ressemble à quelque chose comme ça :

http://xxxx-xx.xx-xxx.fr/xxxx_xxxxx/FR/SyntheseTiers/liste.aspx?trt=tiesyn&xxxxxx=XXXXX&xxxxxx=XXXXX&xxxxx=XXXXXXXXXXXXX&mnc=TIESYN&ses=a&langue=FR&look=intranet_XXXX&pays=FR&racine=XXXXXXXXXXX&ref=XXXXXXXXXXXXX&profil=XXXX

Donc effectivement y'a un paquet de ? et de &

Donc les paramètres sont passés selon la méthode get et il n'y a pas de raison que cela ne fonctionne pas !!

1 - cette URL est-elle celle à l'origine de la requête ou celle qui s'affiche sur la page web et qui serait différente ?

2 - quels sont les paramètres ?

3 - peut-on simplifier (car il est parfois ajouté des n° de session php inutiles pour nous)

4- essaie aussi de récupérer la source telle que vue par excel avec cet outil

21page-complete.xlsm (19.65 Ko)

Hello, j'ai utilisé ton fichier, j'obtient :

<html><body onload="document.FrmVal.submit();">
<form name="FrmVal" id="FrmVal" action="http://tier-xx.xx-xxx.fr/tie6_tiers/FR/SyntheseTiers/liste.aspx?trt=tiesyn&XXXXX=xxxxx&caisse=xxxxx&tiers=xxxxxxxxxxxxxxx&mnc=TIESYN&ses=A&langue=FR&look=intranet_2000&pays=FR&racine=xxxxxxxxxxxxxxxx&ref=xxxxxxxxxxxxxxx&profil=F50B" method="post" target="_self"><input type="hidden" id="Succes" name="Succes" value="O"><input type="hidden" id="Fede" name="Fede" value="xx"><input type="hidden" id="xxxxxxx" name="xxxxxx" value="xxxxx"><input type="hidden" id="xxxxxx" name="xxxxxx" value="xxxxx"><input type="hidden" id="xxxxx" name="xxxxx" value="xxxxxxxxxxxxxx"><input type="hidden" id="xxxxxxxx" name="xxxxxxxxxxx" value=""><input type="hidden" id="xxxxxxxxx" name="xxxxxxxxx" value="xxx"><input type="hidden" id="xxxxxxxxxxxxxx" name="xxxxxxxxxxxxxxx" value="00"><input type="hidden" id="xxxxxxxxxxxxx" name="xxxxxxxxxxxxxx" value="xxxxxx"><input type="hidden" id="xxxxxxxxxxxxxx" name="xxxxxxxxxxxxxxx" value="xxxxx"><input type="hidden" id="xxxxxxxxxxxx" name="xxxxxxxxxxx" value=""></form></body></html>

L'information que je recherche n'est pas présente dans la réponse, Est-ce du au module "action"? Comme tu disais que la page fait des appels qui ne sont pas affiché ici?

PS : Désolé pour la censure des variables.. Mais j'ai pas envie de prendre le risque d'être embêter pour diffusion de contenu sensible

AlienFall a écrit :

PS : Désolé pour la censure des variables.. Mais j'ai pas envie de prendre le risque d'être embêter pour diffusion de contenu sensible

Pas de soucis, c'est normal!

La réponse est superbe ... il y a donc bien une formqui renvoie le questionnaire en mettant dans l'URL les paramètres (envoi méthode get) ... et pourtant c'est déclaré en post.

L'objectif serait donc de procéder en 2 temps :

1- détecter ces paramètres dans .responseText pour reconstruire l'URL en remplaçant trt=tiesyn&xxxxxx=XXXXX&xxxxxx=XXXXX&xxxxx=XXXXXXXXXXXXX&mnc=TIESYN&ses=a&langue=FR&look=intranet_XXXX&pays=FR&racine=XXXXXXXXXXX&ref=XXXXXXXXXXXXX&profil=XXXX par les valeurs présentes

2- relancer l'interrogation avec l'URL reconstituée et obtenir la réponse finale

Je vais regarder de très près mais cela va me prendre un certain temps et même un temps certain, en espérant ne pas buter sur une impossibilité car j'ai un doute sur la méthode entre post et get.

onload="document.FrmVal.submit();" signifie que lors du chargement de la page web, le formulaire FrmVal est soumis de suite

action="http://tier-xx.xx-xxx.fr/tie6_tiers/FR/SyntheseTiers/liste.aspx?trt=tiesyn&XXXXX=xxxxx&caisse=xxxxx&tiers=xxxxxxxxxxxxxxx&mnc=TIESYN&ses=A&langue=FR&look=intranet_2000&pays=FR&racine=xxxxxxxxxxxxxxxx&ref=xxxxxxxxxxxxxxx&profil=F50B"

donne la fameuse nouvelle URL soumise

MAIS

en plus des paramètres inclus dans l'URL, il y en a d'autres passés hors URL par la méthode

method="post"

ce sont tous les paramètres comme ceci

<input type="hidden"

Le formulaire web est donc hybride get/post .... et malheureusement avec post et excel je ne sais pas (encore) comment faire ! Ce n'est pas (encore) dans mes compétences, il faut que je cherche !! je pense qu'il doit y avoir moyen et alors reprendre le processus que je décrivais. Mais le programme est différent !

On a ici 2 sujets intéressants sur la méthode post

https://stackoverflow.com/questions/158633/how-can-i-send-an-http-post-request-to-a-server-from-excel-using-vba

https://codingislove.com/http-requests-excel-vba/

à explorer

il faudra décoder la première .responseText[ pour construire les paramètres

Hello,

J'ai fait la première partie qui consiste à récupérer l'URL et les paramètres à renvoyer par "post"

Essaie déjà ceci !!

Hello,

Fait en "aveugle", donc si cela donne directement le résultat, c'est un miracle.

J'ai affiché les étapes intermédiaires pour debugger si besoin.

Mettre l'URL ainsi que le texte "avant" et le texte "après" le texte recherché ... (cases bleu ciel)

Hello Steelson,

Je sais pas comment te remercier pour le temps que m'accorde et l'aide que tu acceptes de me fournir, vraiment merci beaucoup ! Si j'arrive enfin à récupérer les infos ça sera à 100% grâce à toi !

Je ne peux pas bosser le weekend sur le projet vu que mes fichiers sont en local au boulot, je regarde les fichiers que tu as envoyé et je vais essayer avec mes données !

Rechercher des sujets similaires à "recuperation bout texte webrowser vba"