Utenti aggiungere più contenuto alla pagina (da date precedenti) facendo clic l'elemento <div onclick="control.moreData()" id="moreLink">More...</div>
in fondo alla pagina.
Quindi, per ottenere il contenuto desiderato, è possibile utilizzare Selenium per fare clic sull'elemento id="moreLink"
o eseguire alcuni JavaScript per chiamare control.moreData();
in un ciclo.
Ad esempio, se si desidera ottenere tutto il contenuto fino a venerdì 15 febbraio 2013 (sembra che esista una stringa di questo formato per ogni data, per il contenuto caricato) il proprio python potrebbe essere simile al seguente:
content = browser.page_source
desired_content_is_loaded = false;
while (desired_content_is_loaded == false):
if not "Friday, February 15, 2013" in content:
sel.run_script("control.moreData();")
content = browser.page_source
else:
desired_content_is_loaded = true;
EDIT:
Se si disattiva JavaScript nel browser e ricaricare la pagina, vedrete che non v'è alcun contenuto "tendenze" a tutti. Quello che mi dice, è che quegli elementi sono caricati dinamicamente. Significa che non fanno parte del documento HTML che viene scaricato quando apri la pagina. Selenium's .get() attende il caricamento del documento HTML, ma non per completare tutto il JS. Non si sa se il JS asincrono verrà completato prima o dopo qualsiasi altro evento. Completa quando è pronto e potrebbe essere diverso ogni volta. Ciò spiegherebbe perché a volte potresti ottenere tutti, alcuni o nessuno di questi contenuti quando chiami browser.page_source
perché dipende dalla velocità con cui JS async funziona in quel momento.
Quindi, dopo aver aperto la pagina, è possibile provare ad attendere alcuni secondi prima di ottenere l'origine, fornendo il JS che carica il tempo di completamento del contenuto.
browser.get(googleURL)
time.sleep(3)
content = browser.page_source
fonte
2013-05-17 23:13:58
Eventuali motivi specifici per l'utilizzo di webdrivers tramite selenio per questo? – Torxed
@Torxed - Sospetto che sia a causa del contenuto dinamico/gestione javascript ... – root
sì ho provato urllib2 ma non ha funzionato a causa del contenuto dinamico/javascript – user2392965