simula lo scrolling infinito in c # per ottenere l'html completo di una pagina

c# html-agility-pack infinite-scroll

Domanda

Ci sono molti siti che usano questo (imo) fastidioso stile "scrolling infinito". Esempi di questo sono siti come tumblr, twitter, 9gag, ecc.

Recentemente ho provato a scansionare alcune foto di questi siti in modo programmatico con HtmlAgilityPack. come questo:

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();

Funziona bene, ma quando ho provato a caricare l'HTML da determinati siti, ho notato che ho recuperato solo una piccola quantità di contenuti (diciamo i primi 10 "post" o "immagini", o qualsiasi altra cosa ..) Ciò ha reso mi chiedo se sarebbe possibile simulare lo "scorrimento verso il basso" della pagina in c #.

Questo non è solo il caso in cui carico l'html in modo programmatico, quando vado semplicemente su siti come tumblr, e controllo firebug o semplicemente "view source", mi aspettavo che tutto il contenuto fosse lì da qualche parte, ma molto altro sembra essere nascosto / inserito con javascript. Solo il contenuto che è effettivamente visibile sul mio schermo è presente nel codice sorgente HTML.

Quindi le mie domande sono: è possibile simulare lo scrolling infinito verso una pagina e il caricamento in quell'HTML con c # (preferibilmente)?

(So ​​che posso usare le API per tumblr e twitter, ma sto solo provando a divertirmi un po 'con HtmlAgilityPack)

Risposta popolare

Non c'è modo di farlo in modo affidabile per tutti questi siti Web in un'unica soluzione, a meno di incorporare un browser Web (che in genere non funziona in ambienti senza headless).

Quello che dovresti considerare, invece, è guardare il codice JavaScript del sito per vedere quali query AJAX vengono utilizzate per recuperare il contenuto mentre l'utente scorre verso il basso.

In alternativa, utilizza un debugger web nel tuo browser (come quello incluso in Chrome). Questi debugger di solito hanno un pannello "rete" che puoi utilizzare per ispezionare le richieste AJAX eseguite dalla pagina. L'esame di queste richieste mentre scorri verso il basso dovrebbe fornire informazioni sufficienti per scrivere codice C # che simula tali richieste.

Dovrai quindi analizzare la risposta da tali richieste come qualsiasi tipo di contenuto fornito da una specifica API, che probabilmente sarà JSON o XML, ma quasi certamente non HTML. (Potrebbe essere comunque meglio per te, dal momento che ti farà risparmiare l'analisi di HTML orientato alla visualizzazione, mentre l'API AJAX ti fornirà oggetti dati che dovrebbero essere molto più facili da usare.)




Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché