Panoramica
Il linguaggio di scripting di JuliuS è un JavaScript esteso con direttive speciali. Ogni script è un file di testo (.js) composto da due tipi di istruzioni che coesistono:
- Direttive JuliuS — righe che iniziano con
//#*#, interpretate dal motore Delphi per controllare browser, timing, OS e flusso. - Blocchi JavaScript — codice JS puro racchiuso tra
//#*#SNIPPET=BEGINe//#*#SNIPPET=END, eseguito nel browser Chromium.
//#*# sembrano commenti JS ma vengono intercettate dall'engine prima di qualsiasi valutazione JavaScript, garantendo piena compatibilità con editor JS standard.Struttura di uno script
Intestazione / Commento
Titolo, descrizione, nome della compagnia/target.
GLOBALV — Dichiarazione variabili
Blocco GLOBALV=BEGIN / END con tutte le variabili di input.
Configurazione iniziale
SCREEN_SIZE, WAIT, TARGET_FRAME=MAIN.
Navigazione verso l'URL target
URL_GOTO seguito da WAIT per il caricamento.
Interazione con la pagina
Sequenza di SNIPPET, MOUSE_CLICK, WRITETO, IF/ELSE/ENDIF, WAIT.
Estrazione del risultato
Definizione della funzione JS di estrazione, EVALJS, CAPTURE_SCREENSHOT.
Ciclo di esecuzione
L'engine legge lo script riga per riga in un thread separato. Per ogni riga:
- Se inizia con
//#*#→ viene interpretata come direttiva JuliuS. - Se è compresa tra
SNIPPET=BEGINeSNIPPET=END→ viene accumulata e inviata al browser come JavaScript. - Se inizia con
/*→ l'engine salta tutte le righe fino al corrispondente*/. - Altrimenti → la riga viene ignorata dall'engine.
SNIPPET non viene eseguito nel browser. Tutto il JS da eseguire va obbligatoriamente dentro un blocco SNIPPET.GLOBALV — Variabili globali
datiGLOBALV=BEGIN e GLOBALV=END viene caricato nella lista interna GlobalV di JuliuS e può essere iniettato nel browser con GLOBALV=INJECT. Ogni riga deve essere una dichiarazione JavaScript valida var nome="valore";. I valori vengono estratti dall'engine per l'interpolazione con la sintassi {{{NOME}}}.GLOBALV=INJECT
javascriptGlobalV nel contesto JavaScript del browser. Dopo l'inject, tutte le variabili del blocco GLOBALV sono disponibili come variabili JS nella pagina corrente e possono essere usate nei successivi blocchi SNIPPET. Poiché ogni navigazione azzera il contesto JS, è necessario re-iniettare dopo ogni cambio pagina.GLOBALV=INJECT dopo ogni navigazione verso una nuova pagina.Interpolazione {{{VAR}}}
datiLe variabili definite in GLOBALV possono essere interpolate nei parametri delle direttive JuliuS usando {{{NOME_VARIABILE}}}. L'engine sostituisce il placeholder con il valore prima di eseguire il comando. I nomi sono case-insensitive.
URL_GOTO
navigazioneWAIT subito dopo per attendere il caricamento completo della pagina prima di interagire con il DOM.WAIT
controllo flussoBACK
navigazioneWAIT e un GLOBALV=INJECT per ripristinare il contesto JS.SCREEN_SIZE
navigazioneMOUSE_CLICK e OS_BROWSER_CLICK devono essere calibrate sulla risoluzione impostata con questo comando.MOUSE_CLICK
interazione CEFpointer-events:none, scrollbar native, dialog Windows) usare OS_BROWSER_CLICK.WRITETO
interazione CEF& e racchiusi tra virgolette doppie. Supporta interpolazione {{{VAR}}} e tasti speciali {{TASTO}}.Parametri
| Parametro | Tipo | Descrizione |
|---|---|---|
| ELEMENTID | string | ID HTML dell'elemento su cui mettere il focus. Usare none per saltare il focus. |
| FRAMENAME | string | Nome del frame/iframe target. Se omesso usa il frame con focus corrente. |
| TEXT | string | Testo da digitare. Supporta {{{VAR}}} e {{KEY}}. |
| CHAR_INT_MS | integer | Intervallo ms tra un carattere e l'altro (default: 200). |
| CHAR_INT_RANDOM | S / N | Se S, introduce variazioni casuali per simulare digitazione umana. |
Tasti speciali
interazione CEFAll'interno del parametro TEXT del comando WRITETO:
SNIPPET
javascriptSNIPPET=BEGIN e SNIPPET=END viene eseguito nel contesto JavaScript del browser Chromium. È il meccanismo principale per interagire con il DOM. L'opzione NOFRAME forza l'esecuzione nel frame principale (window) invece del frame con focus corrente.SNIPPET=BEGIN deve avere il suo SNIPPET=END.EVALJS
javascript?operation=getresult. Pensato per chiamare funzioni di estrazione già definite in un SNIPPET precedente.TARGET_FRAME
navigazioneMAIN seleziona il frame principale; POPUP seleziona una finestra popup figlia identificata dall'URL nella riga successiva.| Valore | Descrizione |
|---|---|
| MAIN | Frame principale della finestra browser corrente. |
| POPUP | Popup figlio. Deve essere seguito da //#*#TARGET_URL=<url>. |
IF / ELSE / ENDIF
controllo flussoIF= viene valutata nel browser tramite EvalJS: se il risultato è truthy il blocco IF viene eseguito e il blocco ELSE saltato; se è falsy il blocco IF viene saltato e il blocco ELSE (opzionale) eseguito. Il blocco ELSE è opzionale. Gli IF possono essere annidati: l'engine gestisce correttamente la profondità di annidamento.Valori considerati falsy
Stringa vuota "", "false", "0", "null", "undefined". Qualsiasi altro valore è considerato truthy.
EvalJS nel thread principale. Le variabili iniettate con GLOBALV=INJECT sono disponibili nell'espressione. Il risultato della valutazione viene scritto nel log di JuliuS per facilitare il debug (IF [expr] = valore → true/false).PAUSE
controllo flusso?operation=start). Utile per interventi manuali (es. risoluzione captcha, login manuale) in punti critici del flusso. Spesso usato in combinazione con IF per sospendere solo in caso di condizioni anomale.CAPTURE_SCREENSHOT
output CEFSettings.Data.screenShotPath. Il nome file è costruito automaticamente come ExcelLogLineNameBase_N.jpg. Il percorso viene aggiunto alla screenShotList del risultato operazione, recuperabile via API.OS_SCREENSHOT
output OSscreenShotList del risultato operazione.| Variante | Descrizione |
|---|---|
//#*#OS_SCREENSHOT | Nome file automatico: ExcelLogLineNameBase_OS_N.jpg |
//#*#OS_SCREENSHOT=nomeFile | Nome file personalizzato: nomeFile.jpg |
CAPTURE_SCREENSHOT cattura solo il pannello CEF. OS_SCREENSHOT cattura l'intero desktop Windows incluse finestre native, taskbar e popup di sistema.Funzione di risultato
javascriptPer restituire un risultato recuperabile via API, definire una funzione JS in un blocco SNIPPET e richiamarla con EVALJS. Per convenzione si chiama preventivo(), ma è possibile usare qualsiasi nome.
OS_MOUSE_MOVE
OS — mouseOS_MOUSE_CLICK
OS — mouseOS_MOUSE_MOVE. Agisce a livello SO e può interagire con qualsiasi finestra visibile sul desktop.OS_MOUSE_RCLICK
OS — mouseOS_MOUSE_MOVE_CLICK
OS — mouseOS_MOUSE_MOVE e OS_MOUSE_CLICK in una sola direttiva usando coordinate assolute di schermo. Le coordinate dipendono dalla posizione della finestra JuliuS sul desktop: se la finestra viene spostata, le coordinate devono essere ricalcolate. Per click indipendenti dalla posizione della finestra, preferire OS_BROWSER_CLICK.OS_MOUSE_DOUBLE_CLICK
OS — mouseOS_BROWSER_CLICK
OS — mouseMOUSE_CLICK e degli snapshot. Internamente, JuliuS converte le coordinate browser in coordinate assolute di schermo tramite ClickOnBrowserRelative, quindi il click funziona correttamente indipendentemente da dove è posizionata la finestra JuliuS sul desktop e dal fattore di scala DPI. È la scelta più robusta quando si vuole un click OS su un elemento del browser.Quando usarlo rispetto alle alternative
| Direttiva | Tipo click | Coordinate | Quando usarla |
|---|---|---|---|
| MOUSE_CLICK | CEF interno | Relative browser | Caso generale: elementi DOM standard |
| OS_MOUSE_MOVE_CLICK | SO | Assolute schermo | Click su finestre esterne al browser |
| OS_BROWSER_CLICK | SO | Relative browser | Elementi che non rispondono al CEF, scrollbar, dropdown nativi, pointer-events:none |
OS_BROWSER_INFO
OS — debugOS_MOUSE_MOVE e OS_MOUSE_MOVE_CLICK.OS_KEY_PRESS
OS — tastieraWRITETO che scrive nel browser CEF, questo comando agisce a livello SO e funziona su qualsiasi finestra attiva: dialog nativi Windows, form non web, applicazioni desktop.| Keycode | Tasto | Keycode | Tasto |
|---|---|---|---|
| 13 | ENTER | 27 | ESC |
| 9 | TAB | 32 | SPAZIO |
| 8 | BACKSPACE | 46 | DELETE |
| 37 | ← LEFT | 38 | ↑ UP |
| 39 | → RIGHT | 40 | ↓ DOWN |
| 112–123 | F1–F12 | 65–90 | A–Z |
OS_KEY
OS — tastieraOS_KEY_PRESS: accetta il nome del tasto invece del keycode numerico. Agisce a livello sistema operativo sulla finestra attiva. I nomi non riconosciuti vengono loggati e ignorati senza interrompere lo script.| Valore | Tasto | Valore | Tasto |
|---|---|---|---|
| enter | ENTER | esc / escape | ESC |
| tab | TAB | backspace | BACKSPACE |
| space | SPAZIO | arrow_up | ↑ |
| arrow_down | ↓ | arrow_left | ← |
| arrow_right | → |
OS_KEY_COMBO
OS — tastierakeybd_event. La sintassi è modificatore+tasto in minuscolo. Disponibile solo su Windows: su altre piattaforme il comando viene loggato come non implementato e ignorato senza interrompere lo script.| Campo | Valori accettati |
|---|---|
| modifier | ctrl, shift, alt |
| key | Lettera singola (a–z), oppure: f4–f12, tab, enter, esc, del, home, end, pageup, pagedown |
Best practice
Gestione banner cookie
Re-inject variabili dopo navigazione
Compilazione dropdown con jQuery
Esecuzione condizionale con IF
Usare IF per gestire variazioni di pagina o errori senza interrompere il flusso principale:
Click OS con coordinate relative al browser
Preferire OS_BROWSER_CLICK a OS_MOUSE_MOVE_CLICK per non dover ricalcolare le coordinate assolute se la finestra viene spostata:
Commenti
controllo flussoJuliuS supporta entrambe le sintassi di commento JavaScript. I blocchi
/* ... */sono utili per disabilitare temporaneamente intere sezioni, incluse direttive JuliuS.