simuler un défilement infini en c # pour obtenir le code HTML complet d'une page

c# html-agility-pack infinite-scroll

Question

Beaucoup de sites utilisent ce style (imo) agaçant de "défilement infini". Des exemples de ceci sont des sites comme tumblr, twitter, 9gag, etc.

J'ai récemment essayé de gratter quelques images de ces sites par programmation avec HtmlAgilityPack. comme ça:

HtmlWeb web = new HtmlWeb();  
HtmlDocument doc = web.Load(url);
var primary = doc.DocumentNode.SelectNodes("//img[@class='badge-item-img']");
var picstring = primary.Select(r => r.GetAttributeValue("src", null)).FirstOrDefault();

Cela fonctionne bien, mais lorsque j'ai essayé de charger du code HTML à partir de certains sites, j'ai remarqué que je ne récupérais qu'une petite quantité de contenu (disons les 10 premiers "posts" ou "images", ou peu importe ..). Je me demande s’il serait possible de simuler le "défilement vers le bas" de la page en c #.

Ce n'est pas simplement le cas lorsque je charge le code HTML par programme, lorsque je visite simplement des sites comme tumblr, et que je vérifie firebug ou tout simplement "Afficher le code source", je m'attendais à ce que tout le contenu soit présent quelque part, mais beaucoup semble être caché / inséré avec javascript. Seul le contenu réellement visible sur mon écran est présent dans la source HTML.

Ma question est donc la suivante: est-il possible de simuler le défilement infini d’une page et le chargement dans ce code HTML avec c # (de préférence)?

(Je sais que je peux utiliser les API pour tumblr et twitter, mais j'essaie juste de m'amuser avec le hacking avec HtmlAgilityPack)

Réponse populaire

Il n’existe aucun moyen de le faire de manière fiable pour tous ces sites Web en un seul coup, à moins d’intégrer un navigateur Web (qui ne fonctionnera généralement pas dans des environnements sans tête).

Vous devriez plutôt envisager de consulter le code JavaScript du site afin de voir quelles requêtes AJAX sont utilisées pour extraire du contenu lorsque l'utilisateur fait défiler l'écran vers le bas.

Vous pouvez également utiliser un débogueur Web dans votre navigateur (tel que celui inclus dans Chrome). Ces débogueurs ont généralement un volet "réseau" que vous pouvez utiliser pour inspecter les requêtes AJAX effectuées par la page. Le fait de regarder ces requêtes à mesure que vous faites défiler l'écran devrait vous donner suffisamment d'informations pour écrire un code C # simulant ces requêtes.

Vous devrez ensuite analyser la réponse à partir de ces demandes comme le type de contenu fourni par une API particulière, qui sera probablement JSON ou XML, mais presque certainement pas HTML. (Cela peut être préférable pour vous, car cela vous évitera d'avoir à analyser du code HTML orienté affichage, alors que l'API AJAX vous donnera des objets de données qui devraient être beaucoup plus faciles à utiliser.)




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi