Ogg. Atm Sto usando Selenium e Python, ma lo stesso vale per qualsiasi altra soluzione di scraping.
Mi chiedo:
- quali delle opzioni descritte di seguito sono ottimali / consigliate / best practice
- se esistono soluzioni / librerie helper esistenti, quali parole chiave dovrei cercarle.
Per rimanere obiettivi, "ottimali / consigliati / migliori pratiche" significa "ampiamente utilizzati e / o promossi / approvati da progetti di alto profilo nella nicchia".
Non sono riuscito a trovare materiale correlato al Selenio o di carattere generale su questo argomento dopo aver trascorso circa un giorno di ricerca in rete, il che probabilmente significa che mi mancano alcune parti critiche di informazioni.
Le operazioni di base durante lo scraping sono:
- ricerca dell'elemento (dal selettore CSS / XPath e / o a mano per cose di cui non sono capaci)
- interagendo con un elemento (inserisci testo, fai clic)
- leggi i dati degli elementi
E la catena di chiamate va così:
(Test code ->) User code -> Framework (selenium) -> Browser (web driver) -> Site
Quindi qui ci sono 3 hop che potrei prendere in giro. Ognuno pone sfide:
- Scherza il sito: avvia un server HTTP locale e indirizza il browser lì
- Devono reimplementare l'interfaccia del sito raschiato, nelle tecnologie web
- Scherza il browser (ad esempio, popola HtmlUnit (un motore di ricerca in-process) con l'HTML predefinito nei momenti appropriati)
- molto più semplice, ma ancora bisogno di emulare transizioni di stato / reazioni di azione in qualche modo
- Scherzi le chiamate del framework
- Il più fedele alla filosofia di test delle unità, il meno lavoro
- Sono tuttavia preoccupato che sia troppo restrittivo. Per esempio. Posso trovare lo stesso elemento con vari mezzi. Un oggetto fittizio può accettare solo una linea d'azione molto specifica in quanto manca la sofisticazione ad es. controlla se qualche altro selettore produce lo stesso risultato.
Ci sono anche due opzioni per il contenuto da fornire -
- fornire il contenuto originale del sito che ha prodotto per una query di prova, compilandolo in un pacchetto di ordinamento o autonomo
- laborioso e soggetto a errori o
- fornisce il minimo indispensabile per soddisfare l'algoritmo testato
- molto più semplice ma fallirebbe per altri possibili algoritmi che avrebbero avuto successo con il sito reale
Un'ultima preoccupazione è il fatto che un sito sia effettivamente una macchina a stati. Non sono sicuro che sarà più utile:
- implementa la macchina a stati completa, probabilmente come una sorta di specifica, e imposta / controlla i suoi stati nei test
- molto laborioso senza una sorta di libreria che riduce il lavoro a scrivere una specifica formale; o
- convalida semplicemente le sequenze di azioni
- che non sembra effettivamente testare il codice contro qualcosa - semplicemente ribadisce ciò che il codice fa
Aggiornamento per rispondere a una preoccupazione espressa:
Sto raschiando un sito di terze parti, che può cambiare e senza preavviso un giorno. Quindi, sto bene con i test contro "l'interfaccia del sito come era al momento della scrittura" - per verificare rapidamente se un cambio di codice ha rotto la logica interna del raschiatore.