Il problema
Questo articolo è nato per discutere di come è stato affrontato e risolto il problema di automatizzare la compilazione di form in grandi quantità in maniera rapida. Nello specifico, andava completato un processo su un portale pubblico in cui bisogna compilare più caselle di testo, scrivendo varie informazioni. Di seguito alcune immagini riepilogative che mostrano come sono strutturati i form da compilare:
1. Form di ricerca di una particolare pratica

2. Una volta individuata la pratica poi va completata, completando il seguente form

Una volta effettuata la compilazione di questi form viene quindi inviata la richiesta e si procede a scaricare un file pdf riepilogativo dell’operazione effettuata. Il business ha richiesto di automatizzare questo processo in quanto ogni operatore impiegava, più o meno, 8 minuti a compilazione di form. Tenendo conto che in alcuni periodi potevano arrivare oltre 150 richieste, risultava quindi essere molto tedioso e, soprattutto, noioso dover fare queste operazioni manualmente.
Facciamo due calcoli:
8 * 150 = 1.200; convertito in ore 1200/60 = 20 ore!
Ben 20 ore dedicate a fare queste operazioni macchinose e ripetitive.
La soluzione adottata
Abbiamo quindi pensato a varie soluzioni per affrontare il problema, e la scelta è ricaduta su utilizzare Playwright, per automatizzare la compilazione dei vari form, per effettuare la richiesta e scaricare il pdf riepilogativo finale, poi le Step Function di AWS per poter orchestrare in maniera semplice le varie operazioni da fare e gestire i singoli stati della lavorazione in cui ci troviamo.
Parliamo prima del perché sono state scelte le Step Function di AWS.
Le Step Function sono state una scelta naturale in quanto avevamo necessità di poter orchestrare, in maniera semplice, serie di task e poter definire logiche di retry in maniera rapida.
Di seguito possiamo vedere il diagramma della Step Function sviluppata:

Il diagramma riassume il flusso dei seguenti step:
- input e validazione file Excel
- gestione singole pratiche, in parallelo, tramite automazione browser
- output Excel + PDF in archivio.
Analizziamoli uno per uno.
1. Input e validazione del fil Excel
Questo compito prevede l'analisi del file Excel fornito dagli operatori, in cui ogni riga rappresenta una singola richiesta da elaborare. Questo file Excel contiene le informazioni necessarie per compilare il primo modulo al fine di identificare la specifica richiesta da elaborare; il file Excel può contenere più di una richiesta — persino oltre 100! Se il file Excel di input è conforme al modello specificato e i dati inseriti sono corretti, possiamo procedere all'elaborazione di ogni singola richiesta elencata nel file Excel e iniziare a compilare i due moduli. In caso contrario, verrà generato un file di riepilogo che indica i problemi riscontrati nel file Excel di input e il flusso di lavoro terminerà.
2. Gestione singole pratiche, in parallelo, tramite automazione browser
Questo compito prevede la compilazione di moduli, che può essere considerata il "cuore" dell'automazione. Poiché ogni richiesta è indipendente dalle altre, ha senso elaborarle in parallelo; pertanto, viene utilizzato un Map State per gestire in parallelo ogni singola riga del file Excel (il dataset precedentemente convalidato). La concorrenza è stata impostata a 6 per prevenire potenziali blocchi da parte del portale. L'automazione viene eseguita utilizzando Playwright, che gira in modalità headless — ovvero senza interfaccia grafica — e interagisce con i moduli compilando, tramite codice, tutti i dati necessari nei campi di testo e nelle caselle di controllo di interesse.
Si noti che per utilizzare Playwright in una Lambda Function è stato necessario scrivere un Dockerfile personalizzato, poiché quello fornito da Microsoft — oltre a contenere molti più file (con conseguenti container più pesanti e cold start più lunghi) — non fornisce un'integrazione nativa con Lambda. La scrittura di un Dockerfile personalizzato ci ha permesso di ottimizzare l'immagine rimuovendo i componenti non necessari, come WebKit e Firefox, tramite build multi-stadio (multi-stage builds), risparmiando spazio sull'immagine finale, e di aggiungere poi awslambdaric, rendendo l'immagine compatibile con Lambda. Tutto questo ha portato a una riduzione del 23% delle dimensioni dell'immagine Docker.
3. Output Excel + PDF in archivio
In questo compito, i risultati ottenuti verranno aggregati. Elaborando ogni singola richiesta, i risultati saranno aggregati in un unico file Excel, in cui ogni riga rappresenta il risultato ottenuto dall'elaborazione di quella specifica richiesta. Insieme a questo file Excel, verranno scaricati anche tutti i file PDF generati da ciascuna fase di elaborazione della richiesta eseguita nel compito precedente, e il tutto sarà compresso in un unico archivio che verrà fornito al front-end come output della richiesta effettuata dall'operatore.
Perchè Playwright?
Ora però ci poniamo un’altra domanda: perchè utilizzare Playwright invece di un qualsiasi altro strumento di automazione Web?
I motivi sono molteplici:
