Recuperation d'un bout de texte, Webrowser VBA

Steelson a écrit :

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)

Alors j'ai essayé les deux fichiers toute la partie déduction du lien fonctionne, je peux même re-cliquer dessus et j'arrive sur la parti que ou mes données sont affichées. En faisant Ctrl U sur cette page je tombe sur le code pur et dur, avec les fonctions, les commentaires du dev etc.. Mais aussi mes variables que je recherche.

Par contre, le deuxième fichier ne me renvoi rien, j'ai essayé de mettre des "texte début" "texte fin" très large ou général pour voir si qq chose sortait, mais rien à faire la case reste vide.

[EDIT] : La parti de ton code :

        If .Status = 200 Then
            [txt_final].Value = Split(Split(.responseText, [txt_Avant])(1), [txt_Apres])(0)
        End If

J'ai essayé de mettre un point d'arrêt sur le [txt.final] mais la macro semble ne pas valider la condition car elle ne s'arrête jamais dans la boucle.

[EDIT2] : Toute la parti récupération des paramètres du coup fonctionne, par ailleurs dans une utilisation "normal" l'utilisateur doit les saisir puis cliquer sur le bouton "rechercher" du coup j'ai de base leurs valeur, parce qu'une fois que la macro retournera la bonne info, je ferais une boucle sur les tiers pour récupérer le code NAF de chaque client Enfin bref..

AlienFall a écrit :

[EDIT] : La parti de ton code :

        If .Status = 200 Then
            [txt_final].Value = Split(Split(.responseText, [txt_Avant])(1), [txt_Apres])(0)
        End If

J'ai essayé de mettre un point d'arrêt sur le [txt.final] mais la macro semble ne pas valider la condition car elle ne s'arrête jamais dans la boucle.

Cela veut dire que le status 200 (terminé) n'est jamais atteint ??

Bon je vais relire la documentation et proposer une correction, mais sans garantie !


Essaie de mettre

MsgBox (.responseText)

AVANT ceci

        If .Status = 200 Then
            [txt_final].Value = Split(Split(.responseText, [txt_Avant])(1), [txt_Apres])(0)
        End If

on verra bien ce qui se passera !

Steelson a écrit :

Cela veut dire que le status 200 (terminé) n'est jamais atteint ??

Bon je vais relire la documentation et proposer une correction, mais sans garantie !


Essaie de mettre

MsgBox (.responseText)

AVANT ceci

        If .Status = 200 Then
            [txt_final].Value = Split(Split(.responseText, [txt_Avant])(1), [txt_Apres])(0)
        End If

on verra bien ce qui se passera !

Alors j'ai essayé, le soucis vient de tes on error resume next, car les lignes ne sont jamais exécuté car atteinte.

J'ai le droit a un erreur (en mettant les on error resume next en commentaire) sur :

Sub decode_url() ' URL
    avant = "action="""
    apres = """ method"
    [URL_2].Value = Split(Split([Source].Value, avant)(1), apres)(0) '<-- L'indice n'appartient pas à la sélection 
End Sub

ok, bonne initiative

je regarde ce soir

Par ailleurs après avoir utiliser le fichier "Projet AlienFall", j'obtient comme fichier source :

Image jointe,

(Je déteste quand le JavaScript entre en jeu !)

capture
AlienFall a écrit :

(Je déteste quand le JavaScript entre en jeu !)

(j'adore ce langage)

Si le fichier source n'est plus celui-là

<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>

ben faut pas s'étonner que l' "indice n'appartient pas à la sélection" car il ne trouve pas les termes discriminants ! notamment "action" et "method" car il n'y a plus de formulaire retourné !!!

est-ce que l'URL aurait changé ?

peux-tu ré-essayer le fichier qui avait permis de générer cette source ?

Alors pour répondre a ta question, j'essaye à chaque fois avec plusieurs lien.

La réponse que j'ai obtenu avec le js, est celle quand je mets le l'url de base que j'obtient quand j'utilise le site web normalement (en rentrant un numéro tiers, d'autre information etc.. puis que je clique sur OK).

Par contre le second url que j'utilise est celui que je récupère quand je fais : F12 - Onglet réseau, j'enregistre un chargement de page (pour voir tous se qui se passe), puis je fais une recherche dans tout les résultats du code NAF recherché, j'obtient un lien qui (je pensais) me permettrait d'isoler le contenu que je recherche et me permettre de récupérer les infos, mais il n'en est rien.

Je laisse en PJ trois images qui montre comment j'ai recup le lien, je pensais que ça serait plus simple si j'arrivais a isoler le bout de page qui nous intéresse !


Ensuite l'erreur est toujours présente dans tout les cas, la macro ne tourne pas quelques soit l'URL que j'utilise, toujours cette erreur d'indice de sélection.

c1 c2 c3

Ce qu'il faudrait c'est le code source pur en texte ... comme celui que tu m'avais donné où on voit apparaître la form

J'avais testé tout le décodage là-dessus et le décodage ne posait pas de soucis, même sans le resume next

SI tu changes l'URL et que la réponse du serveur est différente, il faudra un programme à chaque fois !

De toute façon j'atteins mes limites sans avoir les fichiers et sans voir la façon dont le site est interrogé, il faut donc que tu demandes à quelqu'un en interne s'il peut faire quelque chose.

Steelson a écrit :

Ce qu'il faudrait c'est le code source pur en texte ... comme celui que tu m'avais donné où on voit apparaître la form

J'avais testé tout le décodage là-dessus et le décodage ne posait pas de soucis, même sans le resume next

SI tu changes l'URL et que la réponse du serveur est différente, il faudra un programme à chaque fois !

De toute façon j'atteins mes limites sans avoir les fichiers et sans voir la façon dont le site est interrogé, il faut donc que tu demandes à quelqu'un en interne s'il peut faire quelque chose.

Par exemple ça :


Le Word que je t'ai envoyé, correspond au code Ctrl U du lien qui répond le fameux code html sur lequel tu as bossé et que je t'ai envoyé précédemment

Mais dans ce document, je ne retrouve pas du tout ceci :

<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>

De toute façon, si tu fais Ctrl+U cela veut dire que le navigateur a déjà retourné le formulaire !! Ce qu'il faut capter c'est la source au premier envoi, donc via le fichier excel que j'avais posté, je pense que c'est celui-ci

21page-complete.xlsm (19.65 Ko)

Ce que tu me montre et la réponse sur le même lien de ton fichier et de tout les méthodes que j'ai pu utiliser de mon coté :

c4

OK

je vais reprendre à partir de là à tête reposée ...

Voila le resultat après passage dans page complete :

Steelson a écrit :

OK

je vais reprendre à partir de là à tête reposée ...

Merci beaucoup !

AlienFall a écrit :

Ce que tu me montre et la réponse sur le même lien de ton fichier et de tout les méthodes que j'ai pu utiliser de mon coté :

c4

C'est parfait à ce stade, l'URL et les paramètres sont bien décodés

Ensuite, il ne faut pas mettre juste < et > sur le texte avant et après mais quelque chose de plus discriminant, comme

pour avant : <td class="FTitLigU" rowspan="1" colspan="1" >

pour après : </td>

AlienFall a écrit :

Alors j'ai essayé les deux fichiers toute la partie déduction du lien fonctionne, je peux même re-cliquer dessus

Attention, le but n'est pas re-cliquer sur ce lien, car il ne renverra pas les paramètres indispensables, il faut laisser le code se dérouler complètement.


AlienFall a écrit :

... le soucis vient de tes on error resume next, car les lignes ne sont jamais exécuté car atteinte.

J'ai le droit a un erreur (en mettant les on error resume next en commentaire) sur :

Sub decode_url() ' URL
    avant = "action="""
    apres = """ method"
    [URL_2].Value = Split(Split([Source].Value, avant)(1), apres)(0) '<-- L'indice n'appartient pas à la sélection 
End Sub

C'est d'autant plus curieux que d'après la photo l'URL_2 est bien décodée !! et a priori renseignée sur ce bout de fichier

Et que le on resume next n'est pas dans cette procédure, mais comme il est dans la procédure qui appelle cette sous-procédure cela peut expliquer ce phénomène

Toutefois en lançant la procédure test cela ne bogue pas (il faut la lancer quand le code source a été récupéré et affiché dans B2)

c4

Hello,

Alors j'ai réessayé avec des textes avant/après "plus détaillés" :

pour avant : <td class="FTitLigU" rowspan="1" colspan="1">

pour après : </td>

Mais le problème est que rien n'est jamais sorti dans la cellule jaune de réponse du fichier "Projet AlienFall"

Si je retire encore une fois les On error resume next j'obtient l'erreur :

Sub requete2()
Dim XMLHTTP As New MSXML2.XMLHTTP
    myurl = [URL_2]
    With XMLHTTP
        .Open "POST", [URL_2].Value, False
        .setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
        .Send [param] '<---- Erreur paramètre invalide
        MsgBox .responseText
        If .Status = 200 Then
            [txt_final].Value = Split(Split(.responseText, [txt_Avant])(1), [txt_Apres])(0)
        End If
    End With
End Sub

Ce n'est pas la même que précédemment (je n'étais pas sur le bon lien comme tu me l'as expliqué)

Je ne comprends pas à quoi correspond [param]? Pourquoi entre [] ? Et il n'est pas initialisé du coup je suis un peu perdu

Je continu à faire des tests :

Si je mets :

Texte avant <td class="FTitLigU"

Texte après </td>

Je n'ai plus d'erreur sur [param] mais une erreur sur :

Sub requete2()
Dim XMLHTTP As New MSXML2.XMLHTTP
    myurl = [URL_2]
    With XMLHTTP
        .Open "POST", [URL_2].Value, False
        .setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
        .Send [param]
        MsgBox .responseText
        If .Status = 200 Then
            [txt_final].Value = Split(Split(.responseText, [txt_Avant])(1), [txt_Apres])(0) '<---- L'indice n'appartient pas à la sélection.
        End If
    End With
End Sub

Par ailleurs, l'explorateur de variable me dit que [txt_final], [txt_Avant] et [txt_Apres] sont tous égales à [param] et sont vides.

Remplace requete2 par la suivante et lance juste cette procédure sur le ficheir déjà renseigné !

Sub requete2()

MsgBox [txt_Avant] & " | " & [txt_Apres] & " | " & [param]

Dim XMLHTTP As New MSXML2.XMLHTTP
    myurl = [URL_2]
    With XMLHTTP
        .Open "POST", [URL_2].Value, False
        .setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
        .Send [param]

MsgBox .responseText

        If .Status = 200 Then
            [txt_final].Value = Split(Split(.responseText, [txt_Avant])(1), [txt_Apres])(0)
        End If
    End With
End Sub

resultat

De nouveau l'erreur sur le Send [param]


d1 d2 d3 d4
Rechercher des sujets similaires à "recuperation bout texte webrowser vba"