Come far funzionare un webdriver in modo affidabile in selenio?

5

Ho avuto abbastanza tempo per farlo funzionare in modo affidabile per centinaia di migliaia di termini e potenzialmente milioni di pagine per fonte e ETL i dati risultanti in un database in modo automatico. Ho bisogno di eseguire le attività in Mesos su un programma ripetuto. Le lingue richieste sono Scala / Java.

Per l'acquisizione, ho bisogno di analizzare javascript, eseguire il rendering dei dati da ajax, lavorare con i cookie di tracciamento; ecc. al fine di raschiare i siti. Ho lavorato anche a uno strumento open source per fare questo. Ho scoperto e creato un'API estremamente semplice che circonda Selenium per questa attività con una configurazione serializzabile per la distribuzione. Lo strumento è plug and play per un webdriver.

Tuttavia, le scansioni si trovano costantemente nei guai perché si bloccano sempre nonostante siano isolate abbastanza bene e rimosse l'una dall'altra (specificando le posizioni della cache, riducendo al minimo le dimensioni della cache, non scaricando le immagini, ecc.).

Gli errori variano da phantomjs che restituisce un errore di pulizia e non riesce a continuare a bloccarsi in Chrome Driver nonostante non esaurisca la memoria secondo VisualVM. Infatti, l'utilizzo della memoria più elevato è stato del 25% e l'utilizzo della CPU al 50% utilizzando 3-5 singoli processi figlio.

Devo eseguire ogni termine in un contenitore? Come rendere affidabile il driver Web per un periodo di settimane o mesi? Esiste un'alternativa altrettanto generica?

    
posta user3916597 19.10.2016 - 21:29
fonte

2 risposte

1

Questo potrebbe non essere il tipo di risposta più soddisfacente, ma il fatto è che i browser Web non sono costruiti e testati con l'aspettativa che verranno eseguiti continuamente per settimane o mesi, mentre recuperano centinaia di migliaia di pagine.

Mentre gli sviluppatori di browser ovviamente fanno del loro meglio per far funzionare il loro software in modo affidabile durante le lunghe sessioni di navigazione, i problemi che appaiono solo in casi di utilizzo estremi difficilmente avranno il massimo livello di attenzione.

Quindi, prima di tutto, prova a riciclare i processi del browser su base regolare. Dopo ogni migliaia di pagine recuperate potrebbe essere un buon punto di partenza.

Il secondo più importante, prova diversi tipi di browser. Forse Chrome / Chromium / PhantomJS non è attualmente il tipo di browser più stabile per il tuo caso d'uso. (Al momento della stesura di questo documento, PhantomJS non è più in fase di sviluppo attivo.) Un grande vantaggio dell'utilizzo di Selenium è che sono supportati molti diversi tipi di browser. Prova Firefox e vedi se le prestazioni sono migliori. O se la piattaforma lo supporta, prova Edge o Safari.

In terzo luogo, assicurati che le situazioni inaspettate siano gestite in modi che non consumano troppe risorse. Ad esempio, se si incontrano collegamenti a file PDF, documenti scaricabili, ecc. Durante lo scraping, o se si aprono finestre popup, nuove schede o finestre di dialogo. Alcuni siti Web si collegano per stampare versioni di pagine che aprono automaticamente una finestra di dialogo di stampa.

    
risposta data 05.12.2018 - 17:58
fonte
0

La maggior parte dei siti Web non richiede di posizionare un intero browser e un framework di automazione per aggirarli; fare così marshals un sacco di macchinari che semplicemente non è necessario, e introduce molta complessità che riduce l'affidabilità complessiva del sistema.

Per esempi su come scrivere raschietti che sono più leggeri e più affidabili, un'occhiata a Jaunt: link

    
risposta data 19.10.2016 - 22:18
fonte

Leggi altre domande sui tag