J'essaie de créer un grattoir Web Instagram de base, à la fois des images d'inspiration artistique et juste en général, j'essaie d'améliorer mes connaissances et mon expérience en programmation.

Actuellement, le problème que j'ai est que Casper / Phantomjs ne peut pas détecter des images de plus haute résolution à partir du srcset, et je ne peux pas trouver un moyen de contourner cela. Instagram a ses srcsets fournissent des images 640x640, 750x750 et 1080x1080. Je voudrais évidemment récupérer le 1080, mais il semble indétectable par n'importe quelle méthode que j'ai essayée jusqu'à présent. Définir une fenêtre plus grande ne fait rien, et je ne peux pas récupérer l'intégralité du jeu de sources en récupérant simplement le code HTML et en le fractionnant là où j'en ai besoin. Et pour autant que je sache, il n'y a pas d'autre moyen de récupérer ladite image que de la récupérer à partir de ce srcset.

Éditer

Comme on m'a demandé plus de détails, c'est parti. Voici le code que j'ai utilisé pour obtenir les attributs de la page:

function getImages() {
var scripts = document.querySelectorAll('._2di5p');
return Array.prototype.map.call(scripts, function (e) {
    return e.getAttribute('src');
});
}

Ensuite, je fais la norme:

casper.waitForSelector('div._4rbun', function() {
  this.echo('...found selector ...try getting image srcs now...');
    imagesArray = this.evaluate(getImages);
    imagesArray.forEach(function (item) {
    console.log(item);

Cependant, tout ce qui est renvoyé est la résolution la plus basse du srcset. En utilisant cette URL, par exemple, (https://www.instagram.com / p / BhWS4csAIPS /? pris-par = kasabianofficial) tout ce qui est retourné est https://instagram.flcy1-1.fna.fbcdn.net/vp/b282bb23f82318697f0b9b85279ab32e/5B5CE6F2/t51.2885-15/s640x640/sh0.08/e35/29740443_908390472665088_4690461645690896384_n.jpg, qui est l'image la plus basse résolution (640x640) dans le srcset. Idéalement, j'aimerais récupérer le https://instagram.flcy1-1.fna.fbcdn.net/vp/8d20f803e1cb06e394ac91383fd9a462/5B5C9093/t51.2885-15/e35/29740443_908390472665088_4690461645690896384_n.jpg qui est l'image 1080x1080 dans le srcset. Mais je ne peux pas. Il n'y a aucun moyen d'obtenir cet article pour autant que je sache. C'est complètement caché.

0
Devildude4427 12 avril 2018 à 22:07

3 réponses

Meilleure réponse

Solution: Ma solution était donc d'utiliser slimerjs. Si j'exécute le fichier js via "casperjs --engine = slimerjs fileName.js", je peux récupérer les srcsets dans leur intégralité. Donc, si je dis, utilisez ce code:

function getImgSrc() {
  var scripts = document.querySelectorAll("._2di5p");
  return Array.prototype.map.call(scripts, function (e) {
      return e.getAttribute("srcset");
  });
}

Sur cette URL (https://www.instagram.com/p/BhWS4csAIPS /? take-by = kasabianofficial) Je vais recevoir (https://instagram.flcy1-1.fna.fbcdn.net/vp/b282bb23f82318697f0b6b85/986fab6/6 08 / e35 / 29740443_908390472665088_4690461645690896384_n.jpg 640w, https://instagram.flcy1-1.fna.fbcdn.net/vp/b4eebf94247af02c63d20320f65358/sb5t50 /29740443_908390472665088_4690461645690896384_n.jpg 750w,

Devildude4427 22 avril 2018 à 02:19

J'ai trouvé un moyen de le contourner dans le cas d'Instagram. Instagram met l'image source dans une balise META dans la tête. Donc, en utilisant le code que je vais coller ci-dessous, vous pouvez appeler toutes les balises META, puis trier laquelle est l'image source en vérifiant si "og: image" est récupéré.

function getImages() {
    var scripts = document.querySelectorAll('meta[content]');
    return Array.prototype.map.call(scripts, function (e) {
        return e.getAttribute('property') + " " + e.getAttribute('content');
    });
}

Et c'est la façon de trier les balises META en n'ayant que l'image d'origine dans sa résolution native.

this.echo('...found selector ...try getting image srcs now...');
imagesArray = this.evaluate(getImages);
imagesArray.forEach(function (item) {
    if (typeof item == "string" && item.indexOf('og:image') > -1) {

Edit: Malheureusement, cela ne fonctionne que pour les publications à image unique sur Instagram (le site que j'essaie de gratter), donc cela ne me fait malheureusement pas de bruit. Les valeurs dans les balises META ne changent pas même si vous chargez l'image suivante dans le message. Je laisse cela de côté au cas où quelqu'un d'autre pourrait l'utiliser, mais ce n'est pas idéal pour mon propre cas d'utilisation.

0
Devildude4427 14 avril 2018 à 16:25