[..] Code source - inspecteur de page - Chrome

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
JulienBoul
Niveau 4
Niveau 4
Messages : 82
Enregistré le : ven. 04 déc. 2015 13:55
Status : Hors ligne

[..] Code source - inspecteur de page - Chrome

#1

Message par JulienBoul »

Bonjour,

Je cherche à récupérer la totalité d'un code source sur chrome. Malheureusement, certaines parties sont cachées (css/java script?) et je dois donc passer par l'inspecteur (clid droit -> Inspecter page) pour avoir accès à l'intégralité du code.
Par la suite, j'utilise une regex pour extraire les données que je cherche.

A-t-on une astuce propre en "autoit" pour cela?
Avatar du membre
Barthandelus
Niveau 4
Niveau 4
Messages : 53
Enregistré le : mer. 02 janv. 2019 14:34
Status : Hors ligne

Re: [..] Code source - inspecteur de page - Chrome

#2

Message par Barthandelus »

Hello,

Qu'entends-tu par "parties cachées" ? Le js contenu dans un fichier, lui même contenu dans une balise <script>, par exemple ?

Tout d'abord, petite information, sur la Console Développeur sur Chrome (ou tout autre console de navigateur), ce n'est en vérité pas le code "source" que tu vois mais l’interprétation par ton navigateur du code retourné par le serveur (qui lui même est différent du code source et qui peut être différent d'un navigateur à l'autre !), et n’inclura donc naturellement pas le code coté serveur. Attention, je parle pour le DOM. Le contenu des fichiers .js, lui, est statique, et donc afficher de la même manière d'un navigateur à un autre (mais pas forcément interpréter de la même façon).

Entre outre, des codes javascript peuvent être conçus pour ajouter du contenu dynamiquement au contenu "statique" initialement télécharger. L'Ajax en est un exemple. Cherches-tu à obtenir le code initial de la page (dans ce cas là, un simple curl couplé à une expression régulière pour rechercher tout les includes js/css/autres et relancer des curl par dessus pourrait suffire.) ou cherches-tu à obtenir le code dynamique de la page (dans ce cas là il faudrait très certainement tenter par un moyen ou un autre de lire les données du processus de la console Google Chrome à un temps T).
JulienBoul
Niveau 4
Niveau 4
Messages : 82
Enregistré le : ven. 04 déc. 2015 13:55
Status : Hors ligne

Re: [..] Code source - inspecteur de page - Chrome

#3

Message par JulienBoul »

Hello Barthandelus,

Merci pour ces bases de java et autres langages qui me sont vraiment inconnus.

En fait, j'ai déjà appris a analyser le code source d'une page pour le filtrer avec une regex.
La, le problème, c'est que quand tu saisis une info qui apparaît sur la page "publique", par exemple une référence "XYZ", et que tu la recherches (ctrl+F) dans le code source, il n’apparaît pas. Le code source ne contiens pas "XYZ".
Par contre, quand je fais clic droit -> Inspecter, puis, "ctrl+F", ben je trouve mon fameux "XYZ".

Je ne sais pas ce qu'est un curl, j'ai brièvement vu que c'était "un outil Linux destiné à faire de la simulation et du téléchargement pour les protocoles réseau les plus courants' :shock: (vois tu le vide dans mes yeux?...)

Heu, du coup, je pense qu'il faudra passer par l'inspecteur (la façon dont mon navigateur retranscrit le code qu'il interprète).
Mais du coup, comment mon navigateur peut il interpréter un code qui est invisible?... Je ne sais pas si ma question est logique, mais comment un navigateur (chrome en l’occurrence) peut il "lire" puis interpréter un code "invisible"?
Je vais essayer de sortir un exemple avec des données anonymisées, car il s'agit d'un logiciel d'entreprise.
JulienBoul
Niveau 4
Niveau 4
Messages : 82
Enregistré le : ven. 04 déc. 2015 13:55
Status : Hors ligne

Re: [..] Code source - inspecteur de page - Chrome

#4

Message par JulienBoul »

Hum, en fait, je viens de tester sur plusieurs sites à accès pro/particuliers, et pour les accès particuliers, t'as une fiche produit, avec le code inscrit dans le dur.
Tu y trouves donc "YXZ" lorsque tu fais ta recherche dans le code source.

Par contre, pour les accès pro, ça se présente un peu comme le résultat d'une requête (fonction recherche du site). Tu as d'ailleurs 2 options en fonction de l'endroit ou tu clic: "inspecter" ou "inspecter le cadre".
En gros, tu n'as pas de fiche produit dès le début. Tu as un résultat de recherche qui te renvois ensuite, si tu clic, sur une page produit. Idem pour cette page produit, quand tu clic, tu n'as aucune info "YXZ" dans le code source. Par contre, tu as une grande zone "blanche" (ce que j'appelle "partie cachée" = saut de lignes multiples) dedans. En fait, je pense que tu as la place pour le code source qui est caché.

Du coup je ne peux pas t'envoyer d'exemple, j'espère que tu comprendras le sens de ce que je dis, ça ne soit pas être la première fois que quelqu'un est confronté au problème si?

Est ce que de mon coté je peux faire une manip pour te renseigner plus?

Lorsque j'utilise le plugin what's run il me donne ces infos:

Web Server
Apache 2.2.22
Javascript Frameworks
jQuery 1.12.0
Operating System
Ubuntu

Ca t'aide un peu?
Avatar du membre
Barthandelus
Niveau 4
Niveau 4
Messages : 53
Enregistré le : mer. 02 janv. 2019 14:34
Status : Hors ligne

Re: [..] Code source - inspecteur de page - Chrome

#5

Message par Barthandelus »

Il semble qu'il y ait quelques erreurs de compréhension sur ce que je t'ai dis (notamment, ne pas confondre Java et JavaScript, c'est deux langages totalement différent et n'ayant de similaire que le nom. :wink: )

Pour information, si tu cherches à obtenir une valeur taper par l'inspecteur, curl n'est pas la solution à ton besoin. Cependant, le fait de lire des données taper me fait fortement penser à un Keylogger "détourné" (c'est illégal et ton anti-virus pourrait bien t'envoyer une alerte). Il ne s'agirait plus d'écouter les touches du clavier mais simplement de récupérer la valeur affichée.

Cela étant dit, pour récupérer ce que tu cherches, tu vas devoir trifouiller dans les processus ouvert, et je préfère te prévenir : il faut être un utilisateur avertit, parlant couramment l'anglais technique, et être habitué à l'usage des cases mémoires (avec des langages comme le C), et être capable de savoir retrouver une case mémoire précise.

Si tu t'en sens les épaules, dans ce cas, il ne te reste plus qu'à lire l'usage de cet UDF (UDF = Fonctions faits par les membres), en anglais : https://www.autoitscript.com/forum/topi ... emory-udf/

Ce ne sera pas simple : le contenu des cases sont souvent crypté par un algorithme interne au programme (et qui diffère d'un programme à l'autre, du coup). Et là, on parle d'un programme Google, qui sont relativement bien sécurisés.

Personnellement, je ne m'y aventurerais pas. Peut être qu'en définissant ton besoin avec plus de précision (ex : "J'ai besoin de récupérer le résultat d'une recherche de produit / J'ai besoin de récupérer la fiche produit après une recherche"), on pourrais te fournir une solution plus simple et surtout plus adapté (et je te recommande de présenter ton besoin en utilisant des images / captures d'écrans, avec les zones entourés sur ce qui t'intéresses, cela sera surement plus clair pour nous). :wink:
JulienBoul
Niveau 4
Niveau 4
Messages : 82
Enregistré le : ven. 04 déc. 2015 13:55
Status : Hors ligne

Re: [..] Code source - inspecteur de page - Chrome

#6

Message par JulienBoul »

Hello Barthandelus,

Encore, merci de ta pédagogie, comme je disais plus haut, je ne suis pas surpris de passer au travers certaines explications. C'est pour cela que j'essaie d'expliquer au max mon raisonnement, afin que tu y trouves ce qui cloche, car je ne me rend pas forcément compte de mes erreurs.

Je t'ai fait 3 Screens en anonymisant un peu.
1 - Ecran d'accueil du site avec la recherche effectuée et la façon dont elle s'affiche.
01 page principale.PNG
2 - Le code source avec les fameuses lignes "vides". Après, difficile de publier les 500 lignes donc cet extrait ne parlera pas forcément.
02 code source.PNG
3 - Vue de l'inspecteur avec le résultat que j'ai trouvé.
03 inspecteur.PNG
Pour les autres manières très techniques d'y arriver, on va pas insister, je n'ai clairement pas le niveau pour aller à ce point dans le détail, et Autoit n'est pas forcément adapté à ce type de recherches.

Pour rester dans le sujet, au pire des cas, je ferais un "ctrl+A ctrl+C" et j'essaierai de sortir une regex de dela. L'ennui de cela, c'est qu'il est impossible de déterminer le format du résultat de recherche.

Ha oui, tu l'auras compris, la référence en #F417679 a un format standardisé, il correspond aux références internes de mon grossiste. Les autres références (MS-0A17355 dans mon exemple) ne seront jamais standardisées (chiffres, lettres, caractères spéciaux...).
Dans l'idée, notre boite cherche à court-circuiter le grossiste en achetant en direct pour baisser les prix de vente des pièces (politique écolo - recyclage avec les réparations sois même) en conservant les marges. C'est pour cela qu'on tente de se sourcer en direct. La difficulté, c'est que pour éviter ça le grossiste travaille avec ses propres réfs et ne nous donne pas accès aux équivalences (forcément)...

Voilà pour le coté éthique.
Concernant le Keyloger, je ne pense pas qu'il s'agisse de ça car il ne s'agit pas d'enregistrer ce que mon clavier tape mais bien ce qui est présent, visuellement, sur mon écran.

J'espère que j'aurai réussi à t'aider un peu à comprendre ma demande.

Cordialement,
Julien
Avatar du membre
Barthandelus
Niveau 4
Niveau 4
Messages : 53
Enregistré le : mer. 02 janv. 2019 14:34
Status : Hors ligne

Re: [..] Code source - inspecteur de page - Chrome

#7

Message par Barthandelus »

Hello,

Au vue des différences entre le code interpréter et l'inspecteur, il y a de fortes chances que les résultats soient reçus en Ajax (avec une forte chance qu'elles soient exposés en JSON auquel cas ta tâche serait encore plus simplifier !)

Dans ta dernière capture d'écran, tu peux voir plusieurs onglets (celui que tu as sélectionner étant "Elements".

Voici comment j'aurais procéder :
- J'aurais ouvert la console développeur de Chrome.
- Je serais aller sur l'onglet "Network".
- J'aurais taper ma recherche, et je l'aurais valider.
=> A ce stade, tu verras des choses apparaitre dans l'onglet "Network". Potentiellement une page avec pleins d'arguments et des images. C'est en fait les requêtes AJAX, la réponse de ta recherche. Donc, dedans figure forcément.. ce que tu cherches à obtenir !

Il te suffit d'analyser quelle ligne correspond réellement à ta requête, et de regarder comment est fait le contenu. S'il ressemble à quelque chose du genre {test:'test',pseudo:'toto'}, ça signifie que le retour AJAX est en JSON, sinon, qu'il faudra parser la réponse à l'aide des fonctions StringInStr() et StringMid().

A ce stade, tu as toutes les armes. Imagine que tu fasses ta recherche sur la page search.php (c'est un exemple). Dans l'onglet "Network", tu verras, par exemple encore, "search_ajax.php?s=MS-0A17355" s'il s'agit d'un AJAX via GET, sinon, tu verras tes paramètres dans Network > Cliquer sur la trame > Headers > Tout en bas dans "Query String Parameters".
La réponse se trouve dans "Preview" (RAW) ou "Response" (Interprétation).

Jusque là, tu dois peut être te dire "ok, et alors ?". Et bien, il te suffirait de construire un objet winhttp.winhttprequest.5.1 ou d'effectuer un CURL avec des paramètres GET/POST pré-définis en dur ou via une IHM dans ton code AutoIT pour obtenir les résultats. A ce stade, je pense que ton projet est faisable et plus simple que ce que je pensais. De la sorte, tu pourrais donc même faire un robot qui analyserais en continue le contenu, sans même que tu ai à faire une recherche. Ce serais comme d'automatiser ton travail à 100%.
JulienBoul
Niveau 4
Niveau 4
Messages : 82
Enregistré le : ven. 04 déc. 2015 13:55
Status : Hors ligne

Re: [..] Code source - inspecteur de page - Chrome

#8

Message par JulienBoul »

Salut,

Alors, le vide dans mes yeux est revenu à la première lecture de tes explications, puis en les utilisant, et en reprenant mes esprit, j'ai "un peu" réussi, par je ne sais quel prodige (la curiosité sans doute) à trouver de belles pistes.

Alors, en vrac, voici des pistes que j'ai trouvées, suivront 2 screens qui te parleront mieux que moi. (après la flèche "->", ce qui s'affiche à mon écran quand je me rend sur le lien en question.

https://XXX/nsearch/ajax/getModelForArt ... class=none
-> page blanche s'affiche

https://XXX/XXX/ajax/SessionKeepAlive?s ... 3262317830
-> true,jshop10,571F165CAFFD3F89861B497009F6506E,506,14210,001,22.03.2019-14:45:03-944,21.03.2019-16:37:14-291,,

https://XXXX/nsearch/ajax/getInstantMod ... llmodels=0
-> []

https://XXX/nsearch/ajax/getSuggest_DEV ... cation&qi=
-> jQuery17011191933948669641_1553262303329({"content":{"c":[{"w":"rs-rt4141","k":"657077"}],"a":[{"w":"RS-RT4141 BROSSE COMBINEE GROUPE SEB<br>#G488173","pic":"https:\/\/img.spares-accessories-shop-gmbh.de\/athumbs\/20\/e9\/20e98197ccef7cff5317f548025b2029.jpg","k":"2","nr":"G488173"}],"originalsuchbg":"RS-RT4141","mcache":false}})

Voici les 2 screen que je pense intéressants. N'oublions pas que l'objectif est de faire le lien dans cet exemple entre "G488173" (ref grossiste) et "RS-RT4141" (ref fabriquant).
11 ajax network inspecteur.PNG
12 ajax parametres header.PNG
As tu des suggestions? Tu y vois plus clair de ton coté? Je l'exploite comment tout ça avec autoit? Tu me fais réver avec ton "full auto" ^^.

Bon week end :-)
Avatar du membre
Barthandelus
Niveau 4
Niveau 4
Messages : 53
Enregistré le : mer. 02 janv. 2019 14:34
Status : Hors ligne

Re: [..] Code source - inspecteur de page - Chrome

#9

Message par Barthandelus »

Hello,

Ici on vois clairement que la page retournant des résultats est https://xxx/nsearch/ajax/getSuggest_DEV ... cation&qi=

D'ailleurs, si tu regardes bien, cette page (getSuggest_DEV_cf.php) prends des arguments GET, notamment "q", qui contient potentiellement.. ta recherche !

L'objectif serait donc le suivant : Utiliser curl() en mettant en URL cette page + ses arguments (tester uniquement avec q pour voir s'il y a un différentiel) et récupérer le contenu dans une variable. curl() sert en gros à obtenir le code (interprété, toujours) de la page. Ensuite il te suffira de parser la réponse (la découper, prendre ce qui t'intéresses) à l'aide, à mon avis, de StringInStr(), StringMid() mais aussi _StringExplode(), je te laisse regarder les documentations à ce sujet :

https://www.autoitscript.fr/autoit3/doc ... gInStr.htm
https://www.autoitscript.fr/autoit3/doc ... ingMid.htm
https://www.autoitscript.fr/autoit3/doc ... xplode.htm

Concernant CURL, il existe des UDF, sinon, tu peux télécharger CURL ici : https://curl.haxx.se/
Puis le mettre dans le même dossier que ton programme .au3 et utiliser le code suivant (pour exemple) :

Local $url = "http://XXX/machinchose.php?q=ta_recherche"
Local $iPID = Run(@ScriptDir & "curl.exe -s "&$url, @ScriptDir, @SW_HIDE, $STDOUT_CHILD)
ProcessWaitClose($ca_iPID)
Local $ca_output = StdoutRead($ca_iPID)

If StringLen($ca_output) > 0 Then
    ; Faire le traitement via les fonctions que je t'ai montrer ci-dessous.
EndIf

ça sous entends cependant que tu n'as pas besoin d'être connecté sur le site pour faire une recherche, auquel cas il faudra en plus regarder du coté des COOKIES pour définir et maintenir une session active.

Actuellement, tu as toutes les armes pour mener à bien ton projet : bien entendu, ce sera tout de même encore un peu compliqué. Je t'invite maintenant à commencer à taper du code, te renseigner sur l'ensemble des données de ce poste, et de nous montrer un premier jet exemple.

Note : Tes termes de recherche (ex : RS-RT4141, si j'ai bien compris) devront soit être défini à l'avance (dans un Array puis faire une boucle ? Via une GUI ? A toi de voir !).
JulienBoul
Niveau 4
Niveau 4
Messages : 82
Enregistré le : ven. 04 déc. 2015 13:55
Status : Hors ligne

Re: [..] Code source - inspecteur de page - Chrome

#10

Message par JulienBoul »

Salut,

Alors là, génial ! En effet, lorsque je modifie uniquement la référence dans mon URL ->
Je trouve soit la référence grossiste, soit la référence fabriquant !
Me reste maintenant à savoir récupérer la string "
jQuery({"content":{"c":[{"w":"rs-rt4141","k":"657977"}],"a":[{"w":"RS-RT4141 BROSSE COMBINEE GROUPE SEB<br>#G488173","pic":"https:\/\/img.spares-accessories-shop-gmbh.de\/athumbs\/20\/e9\/20e98197ccef7cff5317f548025b2029.jpg","k":"2","nr":"G488173"}],"originalsuchbg":"RS-RT4141","mcache":false}})
Je peux même simplifier par
Ça tue ! C'est un peu comme quand tu fais de la magie sans savoir ce qui se passe, tu te sents un peu perdu, mais tellement puissant et excité en même temps ! Merci ! Et puis, je ne sais pas comment je peux m'imaginer ce que ça fait de faire de la magie... Enfin, tu comprends la sensation qui m'a envahi lol.

Je n'ai pas encore testé ton bout de code pour récupérer La réponse de la requête. J'ai d’abord teste avec un inetget (simple), mais j'imagine que comme ça n'est pas une page HTML, elle n'est pas générée en "dur" et ne peut donc pas être la réponse d'une requête à un serveur, car je n'ai même pas envoyé une requête... Enfin, j'pense que j'dois pas être loin de la vérité.

Je m'atèle prochainement à installer curl dans @scriptdir (c'est bien ça? J'ai peur de confondre avec le répertoire de autoit.exe)

Pour la suite, découper les réponses etc, je saurais faire. En tout cas, j'espère savoir trouver le temps demain, je suis vraiment pressé de trouver la solution avec ton aide, encore merci bcp.

Pardon pour la qualité de ma syntaxe, je suis à la bourre.
Bonne soirée.
Julien.
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..] Code source - inspecteur de page - Chrome

#11

Message par orax »

Pour récupérer les données qui t'intéresse, tu pourrais utiliser cet UDF par exemple (pas testé) : JSON UDF Library (fully RFC4627-compliant).
JulienBoul a écrit :Je n'ai pas encore testé ton bout de code pour récupérer La réponse de la requête. J'ai d’abord teste avec un inetget (simple), mais j'imagine que comme ça n'est pas une page HTML, elle n'est pas générée en "dur" et ne peut donc pas être la réponse d'une requête à un serveur, car je n'ai même pas envoyé une requête... Enfin, j'pense que j'dois pas être loin de la vérité.
Tu pourrais utiliser InetRead. Et tu envoies bien une requête (HTTP GET) au serveur quand tu lui demandes le contenu de .../nsearch/ajax/getSuggest_DEV_cf.php?q=RS-RT4141.
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
JulienBoul
Niveau 4
Niveau 4
Messages : 82
Enregistré le : ven. 04 déc. 2015 13:55
Status : Hors ligne

Re: [..] Code source - inspecteur de page - Chrome

#12

Message par JulienBoul »

Code : Tout sélectionner

Local $url = "https://XXX.com/nsearch/ajax/getSuggest_DEV_cf.php?callback=jQuery&q=CS-00118619"
Local $iPID = Run(@ScriptDir&"\curl-7.64.1-win64-mingw\bin\" & "curl.exe -s "&$url, @ScriptDir&"\curl-7.64.1-win64-mingw\bin\", @SW_HIDE, $STDOUT_CHILD)
ProcessWaitClose($iPID)
Local $ca_output = StdoutRead($iPID)
MsgBox ( "","",$iPID)

If StringLen($ca_output) > 0 Then
;MsgBox ( "","",$iPID)
EndIf
Bonjour à tous les deux. J'ai d'abord testé (manque de temps) la proposition de @Barthandelus en modifiant un peu le nom des variables (ton script en tant que tel ne tournais pas). J'espère que j'ai bien fait.
Du coup, ça tourne, et j'obtiens des résultats de recherche sous forme de chiffres $iPID= [2000<16000], de façon aléatoire, et toujours différents.
Je n'ai pas pris le temps de relire, mais je pense que je me suis embrouillé avec les variables. Je regarderai ça lundi si rien ne vous saute aux yeux d'ici là.

Orax, toujours sur tous les fronts, merci pour ta proposition, je regarde ça lundi.
J'ai regardé le lien pour JSON UDF Library, et je t'avoue que je ne comprend pas trop le sens de pourquoi ils veulent faire telle ou telle action. Je manque clairement de connaissance dans tout ce qui est programmations web, requêtes, bases de données etc... Pour autant, j'essaierai de choper quelques exemples et de les adapter à tâton, jusqu'ici ça m'a plutôt réussi.

Bon week end ensoleillé à tous !
Julien.
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..] Code source - inspecteur de page - Chrome

#13

Message par orax »

En fait, tu n'aurais pas besoin de l'UDF JSON. Tu devrais pouvoir récupérer la référence du produit assez simplement avec une expression régulière (StringRegExp).

Code : Tout sélectionner

#include <StringConstants.au3>
#include <InetConstants.au3>

Local $url = "https://example.com/nsearch/ajax/getSuggest_DEV_cf.php?callback=jQuery&q=CS-00118619"
Local $ca_output = InetRead($url, $INET_FORCERELOAD)
Local $aArray = StringRegExp(BinaryToString($ca_output), '"nr":"([^"]+)"', $STR_REGEXPARRAYGLOBALMATCH)
If IsArray($aArray) Then
	ConsoleWrite($aArray[0] & @CRLF)
EndIf
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
JulienBoul
Niveau 4
Niveau 4
Messages : 82
Enregistré le : ven. 04 déc. 2015 13:55
Status : Hors ligne

Re: [..] Code source - inspecteur de page - Chrome

#14

Message par JulienBoul »

Salut tous les deux, j'espère que vous avez passé un bon week end.

Merci pour ton bout de code Orax, je t'avoue que j'avais déjà testé de lire le code avec InetRead, mais je n'ai aucun retour de la requête envoyée, ce qui m'avait poussé à imaginer, dans un de mes post précédent, que c'était peut être nécessaire d'aller physiquement (en ouvrant une page du navigateur) sur la page pour qu'elle se génère.
En fait, lorsque je lance ton script, il tourne pendant X minutes, et ne retourne rien. J'ai mis un msgbox juste après avoir généré la variable $ca_output et il ne s'affiche pas. Ca n'est donc pas un problème de regex ou autre, mais simplement de code qui ne se "pompe" pas. J'ai l'impression que le script cherche à lire mais ne trouve pas ce qu'il cherche ou n'a pas les accès.
Ça n'est pas un soucis de cookies, car je me suis connecté au site juste avant (car si je n'ai pas un cookies actif, je n'ai pas accès à la base de données, ce qui est cohérent).

Comment est il possible que InetRead ne sache pas lire? Vous pensez qu'il est possible qu'ils aient mis une protection de type Anti-bot ou autre?

Merci de vos éclaircissements !
Julien.
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..] Code source - inspecteur de page - Chrome

#15

Message par orax »

InetRead retourne une chaîne binaire. Est-ce que tu as bien utilisé BinaryToString pour convertir la chaîne $ca_output ?

Code : Tout sélectionner

BinaryToString($ca_output)
Et il faudrait vérifier s'il InetRead retourne une erreur.

Code : Tout sélectionner

Local $ca_output = InetRead($url, $INET_FORCERELOAD)
ConsoleWrite(@error & @CRLF)
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
JulienBoul
Niveau 4
Niveau 4
Messages : 82
Enregistré le : ven. 04 déc. 2015 13:55
Status : Hors ligne

Re: [..] Code source - inspecteur de page - Chrome

#16

Message par JulienBoul »

#include <StringConstants.au3>
#include <InetConstants.au3>

Local $url = "https://XXX.com/nsearch/ajax/getSuggest_DEV_cf.php?callback=jQuery&q=CS-00118619"
Local $ca_output = InetRead($url, $INET_FORCERELOAD)
ConsoleWrite(@error & @CRLF)
Local $aArray = StringRegExp(BinaryToString($ca_output), '"nr":"([^"]+)"', $STR_REGEXPARRAYGLOBALMATCH)
If IsArray($aArray) Then
   ConsoleWrite($aArray[0] & @CRLF)
EndIf
Hello, oui, et j'ai testé, mais mon script reste bloqué dans une boucle infinie avec la fameuse ligne en bas de console "--> Press Ctrl+Alt+Break to Restart or Ctrl+Break to Stop"

Du coup je ctrl+Break pour stopper le script. 2 lignes se rajoutent -> >Process failed to respond; forcing abrupt termination...
>Exit code: 1 Time: 93.89

Rien de très parlant... Juste pour vérifier, mais on est bien d'accord sur les infos que je vous ai données, et sur le rendu visuel que cela produit sur mon navigateur chrome hein?
Capture.PNG
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..] Code source - inspecteur de page - Chrome

#17

Message par orax »

C'est quand même bizarre... Normalement, ce code devrait afficher ce qu'affiche le navigateur (jQuery({"content":{"c":[{"w":...).

Code : Tout sélectionner

Local $url = "https://......com/nsearch/ajax/getSuggest_DEV_cf.php?callback=jQuery&q=CS-00118619"
Local $ca_output = InetRead($url)
If @error Then
	ConsoleWriteError("Erreur InetRead : " & @error & @CRLF)
	Exit 1
EndIf
ConsoleWrite(BinaryToString($ca_output) & @CRLF)
Ça devrait marcher, sinon il faudrait essayer avec cURL, comme le proposait Barthandelus.
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
Barthandelus
Niveau 4
Niveau 4
Messages : 53
Enregistré le : mer. 02 janv. 2019 14:34
Status : Hors ligne

Re: [..] Code source - inspecteur de page - Chrome

#18

Message par Barthandelus »

Manque de temps, je n'ai pas pu passer sur le forum depuis ma dernière réponse.

Je suis content de voir que tu as effectuer des tests, et tu as énormément avancer. Effectivement, tu n'es vraiment plus loin de la solution et plusieurs chemins peuvent t'y mener. InetRead, Curl, autre..

Courage, tu n'es plus très loin du résultat.

Le code d'orax est fonctionnel (n'oubli pas d'y mettre les includes, évidemment) sur une interface AJAX (même si le retour attendu n'est pas du HTML il te sera renvoyer en RAW dans tout les cas). Je l'ai tester sur mes propres serveurs (de toute façon, en lisant le code, il était difficile de penser que ça ne pourrait pas marcher.). Aucune raison donc que ça ne fonctionne pas pour toi.

Attention cependant, si je ne dis pas de bêtises, InetRead() et son environnement n'ont pas de notion de cookie/session, tandis que CURL a la possibilité de le gérer (je dis peut être des bêtises, mais je n'ai rien trouver dans la doc à ce sujet). En d'autres termes, s'il est nécessaire de maintenir une connexion active (j'entends par là "connexion à un compte utilisateur sur le site"), a mon avis, c'est plus CURL qui devrait être utilisé.

Pour savoir lequel utiliser, c'est très simple : tu as besoin de te connecter avec un nom d'utilisateur / mot de passe pour effectuer une recherche ?
Si oui : CURL (sauf contre-indication des modérateurs AutoIt, à nouveau, je n'ai rien vu à ce sujet sur la doc, mais j'ai peut être simplement louper l'info).
Si non : InetRead() ou CURL, au choix.
JulienBoul
Niveau 4
Niveau 4
Messages : 82
Enregistré le : ven. 04 déc. 2015 13:55
Status : Hors ligne

Re: [..] Code source - inspecteur de page - Chrome

#19

Message par JulienBoul »

Hello les gars,

Arf, dure de trouver la motivation, j'ai l'impression de louper une étape ou de ne pas savoir vous communiquer les informations qui conviennent.
En tout cas merci de votre investissement et de vos investigations.

Alors, oui il faut login+mdp, c'est un site pro, et a mon avis y'a un cookies qui se stock sur le DD (ou dans le fichier cookies de chrome, d'après mes infos il fusionne tous les cookie dans un seul fichier) et qui permet de conserver une session active.

J'ai un peu cherché pour comprendre les instructions qui étaient notées dans le cookie, mais rien de bien intéressant à mes yeux.

Mais c'est surtout pour curl que je suis un peu pommé... Pis je trouve pas ça super pratique.
En fait, l'objectif de mon script est de déployer un *.exe autoexecutable pour les collègues, donc s'il faut que je leur installe en plus curl, que je configure chaque poste etc, j'ai pas fini.
Au delà de ça, je comprend très peu la programmation de ce logiciel. Tu vois quand t'as proposé un exemple de script, ben je ne suis même pas sur d'avoir su l'adapter, car je ne l'ai pas compris.

Quoi qu'il en soit, pour ce qui est du script autoit, je pense être dans les clous. Pour l'include, voici mon code complet, en manque-t-il?

#include <StringConstants.au3>

Local $url = "https://XXX.com/nsearch/ajax/getSuggest_DEV_cf.php?callback=jQuery&q=CS-00118619"
Local $ca_output = InetRead($url)
If @error Then
   ConsoleWriteError("Erreur InetRead : " & @error & @CRLF)
   Exit 1
EndIf
ConsoleWrite(BinaryToString($ca_output) & @CRLF)
Edit: modification de l'url dans le code.
Modifié en dernier par JulienBoul le mar. 16 avr. 2019 16:16, modifié 1 fois.
Avatar du membre
Barthandelus
Niveau 4
Niveau 4
Messages : 53
Enregistré le : mer. 02 janv. 2019 14:34
Status : Hors ligne

Re: [..] Code source - inspecteur de page - Chrome

#20

Message par Barthandelus »

Hello,

Alors plusieurs points : curl, une fois télécharger, peut être positionner en "stand alone" dans un dossier. Ce qui veut dire que tu peux l'embarquer dans ton code AU3 et que tu n'auras pas besoin de l'installer. Exemple d'architecture de ton application :

./Program Files/ton_programme/ton_script.au3 (ou .exe)
./Program Files/ton_programme/curl/curl.exe

Comme une installation de logiciel normal, tu n'auras ensuite qu'à copier/coller le dossier complet.

Ensuite, oui, ton code est bon pour obtenir les informations dans la console. Tu peux mettre le retour dans une variable pour commencer à la parser (= récupérer les zones qui t'intéresses).

Enfin, si tu as besoin de te connecter au site pour le faire fonctionner, et jusqu'à preuve du contraire, InetRead() ne te conviendra pas : il faudra utiliser curl et son option "--cookie" (si je ne dis pas de bêtises).

Pour finir, tu as cacher le lien du site tout le long du sujet mais tu le mets en visible dans ton dernier code, je te le dis juste au cas où. :wink:

Pour info, à la ligne :

Local $url = "https://xxxx/nsearch/ajax/getSuggest_DEV_cf.php?callback=jQuery&q=CS-00118619"

Tu peux faire par exemple :

; A placer dans une boucle.
Local $url = "https://xxxx/nsearch/ajax/getSuggest_DEV_cf.php?callback=jQuery&q="&$var[$i];

Ou $var serait un Array (Tableau, moi personnellement j'utilise l'objet Dictionnary dans ce type de cas) et $i un compteur que tu incrémenterais. Comme ça, tu requêtes tout automatiquement.

Question simple : Quand tu exécutes le code ci-dessous (je ne peux pas le tester, malheureusement, actuellement), tu as quoi comme retour ? Pour moi, ton projet est totalement réalisable. N'abandonnes pas. :wink:
Répondre