Wie erhalte ich URLs auf einer Seite mit HTMLAgilityPack, wenn die Quelle die URLs nicht enthält?

c# html html-agility-pack

Frage

Ich versuche, die KB-URLs von dieser Seite zu entfernen: https://support.microsoft.com/en-us/kb/894199

Auf der Seite befinden sich URLs wie: https://support.microsoft.com/kb/2976978

Wenn Sie die Entwicklertools in Chrome öffnen, wird angezeigt, dass die Daten wie folgt enthalten sind:

<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>

Nun, basierend auf dem obigen HTML, glaube ich, dass ich in der Lage sein sollte, die URLs vom href-Element wie folgt zu scrappen:

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

Das Problem, auf das ich stoße, ist, dass der Inhalt sich ändert, wenn ich die HTMLSource herunterlade. Was ich meine, ist, dass, obwohl die Developer Tools den oben auf der Seite verfügbaren HTML zeigen, wenn Sie mit der rechten Maustaste auf die Seite klicken und Quelltext anzeigen auswählen, der HTML-Code an diesem Punkt völlig anders ist und keine der URLs enthält dass die gerenderte Seite angezeigt wird.

Meine Theorie ist, dass es eine Art von Dateiverweis gibt, bei der der HTML-Code eine Datei irgendwo lädt und die Datei die Details der gerenderten Seite enthält. Wie kann ich HTMLAgilityPack verwenden, um die URLs zu erhalten, die sich auf der gerenderten Seite befinden, da die Quelle diese nicht zu enthalten scheint?

Auch - ich realisiere meine Frage Titel kann wirklich verwirrend sein. Wenn es einen technischen Begriff dafür gibt, was diese Seite tut / wie es funktioniert, lassen Sie es mich wissen und ich kann den Titel aktualisieren, damit er logischer ist und andere ihn in der Zukunft durchsuchen können.

Beliebte Antwort

Okay, ich sehe das Problem jetzt. Diese Seite verwendet Angularjs-Direktiven und -Bindungen, und die hrefs werden nach dem Laden der Seite geladen. Die Seite, die wir bekommen, ist vor dem Parsen / Ausführen wie vom Web-Browser-Agenten. Das bedeutet, dass die Änderungen auf der Seite nach einer DOM-Manipulation / JavaScript- oder Ajax-Änderung nicht in der HtmlDocument-Antwort enthalten sind. Ich denke, der Weg, dies zu tun, wäre, wie eine Web-Browser-Anfrage zu tun, lassen Sie das Javascript und Ajax vollständig ausführen und holen Sie den Inhalt wie hier empfohlen. Hoffe das hilft!




Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum