Aide avec la fonction importxml

Bonjour, j'ai découvert ce forum par hasard car je voulais trouver un moyen d'importer certaines données d'un site web vers une page excel. Avec des recherches plus approfondies j'ai découvert que c'était plus facile de faire ça grâce à la fonction importxml de google sheets.

Mon problème est le suivant: je voudrais pouvoir mettre sur mon fichier sheet les stocks restants de certains articles sur aliexpress.

Donc admettons que je veuilles savoir les stocks de cet article:

image

Sur le site je fais inspecter l'élément, je passe ma souris sur "x unités disponibles" je fais copier xpath.

je mets toutes les infos sur mes cellules et à la fin j'ai une erreur: le contenu importé est vide

image

Je ne comprends pas ce que je fais mal, c'est pourtant sensé être simple...

Merci d'avance pour vos réponses j'espère qu'on pourra m'aider ici :')

PS : je ne pouvais pas envoyer le lien de l'article j'espère que ce ne sera pas dérangeant pour vous

Bonjour,

  • Soit les informations du site sont construites après chargement du code source via javascript sur le poste utilisateur (soit à partir de données organisées en json dans le code source, soit par appel asynchrone ajax)
  • Soit le site détecte celui qui effectue la requête et bloque

Dans le cas d'Aliexpress, on se trouve dans le premier cas avec un script

    <script>
                                window.runParams = {

#########################

};
    </script>

Pour récupérer le contenu, on peut faire

var txt = UrlFetchApp.fetch(url).getContentText().split('<script>')[9].split('</script>')[0]

et ensuite parser le json ...

Mais on ne peut pas en effet utiliser les fonctions natives de Google Sheets comme importxml, importhtml

J'ai continué à explorer le site, on peut trouver la quantité disponible comme suit

function totalAvailQuantity(){
  var url = 'https://fr.aliexpress.com/item/1005002861432036.html'
  var jsonString = UrlFetchApp.fetch(url).getContentText().split('<script>')[9].split('</script>')[0].replace(/(\r\n|\n|\r|\t|  )/gm, "") 
  var window={}
  var data = eval(jsonString)
  console.log(data.data.actionModule.totalAvailQuantity)
}

au final, ne pouvant utiliser importxml, on se retrouve dans la même situation qu'excel, sauf que Google App Script étant basé sur du javascript, la lecture du json est beaucoup plus aisée.

Merci infiniment !

J'ai rajouté des éléments pour pouvoir écrire le résultat sur une certaine cellule.

image

Et es ce que tu sais comment je pourrai faire pour avoir le stock de chaque variante d'un article (genre la couleur) ? Merci encore :D

Dans le cas traité je n'ia pas vu de variantes. As-tu un exemple ? mets l'url en utilisant la balise </> au dessus du cadre de réponse, cela doit fonctionner.

admettons ces écouteurs:

https://fr. aliexpress. com/item/1005004195043507.html

il faut détailler les data.data.skuModule.skuPriceList[x].skuVal.

Quantités disponibles par variante

mettre =variantes(url) dans une cellule

function variantes(url) {
  var num = 9;
  var jsonString = UrlFetchApp.fetch(url).getContentText().split('<script>')[num].split('</script>')[0].replace(/(\r\n|\n|\r|\t|  )/gm, "")
  var window = {} // indispensable car l'extrait commence par window.
  var data = eval(jsonString)
  let result = [];
  data.data.skuModule.skuPriceList.forEach(e => result.push([e.skuAttr,e.skuVal.availQuantity]))
  return result
}

ça fonctionne à merveille ! en te remerciant !

Rechercher des sujets similaires à "aide fonction importxml"