Comment obtenir des URL sur une page avec HTMLAgilityPack, lorsque la source ne contient pas les URL?

c# html html-agility-pack

Question

J'essaie de supprimer les URL de la base de connaissances à partir de cette page: https://support.microsoft.com/en-us/kb/894199

Sur la page, il existe des URL telles que: https://support.microsoft.com/kb/2976978

Si vous ouvrez les outils de développement dans Chrome, cela indique que les données sont contenues comme suit:

<div class="indent">
<a id="kb-link-142" href="https://support.microsoft.com/kb/2976978" target="_self">https://support.microsoft.com/kb/2976978</a>
</div>

Maintenant, basé sur le code HTML ci-dessus, je pense que je devrais être capable de gratter les URL de l'élément href comme ceci:

foreach(HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]"))
{
   list.Add(link.GetAttributeValue("href", string.Empty));
}

Le problème que je rencontre cependant est que lorsque je télécharge HTMLSource, le contenu change. Ce que je veux dire, c'est que même si les outils de développement affichent le code HTML ci-dessus disponible sur la page, si vous cliquez avec le bouton droit de la souris sur la page et choisissez Afficher le code source, le code HTML affiché à ce stade est totalement différent et ne contient aucune des URL. que la page rendue affiche.

Ma théorie est qu'il existe une sorte de référence de fichier où le HTML charge un fichier quelque part et le fichier contient les détails de la page rendue. Alors, comment puis-je utiliser HTMLAgilityPack pour obtenir les URL qui figurent sur la page rendue, car la source ne semble pas les contenir?

Aussi - je me rends compte que ma question Titre peut être très déroutant. S'il y a un terme technique pour ce que cette page est en train de faire / comment ça marche, faites le moi savoir et je pourrai mettre à jour le titre afin qu'il soit plus logique et que d'autres puissent le rechercher plus tard.

Réponse populaire

Ok, je vois le problème maintenant. Cette page utilise les directives et les liaisons Angularjs, et les hrefs se chargent après le chargement de la page. La page que nous obtenons est avant toute analyse syntaxique / exécution de l'agent du navigateur Web. Cela signifie que les modifications apportées à la page après toute modification de manupulation / javascript ou ajax DOM ne seront pas incluses dans la réponse HtmlDocument. Je pense que la meilleure façon de s'y prendre serait de faire comme une requête de navigateur Web, de laisser le javascript et l'ajax s'exécuter complètement et d'aller chercher le contenu comme indiqué ici . J'espère que cela t'aides!



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