Condividi:        

Date CUP Web prenotabili su foglio excel

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Date CUP Web prenotabili su foglio excel

Postdi aggittoriu » 17/02/23 19:21

Ciao,
io chiedo, non si sa mai.

Siccome devo prenotare varie visite per mia madre, tramite CUP Web, ma prima di trovare una data utile, passano mesi e mesi, sarebbe possibile scaricare in automatico su un foglio excel, ogni tot tempo, tutti i dati delle visite prenotabili?

Meglio ancora sarebbe poter scaricare i dati delle visite prenotabili, dopo averne già prenotata una. Così man mano che si trova una data precedente, si potrebbe prenotare quella e disdire la precedente.

La pagina web è questa
Per poterle vedere, bisogna mettere codice fiscale e numero della ricetta elettronica.
Si accede così a una pagina di riepilogo. Dopo di che bisogna cliccare su un tasto "Procedi".
E poi un altro tasto "Altre disponibilità". Altrimenti si vedrà solo la prima data disponibile in tutta la Regione.

Purtroppo, ovviamente, non posso scrivere qui codice fiscale e numero ricetta, per ovvi motivi di privacy.
Quindi mi immagino già la risposta. :(
aggittoriu
Utente Senior
 
Post: 156
Iscritto il: 24/06/14 08:49

Sponsor
 

Re: Date CUP Web prenotabili su foglio excel

Postdi Anthony47 » 18/02/23 12:58

Quindi mi immagino già la risposta. :(
Nooo, non essere pessimista...

Ad esempio:
1) Installa sul tuo pc l'ambiente Selenium, come descritto qui: viewtopic.php?f=26&t=112225

2) in un modulo standard inserisci questo codice:
Codice: Seleziona tutto
Sub SSSardegna()
Dim WPage As Object         'Selenium.WebDriver
Dim myUrl As String
Dim tObj As Object, myTim As Single
'
myTim = Timer
'Crea Driver:
Set WPage = CreateObject("Selenium.WebDriver")
myUrl = "https://cupweb.sardegnasalute.it/web/guest/ricetta-elettronica?"    '
Sheets("Foglio7").Select                    '<<< Il foglio coi parametri
'A1: Codice Fiscale                         '<<<
'A2: Numero Ricetta                         '<<<
'
WPage.Start "chrome", myUrl
WPage.Get "/"
WPage.Wait 500
Debug.Print ">Page loaded", Format(Timer - myTim, "0.0")
'
Set tObj = WPage.FindElementsByCss("input[class='codice-fiscale-bt form-control']")
tObj(1).SendKeys (Range("A1").Value)
Set tObj = WPage.FindElementsByCss("input[class='nreInput-bt form-control']")
tObj(1).SendKeys (Range("A2").Value)
Set tObj = WPage.FindElementsByCss("button[tabindex='0']")
WPage.Wait 300
tObj(1).Click
'
Stop
'
'    qui il tuo codice per
'   1) attendere il caricamento della pagina
'   2) fare... tutto il resto  :-))
'
'
End Sub

Come vedi il codice fa le cose piu' difficili: inserire il codice fiscale, la ricetta elettronica e premere Avanti. Per dimostrarlo esegui la Sub SSSardegna: si fermera' sulla istruzione Stop per mostrarti il frutto dell'immenso lavoro che ha fatto (per completare la macro, premi F5).
Poi ci sono le cose piu' facili: vedere e importare le disponibilita', cercare "Altre disponibilità" e importare pure quelle; ma con gli esempi gia' presenti nella macro e' un gioco da ragazzini... :D
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Date CUP Web prenotabili su foglio excel

Postdi aggittoriu » 18/02/23 22:08

Ah... quindi dici che fa? E io che ho fatto questa richiesta, pensando tra me e me... "seee, ma figurati!" :D

Domani sera allora ci provo. Poi ti faccio sapere. Ora purtroppo mi vien male, perchè con Selenium ogni volta devo ripetere la procedura di installazione. E ogni volta mi devo andare a rileggere come si fa.

Per ora... grazie e a domani! ;)
aggittoriu
Utente Senior
 
Post: 156
Iscritto il: 24/06/14 08:49

Re: Date CUP Web prenotabili su foglio excel

Postdi aggittoriu » 19/02/23 16:47

Ciao Anthony.
Allora... ho provato. Però mi da
Codice: Seleziona tutto
errore di run-time '0': SeleniumError element click intercepted: Element < button ecc.
Questo (sperando che si possa vedere, perchè adesso a me, la pagina a questo link non si apre).
La macro si ferma in
Codice: Seleziona tutto
tObj(1).Click
.

Non so. Devo fare qualcos'altro?
aggittoriu
Utente Senior
 
Post: 156
Iscritto il: 24/06/14 08:49

Re: Date CUP Web prenotabili su foglio excel

Postdi Anthony47 » 20/02/23 21:31

Mi era sfuggito il messaggio...
Probabilmente hai lo zoom della pagina a oltre il 100% e il banner dei cookie nasconde il pulsante AVANTI

O diminuisci lo zoom e poi esci da debug col tasto F5; oppure clicchi su "Accetto" e poi sempre continui la macro con F5
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Date CUP Web prenotabili su foglio excel

Postdi aggittoriu » 20/02/23 23:12

No. Non ho lo zoom oltre il 100%. Però è vero che se si potesse diminuire lo zoom al minimo, oppure se si potesse scrollare il tanto giusto, sarebbe meglio, perché si vedrebbero i pulsanti. E non salterebbe fuori nessun errore.

Parlo di pulsanti, perché sono vari i pulsanti da cliccare. Giusto per fartelo vedere, questo è quello che appare, dopo che si mettono codice fiscale, numero ricetta e si clicca "Avanti".
A questo punto, si dovrebbe cliccare su "Procedi" e appare questo.
Qui, si dovrebbe filtrare per area e zona e poi cliccare su "Altre Disponibilità". E appaiono queste, le date con le sedi degli esami prenotabili. Cioè quello che mi interesserebbe avere sul foglio excel.

Ma tutta sta roba però, si può fare?
aggittoriu
Utente Senior
 
Post: 156
Iscritto il: 24/06/14 08:49

Re: Date CUP Web prenotabili su foglio excel

Postdi Anthony47 » 21/02/23 13:12

Secondo me tu hai preso troppo sul serio il mio "Poi ci sono le cose piu' facili: vedere e importare le disponibilita', cercare "Altre disponibilità" e importare pure quelle; ma con gli esempi gia' presenti nella macro e' un gioco da ragazzini"

Come vedi andando avanti si presentano situazioni inizialmente simili a quelle gia' viste (nella home page) e quindi facilmente risolvibili anche da remoto, se riesci a "ispezionare" l'elemento (saranno da gestire come i bottono già manovrati).
Ma andando avanti il formato degli elementi da gestire cambia e cambiera' l'approccio da adottare.

Siamo chiari: senza l'accesso al sito non vedo come io possa capire l'approccio alle pagine e la raccolta dei dati: perchè questi esercizi sono un "gioco" di tempo e pazienza (cercare l'approccio che funziona, prova e riprova).
Un altro motivo di ritrosia a sviluppare questi giochi è che sono "a termine": domani, la settimana prossima, il mese prossimo, etc etc il gestore del sito ricompilera' il suo sorgente e i selettori che usiamo oggi non saranno piu' validi e bisogna ripetere il processo.

Nell'ipotesi che vogliamo provare ad andare avanti:
A) aggiungi queste quattro righe in questa posizione, così ci liberiamo del banner dei cookies:
Codice: Seleziona tutto
Debug.Print ">Page loaded", Format(Timer - myTim, "0.0")
'
Set tObj = WPage.FindElementsByCss("button[onclick='privacyCookiesAccepted()']")
WPage.Wait 100
tObj(1).Click
WPage.Wait 100
Set tObj = WPage.FindElementsByCss("input[class='codice-fiscale-bt form-control']")

Le righe prima e ultima sono già presenti nel codice, servono per identificare la posizione di inserimento

B) Quando arrivi su Stop del codice precedente, vai su chrome e "ispeziona" il pulsante "Procedi" (tasto dx sul pulsante, scegli Ispeziona dal menu che ti propone. Dovresti vedere il codice html nei dintorni. Con riferimento all'immagine (relativa al pulsante Avanti):
1) tasto dx sul pulsante e scegli Ispeziona; si apre il frame di sviluppo a destra)
2) identifica il codice html relativo (potrebbe essere necessario pripetere lo spep 1 se non si vede in dettaglio); tasto dx sul codice, scegli Copy
3) scegli Copy OuterHTML. Incolla il codice così copiato nel tuo prox messaggio
4) per ulteriore informazione copia anche Xpath e allega pure quello

Come illustrato nell'immagine:
Immagine

Altre tue immagini non riesco a vederne: i link dopo mooolti secondi restituiscono una pagina bianca o un errore di pagina non trovata. Suggeriscodi usare postimage.org per allegare immagini, come descritto qui: viewtopic.php?f=26&t=80395&p=585517#p585517

Con le informazioni del punto B probabilmente passeremo al livello successivo.
Da lì dovresti poter "ispezionare" gli elementi cruciali delle pagine che vedi e ripetere la raccolta dati descritta al punto B sopra.
Chissà che non riusciamo a fare ancora qualche avanzamento prima di arenarci, magari dopo essere arrivati a qualche interessannte punto intermedio
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Date CUP Web prenotabili su foglio excel

Postdi aggittoriu » 21/02/23 17:50

Infatti io speravo di capire quale fosse il codice da mettere per cliccare in automatico i vari pulsanti e arrivare alla pagina con tutte le info da scaricare. Così da poterlo fare da solo, senza dover chiedere aiuto su tutto. Anche perché, come detto all'inizio, questa è la procedura per prenotare la prima volta. Ma a me interesserebbe ancora di più, fare la stessa cosa, ma per cercare date disponibili da prenotare, per le visite già prenotate. In modo da anticipare il più possibile le visite.

Comunque, sperando di non fare un casino, metto quello che mi hai richiesto.

Siamo arrivati a dover cliccare il tasto "Procedi"
Immagine
OuterHTML
Codice: Seleziona tutto
<button name="_ricettaelettronica_WAR_cupprenotazione_:navigation-prestazioni-under:prestazioni-nextButton-under__button" onfocus="ice.ace.lazy(&quot;pushbutton&quot;,[&quot;_ricettaelettronica_WAR_cupprenotazione_:navigation-prestazioni-under:prestazioni-nextButton-under_&quot;,{&quot;fullSubmit&quot;:true}]);" tabindex="0" type="button" class=""><span>Procedi</span></button>

Xpath
Codice: Seleziona tutto
//*[@id="_ricettaelettronica_WAR_cupprenotazione_:navigation-prestazioni-under:prestazioni-nextButton-under_"]/span/span/button


Si arriverà qui
Immagine
, dove è anche possibile filtrare per area e zona. A me ineresserebbe filtrare per area. Ma se fosse ostico, lascia pure perdere. Non è fondamentale. Per zona, ancora meno fondamentale.
La cosa importante è andare avanti, cliccando su "Altre Disponibilità". Qui sotto metto OuterHTML e Xpath di:

filtro Area
Codice: Seleziona tutto
<select class="ui-widget ui-inputfield ui-state-default ui-state-optional" name="_ricettaelettronica_WAR_cupprenotazione_:appuntamentiForm:globalGeoSelectors:macrozonaSelectMenu_input" role="select" style="" id="_ricettaelettronica_WAR_cupprenotazione_:appuntamentiForm:globalGeoSelectors:macrozonaSelectMenu_input"><option value="NO_VALUE" role="option">-</option><option value="MZ_CENT" role="option">Centro Sardegna</option><option value="MZ_NORD" role="option">Nord Sardegna</option><option value="MZ_SUD" selected="selected" role="option">Sud Sardegna</option></select>

Codice: Seleziona tutto
//*[@id="_ricettaelettronica_WAR_cupprenotazione_:appuntamentiForm:globalGeoSelectors:macrozonaSelectMenu_input"]


Filtro Zona
Codice: Seleziona tutto
<select class="ui-widget ui-inputfield ui-state-default ui-state-optional" name="_ricettaelettronica_WAR_cupprenotazione_:appuntamentiForm:globalGeoSelectors:zonaSelectMenu_input" role="select" style="" id="_ricettaelettronica_WAR_cupprenotazione_:appuntamentiForm:globalGeoSelectors:zonaSelectMenu_input"><option value="NO_VALUE" role="option">-</option><option value="ZN_CA" role="option">Zona di Cagliari</option><option value="ZN_CI" role="option">Zona di Carbonia-Iglesias</option><option value="ZN_VS" selected="selected" role="option">Zona di Villacidro-Sanluri</option></select>

Codice: Seleziona tutto
//*[@id="_ricettaelettronica_WAR_cupprenotazione_:appuntamentiForm:globalGeoSelectors:zonaSelectMenu_input"]


Pulsante "Altre Disponibilità"
Codice: Seleziona tutto
<button name="_ricettaelettronica_WAR_cupprenotazione_:appuntamentiForm:j_idt211:0:_t284_button" onclick="clickChildOfParent('app_0', 'app_selector'); event.stopPropagation();" onfocus="ice.ace.lazy(&quot;pushbutton&quot;,[&quot;_ricettaelettronica_WAR_cupprenotazione_:appuntamentiForm:j_idt211:0:_t284&quot;,{}]);" tabindex="0" type="button" class=""><span>Altre disponibilità</span></button>

Codice: Seleziona tutto
//*[@id="_ricettaelettronica_WAR_cupprenotazione_:appuntamentiForm:j_idt211:0:_t284"]/span/span/button


E si arriverà in una pagina tipo questa, con le visite disponibili per essere prenotate. Ossia con i dati che vorrei avere sul mio foglio excel.
Immagine

Le immagini sono tagliate, ma vedo che se si clicca sopra, si vedono complete. Il sito è cambiato da quando l'hai descritto in quel thread. Non so se dovevo copiare altro codice. Io ho copiato "Collegamento diretto per forum:"

Aiuto! Spero di non stressarti tanto :oops: , perchè io... :mmmh:
aggittoriu
Utente Senior
 
Post: 156
Iscritto il: 24/06/14 08:49

Re: Date CUP Web prenotabili su foglio excel

Postdi Anthony47 » 23/02/23 14:45

Allora... Tolto il banner dei cookies, inserito il cf e il numero di ricetta, premuto AVANTI ci troviamo con l'opzione PROCEDI.
Dovrebbe essere indirizzabile con il selector
Codice: Seleziona tutto
"button[name='_ricettaelettronica_WAR_cupprenotazione_:navigation-prestazioni-under:prestazioni-nextButton-under__button']"


I filtri per il momento li ignoriamo e proviamo a cliccare ALTRE DISPONIBILITA'
Dovrebbe essere indirizzabile con il selector
Codice: Seleziona tutto
"button[name=' _ricettaelettronica_WAR_cupprenotazione_:appuntamentiForm:j_idt211:0:_t284_button']"


A questo punto possiamo aggiornare il codice di prova come segue:
Codice: Seleziona tutto
Sub SSSardegna()
Dim WPage As Object         'Selenium.WebDriver
Dim myUrl As String
Dim tObj As Object, myTim As Single
'
myTim = Timer
'Crea Driver:
Set WPage = CreateObject("Selenium.WebDriver")
myUrl = "https://cupweb.sardegnasalute.it/web/guest/ricetta-elettronica?"    '
Sheets("Foglio7").Select                    '<<< Il foglio coi parametri
'A1: Codice Fiscale                         '<<<
'A2: Numero Ricetta                         '<<<
'
WPage.Start "chrome", myUrl
WPage.Get "/"
WPage.Wait 500
Debug.Print ">Page loaded", Format(Timer - myTim, "0.0")
'
Set tObj = WPage.FindElementsByCss("button[onclick='privacyCookiesAccepted()']")
WPage.Wait 100
tObj(1).Click
WPage.Wait 100
Set tObj = WPage.FindElementsByCss("input[class='codice-fiscale-bt form-control']")
tObj(1).SendKeys (Range("A1").Value)
Set tObj = WPage.FindElementsByCss("input[class='nreInput-bt form-control']")
tObj(1).SendKeys (Range("A2").Value)
Set tObj = WPage.FindElementsByCss("button[tabindex='0']")
WPage.Wait 300
Debug.Print "A", WPage.Url
tObj(1).Click
For I = 1 To 10
    WPage.Wait 1000
    Debug.Print "B_" & I, WPage.Url
Next I
Stop
'
'PROCEDI:
Set tObj = WPage.FindElementsByCss("button[name='_ricettaelettronica_WAR_cupprenotazione_:navigation-prestazioni-under:prestazioni-nextButton-under__button']")
WPage.Wait 300
Debug.Print "Proc", WPage.Url
tObj(1).Click
For I = 1 To 10
    WPage.Wait 1000
    Debug.Print "Proc_" & I, WPage.Url
Next I
Stop
'
'AltreDisponibilità:
Set tObj = WPage.FindElementsByCss("button[name=' _ricettaelettronica_WAR_cupprenotazione_:appuntamentiForm:j_idt211:0:_t284_button']")
WPage.Wait 300
Debug.Print "AD", WPage.Url
tObj(1).Click
For I = 1 To 10
    WPage.Wait 1000
    Debug.Print "AD" & I, WPage.Url
Next I
Stop
End Sub

Noterai che dopo ogni "click" ho inserito un loop For I = 1 To 10 /Next I e uno Stop.
Il loop raccoglie per 10 secondi l'url di pagina, mi servirà per cercare di inserire una attesa sensata tra una operazione e la successiva; lo Stop serve per consentirti di verificare "a occhio" se il comando lanciato ha effettivamente svolto il compito pensato.

Nell'ipotesi che ogni comando abbia fatto il suo dovere, quando sei su Stop premi F5 (nella finestra del vba) per continuare la macro.
Quando arrivi all'ultimo stop, e quindi ottimisticamente alla visualizzazione degli "Appuntamenti disponibili" procedi così:
- apri una sessione del Blocco-Note
- su Chrome, prova a "ispezionare" il primo appuntamento (puntare su "ESAME COMPLESSIVO", tasto Dx, Ispeziona); copia l' OuterHTML, che metterai nel testo del tuo prox messaggio
- risali verso l'inizio del codice html e identifica il tag "<body ..."; selezionalo e copia il suo OuterHTML; incolla tutto nella sessione di Blocco-Note, salva il file e allegalo al tuo prox messaggio
- apri la "finestra Immediata" del vba (dovrebbe bastare la sequenza Contr-g; oppure Menu /Visualizza /Finestra Immediata); copiane il contenuto (da >>>> fino alla fine) e inseriscilo nel tuo prox messaggio
- completi la macro con F5, chiudendo anche la sessione di Chrome

Ottimisticamente le informazioni ci consentiranno di impostare la prossima evoluzione, cioe' eliminare gli Stop e raccogliere l'elenco delle disponibilità

Per le istruzioni su come allegare un file:
viewtopic.php?f=26&t=103893&p=605487#p605487
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Date CUP Web prenotabili su foglio excel

Postdi aggittoriu » 23/02/23 16:41

Ciao.

Allora. Ho provato il nuovo codice aggiornato, ma purtroppo va bene solo fino alla penultima pagina. Quando dovrebbe cliccare su "Altre Disponibilità", mi da l'errore
Immagine

Purtroppo ho provato a riguardare Xpath e OuterHTML e ho visto che cambia. E anche se correggo il codice, non funziona lo stesso, penso proprio perchè cambiano quelle parti. Per esempio. Ora il pulsante "Altre Disponibilità" ha:
Xpath
Codice: Seleziona tutto
//*[@id="_ricettaelettronica_WAR_cupprenotazione_:appuntamentiForm:j_idt207:0:_t280"]/span/span/button

OuterHTML
Codice: Seleziona tutto
<button name="_ricettaelettronica_WAR_cupprenotazione_:appuntamentiForm:j_idt207:0:_t280_button" onclick="clickChildOfParent('app_0', 'app_selector'); event.stopPropagation();" onfocus="ice.ace.lazy(&quot;pushbutton&quot;,[&quot;_ricettaelettronica_WAR_cupprenotazione_:appuntamentiForm:j_idt207:0:_t280&quot;,{}]);" tabindex="0" type="button" class=""><span>Altre disponibilità</span></button>


Ho provato anche a cambiare
Codice: Seleziona tutto
tObj(1).Click
in
Codice: Seleziona tutto
tObj(2).Click
visto che è il terzo pulsante, ma evvidentemente non c'entra niente.
Ho provato ad aumentare l'attesa, ma niente.

Boh! Si può fare altro?
aggittoriu
Utente Senior
 
Post: 156
Iscritto il: 24/06/14 08:49

Re: Date CUP Web prenotabili su foglio excel

Postdi Anthony47 » 23/02/23 21:50

Evidentemente dipende dalla sessione...

Prova a sostituire nell'attuale codice da 'AltreDisponibilità: fino al suo Stop con questo:
Codice: Seleziona tutto
'AltreDisponibilità:
Set tObj = WPage.FindElementsByTag("button")
WPage.Wait 300
Debug.Print "AD", WPage.Url
For I = 1 To tObj.Count
    Debug.Print I, tObj(I).Text
Next I
Stop             '<<<<
tObj(xxx).Click
For I = 1 To 10
    WPage.Wait 1000
    Debug.Print "AD" & I, WPage.Url
Next I
Stop

Quando si ferma (dovrebbe arrivarci!) sullo Stop marcato <<< vai nella finestra Immediata del vba e vedi se tra le ultime righe stampate ce n'e' una tipo 2, Altre disponibilità
Se c'e' allora usa quel numero (2 nell'esempio) al posto di xxx nella riga successiva, tObj(xxx).Click
Continua la macro con F5 e vediamo se arriviamo da qualche parte

Se arriviamo dove speravamo, cioe' all'elenco delle prestazioni disponibili allora:
-salva il file
-chiudi Excel
-riapri Excel e file, esegui la macro fino in fondo.

Vedi nel messaggio precedente quali informazioni dovresti raccogliere e condividile, e vedremo se si riesce a fare un altro passo
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Date CUP Web prenotabili su foglio excel

Postdi aggittoriu » 24/02/23 16:58

Ok. Adesso va. Era il numero 4. :)

A dire il vero, io sarei già soddisfatto così. Perchè tanto con Selenium non posso importare i dati di nascosto, giusto? Nel senso, che durante l'importazione, il processo deve essere visibile a video. Non posso farlo mentre mi guardo la partita del Cagliari, senza che mi nasconda le immagini della partita, giusto? Perchè se è così, io mi riterrei già soddisfatto dove siamo arrivati ora.

Comunque, quello che mi hai richiesto dovrebbe essere questo:
Xpath "ESAME COMPLESSIVO"
Codice: Seleziona tutto
<span id="_ricettaelettronica_WAR_cupprenotazione_:appuntamentiForm:j_idt450:0:j_idt474:0:_t475">ESAME COMPLESSIVO OCCHIO (VISITA OCULISTICA) - S34083</span>


File.txt del body

Poi volevo chiederti. Lo stesso risultato si può ottenere anche con le visite già prenotate, per cercare una data più vicina? La pagina è questa
Cambia la prima pagina, perchè i campi sono tre. Nel primo bisogna selezionare "Numero ricetta elettronica (NRE)". Gli altri due sono sempre codice fiscale e numero della ricetta.

La seconda pagina è simile a quella di "Altre disponibilità".

Una terza dove bisogna cliccare su sposta.

Se avessi capito come hai costruito il tuo codice, lo farei io senza disturbarti più. Ma non è che ci ho capito tanto. :oops:
aggittoriu
Utente Senior
 
Post: 156
Iscritto il: 24/06/14 08:49

Re: Date CUP Web prenotabili su foglio excel

Postdi Anthony47 » 25/02/23 18:24

A dire il vero, io sarei già soddisfatto così.
Il "body" che hai catturato mi dovrebbe aver permesso di catturare e portare su Excel l'elenco delle disponibilita'.
La macro complessiva dovrebbe essere
Codice: Seleziona tutto
Sub SSSardegna()
Dim WPage As Object         'Selenium.WebDriver
Dim myUrl As String
Dim tObj As Object, myTim As Single
'
myTim = Timer
'Crea Driver:
Set WPage = CreateObject("Selenium.WebDriver")
myUrl = "https://cupweb.sardegnasalute.it/web/guest/ricetta-elettronica?"    '
Sheets("Foglio7").Select                    '<<< Il foglio coi parametri
'A1: Codice Fiscale                         '<<<
'A2: Numero Ricetta                         '<<<
'
WPage.Start "chrome", myUrl
WPage.Get "/"
WPage.Wait 500
Debug.Print ">Page loaded", Format(Timer - myTim, "0.0")
'
Set tObj = WPage.FindElementsByCss("button[onclick='privacyCookiesAccepted()']")
WPage.Wait 100
tObj(1).Click
WPage.Wait 100
Set tObj = WPage.FindElementsByCss("input[class='codice-fiscale-bt form-control']")
tObj(1).SendKeys (Range("A1").Value)
Set tObj = WPage.FindElementsByCss("input[class='nreInput-bt form-control']")
tObj(1).SendKeys (Range("A2").Value)
Set tObj = WPage.FindElementsByCss("button[tabindex='0']")
WPage.Wait 300
Debug.Print ">>>>"
Debug.Print "A", WPage.Url
tObj(1).Click
For I = 1 To 10
    WPage.Wait 100                          '1000
    Debug.Print "B_" & I, WPage.Url
Next I
Stop
'
'PROCEDI:
Set tObj = WPage.FindElementsByCss("button[name='_ricettaelettronica_WAR_cupprenotazione_:navigation-prestazioni-under:prestazioni-nextButton-under__button']")
WPage.Wait 300
Debug.Print "Proc", WPage.Url
tObj(1).Click
For I = 1 To 10
    WPage.Wait 1000
    Debug.Print "Proc_" & I, WPage.Url
Next I
Stop
'
'AltreDisponibilità:
Set tObj = WPage.FindElementsByTag("button")
WPage.Wait 300
'Debug.Print "AD", WPage.Url
'For I = 1 To tObj.Count
'    Debug.Print I, tObj(I).Text
'Next I
'Stop
tObj(4).Click
For I = 1 To 10
    WPage.Wait 1000
    Debug.Print "AD" & I, WPage.Url
Next I
Stop
'
'Import Visite disponibili:
Dim yArr, Divvs As Object, myMatch
Set tObj = WPage.FindElementsByClass("disponibiliPanel")
Debug.Print "DisponibiliPanel=" & tObj.Count
yArr = Array(1, 4, 5, 6, 10, 11, 12, 13)
For I = 1 To tObj.Count
    Set Divvs = tObj(I).FindElementsByTag("span")
    For J = 1 To Divvs.Count
        myMatch = Application.Match(J, yArr, False)
        If Not IsError(myMatch) Then
            Cells(I + 1, myMatch + 2) = Replace(Divvs(J).Text, Chr(195) & Chr(172), "ì", , , vbTextCompare)
        End If
    Next J
Next I

Stop

End Sub
Dovrebbe portare nelle colonne C:J l'elenco delle disponibilita' mostrate dalla pagina; spero funzioni anche a te.
Rimane da correggere il timing dei comandi, che oggi avvengono ogni 10 secondi: per questo mi serve il contenuto della "finestra Immediata" del vba.
Quindi, quando sei sull'ultimo Stop:
-apri la finestra Immediata del vba (dovrebbe bastare digitare Contr-g; altrimenti Menu /Visualizza /Finestra Immediata
-copia da >>>> fino alla fine e incollalo nel tuo prox messaggio

Quanto al ripetere l'esercizio per l'altra pagina, "al momento preferirei prendere fiato": lavorare a distanza consuma un sacco di tempo, visto che, non potendo testare al volo la situazione, bisogna guardare in profondita' 10 cose prima di ipotizzare quale sia quella giusta.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Date CUP Web prenotabili su foglio excel

Postdi aggittoriu » 26/02/23 00:36

Aiuto! Ci sono almeno un'ora provando e riprovando. L'ultima di prima, funziona. Questa di adesso, mi dava errore. E non capivo perchè. Ho solo tolto tutti gli stop, tranne l'ultimo. Fino a quando li ho rimessi e ha funzionato. Ma perchè?

In realtà manca l'ora dell'appuntamento, come si vede in questa immagine.
Immagine
Ma sono inezie!

Il codice della Finestra Immediata
Codice: Seleziona tutto
>>>>
A             https://cupweb.sardegnasalute.it/web/guest/ricetta-elettronica?/
B_1           https://cupweb.sardegnasalute.it/web/guest/ricetta-elettronica?/
B_2           https://cupweb.sardegnasalute.it/web/guest/ricetta-elettronica?/
B_3           https://cupweb.sardegnasalute.it/web/guest/ricetta-elettronica?/
B_4           https://cupweb.sardegnasalute.it/web/guest/ricetta-elettronica?/
B_5           https://cupweb.sardegnasalute.it/web/guest/ricetta-elettronica?/
B_6           https://cupweb.sardegnasalute.it/web/guest/ricetta-elettronica?/
B_7           https://cupweb.sardegnasalute.it/web/guest/ricetta-elettronica?/
B_8           https://cupweb.sardegnasalute.it/web/guest/ricetta-elettronica?/
B_9           https://cupweb.sardegnasalute.it/web/guest/ricetta-elettronica?/
B_10          https://cupweb.sardegnasalute.it/web/guest/ricetta-elettronica?/
Proc          https://cupweb.sardegnasalute.it/web/guest/ricetta-elettronica?p_auth=hdShQ3ao&p_p_id=ricettaelettronica_WAR_cupprenotazione&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_p_col_count=1&_ricettaelettronica_WAR_cupprenotazione__facesViewIdRender=%2Fviews%2Fprenotazione%2FepPrestazioni.xhtml
Proc_1        https://cupweb.sardegnasalute.it/web/guest/ricetta-elettronica?p_auth=hdShQ3ao&p_p_id=ricettaelettronica_WAR_cupprenotazione&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_p_col_count=1&_ricettaelettronica_WAR_cupprenotazione__facesViewIdRender=%2Fviews%2Fprenotazione%2FepPrestazioni.xhtml
Proc_2        https://cupweb.sardegnasalute.it/web/guest/ricetta-elettronica?p_auth=hdShQ3ao&p_p_id=ricettaelettronica_WAR_cupprenotazione&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_p_col_count=1&_ricettaelettronica_WAR_cupprenotazione__facesViewIdRender=%2Fviews%2Fprenotazione%2FepPrestazioni.xhtml
Proc_3        https://cupweb.sardegnasalute.it/web/guest/ricetta-elettronica?p_auth=hdShQ3ao&p_p_id=ricettaelettronica_WAR_cupprenotazione&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_p_col_count=1&_ricettaelettronica_WAR_cupprenotazione__facesViewIdRender=%2Fviews%2Fprenotazione%2FepPrestazioni.xhtml
Proc_4        https://cupweb.sardegnasalute.it/web/guest/ricetta-elettronica?p_auth=hdShQ3ao&p_p_id=ricettaelettronica_WAR_cupprenotazione&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_p_col_count=1&_ricettaelettronica_WAR_cupprenotazione__facesViewIdRender=%2Fviews%2Fprenotazione%2FepPrestazioni.xhtml
Proc_5        https://cupweb.sardegnasalute.it/web/guest/ricetta-elettronica?p_auth=hdShQ3ao&p_p_id=ricettaelettronica_WAR_cupprenotazione&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_p_col_count=1&_ricettaelettronica_WAR_cupprenotazione__facesViewIdRender=%2Fviews%2Fprenotazione%2FepPrestazioni.xhtml
Proc_6        https://cupweb.sardegnasalute.it/web/guest/ricetta-elettronica?p_auth=hdShQ3ao&p_p_id=ricettaelettronica_WAR_cupprenotazione&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_p_col_count=1&_ricettaelettronica_WAR_cupprenotazione__facesViewIdRender=%2Fviews%2Fprenotazione%2FepPrestazioni.xhtml
Proc_7        https://cupweb.sardegnasalute.it/web/guest/ricetta-elettronica?p_auth=hdShQ3ao&p_p_id=ricettaelettronica_WAR_cupprenotazione&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_p_col_count=1&_ricettaelettronica_WAR_cupprenotazione__facesViewIdRender=%2Fviews%2Fprenotazione%2FepPrestazioni.xhtml
Proc_8        https://cupweb.sardegnasalute.it/web/guest/ricetta-elettronica?p_auth=hdShQ3ao&p_p_id=ricettaelettronica_WAR_cupprenotazione&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_p_col_count=1&_ricettaelettronica_WAR_cupprenotazione__facesViewIdRender=%2Fviews%2Fprenotazione%2FepPrestazioni.xhtml
Proc_9        https://cupweb.sardegnasalute.it/web/guest/ricetta-elettronica?p_auth=hdShQ3ao&p_p_id=ricettaelettronica_WAR_cupprenotazione&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_p_col_count=1&_ricettaelettronica_WAR_cupprenotazione__facesViewIdRender=%2Fviews%2Fprenotazione%2FepPrestazioni.xhtml
Proc_10       https://cupweb.sardegnasalute.it/web/guest/ricetta-elettronica?p_auth=hdShQ3ao&p_p_id=ricettaelettronica_WAR_cupprenotazione&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_p_col_count=1&_ricettaelettronica_WAR_cupprenotazione__facesViewIdRender=%2Fviews%2Fprenotazione%2FepPrestazioni.xhtml
AD1           https://cupweb.sardegnasalute.it/web/guest/ricetta-elettronica?p_auth=hdShQ3ao&p_p_id=ricettaelettronica_WAR_cupprenotazione&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_p_col_count=1&_ricettaelettronica_WAR_cupprenotazione__facesViewIdRender=%2Fviews%2Fprenotazione%2FappuntamentiPrimaDisp.xhtml
AD2           https://cupweb.sardegnasalute.it/web/guest/ricetta-elettronica?p_auth=hdShQ3ao&p_p_id=ricettaelettronica_WAR_cupprenotazione&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_p_col_count=1&_ricettaelettronica_WAR_cupprenotazione__facesViewIdRender=%2Fviews%2Fprenotazione%2FappuntamentiPrimaDisp.xhtml
AD3           https://cupweb.sardegnasalute.it/web/guest/ricetta-elettronica?p_auth=hdShQ3ao&p_p_id=ricettaelettronica_WAR_cupprenotazione&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_p_col_count=1&_ricettaelettronica_WAR_cupprenotazione__facesViewIdRender=%2Fviews%2Fprenotazione%2FappuntamentiPrimaDisp.xhtml
AD4           https://cupweb.sardegnasalute.it/web/guest/ricetta-elettronica?p_auth=hdShQ3ao&p_p_id=ricettaelettronica_WAR_cupprenotazione&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_p_col_count=1&_ricettaelettronica_WAR_cupprenotazione__facesViewIdRender=%2Fviews%2Fprenotazione%2FappuntamentiPrimaDisp.xhtml
AD5           https://cupweb.sardegnasalute.it/web/guest/ricetta-elettronica?p_auth=hdShQ3ao&p_p_id=ricettaelettronica_WAR_cupprenotazione&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_p_col_count=1&_ricettaelettronica_WAR_cupprenotazione__facesViewIdRender=%2Fviews%2Fprenotazione%2FappuntamentiPrimaDisp.xhtml
AD6           https://cupweb.sardegnasalute.it/web/guest/ricetta-elettronica?p_auth=hdShQ3ao&p_p_id=ricettaelettronica_WAR_cupprenotazione&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_p_col_count=1&_ricettaelettronica_WAR_cupprenotazione__facesViewIdRender=%2Fviews%2Fprenotazione%2FappuntamentiPrimaDisp.xhtml
AD7           https://cupweb.sardegnasalute.it/web/guest/ricetta-elettronica?p_auth=hdShQ3ao&p_p_id=ricettaelettronica_WAR_cupprenotazione&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_p_col_count=1&_ricettaelettronica_WAR_cupprenotazione__facesViewIdRender=%2Fviews%2Fprenotazione%2FappuntamentiPrimaDisp.xhtml
AD8           https://cupweb.sardegnasalute.it/web/guest/ricetta-elettronica?p_auth=hdShQ3ao&p_p_id=ricettaelettronica_WAR_cupprenotazione&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_p_col_count=1&_ricettaelettronica_WAR_cupprenotazione__facesViewIdRender=%2Fviews%2Fprenotazione%2FappuntamentiPrimaDisp.xhtml
AD9           https://cupweb.sardegnasalute.it/web/guest/ricetta-elettronica?p_auth=hdShQ3ao&p_p_id=ricettaelettronica_WAR_cupprenotazione&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_p_col_count=1&_ricettaelettronica_WAR_cupprenotazione__facesViewIdRender=%2Fviews%2Fprenotazione%2FappuntamentiPrimaDisp.xhtml
AD10          https://cupweb.sardegnasalute.it/web/guest/ricetta-elettronica?p_auth=hdShQ3ao&p_p_id=ricettaelettronica_WAR_cupprenotazione&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_p_col_count=1&_ricettaelettronica_WAR_cupprenotazione__facesViewIdRender=%2Fviews%2Fprenotazione%2FappuntamentiPrimaDisp.xhtml
DisponibiliPanel=79


Prima avevo capito che ti servisse solo per individuare il numero del pulsante da cliccare. E non l'ho messo per quello.

Scusa! Me lo immaginavo che sarebbe stato un lavoro stressante. :oops: Ma se provo a vedere se riesco ad adattare questo codice all'altra pagina, posso farti qualche domanda? O non ne vuoi proprio più sentirne parlare? :D
aggittoriu
Utente Senior
 
Post: 156
Iscritto il: 24/06/14 08:49

Re: Date CUP Web prenotabili su foglio excel

Postdi Anthony47 » 26/02/23 19:27

Dopo aver sbattuto la testa molte volte (sempre per l'impossibilità di accedere al vero ambiente) improvvisamente ho realizzato che l'indice degli "span" da prelevare va aumentato di 1 (nel mio ambiente di test era invece corretto come te l'avevo proposto)
Quindi aggiorna il codice in:
Codice: Seleziona tutto
yArr = Array(2, 5, 6, 7, 11, 12, 13, 14)


Prova se così importa correttamente le disponibilità

Quanto al contenuto della finestra Immediata, purtroppo non dice nulla di utile.
Per eliminare gli Stop e cercare di ottimizzare le attese tra una fase e la successiva, prova questa versione di codice:
Codice: Seleziona tutto
Sub SSSardegnaPenult()
Dim WPage As Selenium.WebDriver
Dim myUrl As String
Dim tObj As Object, myTim As Single
'
Dim inLocal As Boolean
''inLocal = True

myTim = Timer
'Crea Driver:
Set WPage = CreateObject("Selenium.WebDriver")
myUrl = "https://cupweb.sardegnasalute.it/web/guest/ricetta-elettronica?"    '
Sheets("Foglio9").Select                    '<<< Il foglio coi parametri
'A1: Codice Fiscale                         '<<<
'A2: Numero Ricetta                         '<<<
'
WPage.Start "chrome", myUrl
WPage.Get "/"
WPage.Wait 500
Debug.Print ">>>>"
Debug.Print ">Page loaded", Format(Timer - myTim, "0.0")
'
Set tObj = WPage.FindElementsByCss("button[onclick='privacyCookiesAccepted()']")
tObj(1).Click
WPage.Wait 300
'Insert CF:
Set tObj = WPage.FindElementsByCss("input[class='codice-fiscale-bt form-control']")
tObj(1).SendKeys (Range("A1").Value)
'Inser NRE:
Set tObj = WPage.FindElementsByCss("input[class='nreInput-bt form-control']")
tObj(1).SendKeys (Range("A2").Value)
Set tObj = WPage.FindElementsByCss("button[tabindex='0']")
WPage.Wait 300
Debug.Print "A", WPage.Url
tObj(1).Click
WPage.Wait 3000
For I = 1 To 10
    WPage.Wait 1000                          '1000
    Debug.Print "B_" & I, WPage.Url
    Set tObj = WPage.FindElementsByCss("button[name='_ricettaelettronica_WAR_cupprenotazione_:navigation-prestazioni-under:prestazioni-nextButton-under__button']")
    If tObj.Count > 0 Then Exit For
Next I
''Stop
'
'>>>> Test da Body txt
''If inLocal Then GoTo FFile


'PROCEDI:
Set tObj = WPage.FindElementsByCss("button[name='_ricettaelettronica_WAR_cupprenotazione_:navigation-prestazioni-under:prestazioni-nextButton-under__button']")
Debug.Print "Proc", WPage.Url
tObj(1).Click
WPage.Wait 3000
For I = 1 To 10
    WPage.Wait 1000
    Debug.Print "Proc_" & I, WPage.Url
    Set tObj = WPage.FindElementsByTag("button")
    If tObj.Count >= 4 Then
        If Left(tObj(4).Text, 10) = "Altre disp" Then
            Debug.Print "Trovato Altre disp"
            Exit For
        End If
    End If
Next I
''Stop
'
'AltreDisponibilità:
Set tObj = WPage.FindElementsByTag("button")
WPage.Wait 300
'Debug.Print "AD", WPage.Url
'For I = 1 To tObj.Count
'    Debug.Print I, tObj(I).Text
'Next I
'Stop
tObj(4).Click
For I = 1 To 10
    WPage.Wait 1000
    Debug.Print "AD" & I, WPage.Url
    Set tObj = WPage.FindElementsByClass("disponibiliPanel")
    If tObj.Count > 5 Then
        Debug.Print "disponibiliPanel=" & tObj.Count
        Exit For
    End If
Next I
''Stop
'
'Import Visite disponibili:
Dim yArr, Divvs As Object, myMatch
Set tObj = WPage.FindElementsByClass("disponibiliPanel")
Debug.Print "DisponibiliPanel=" & tObj.Count
yArr = Array(2, 5, 6, 7, 11, 12, 13, 14)
For I = 1 To tObj.Count
    Set Divvs = tObj(I).FindElementsByTag("span")
    For J = 1 To Divvs.Count
        myMatch = Application.Match(J, yArr, False)
        If Not IsError(myMatch) Then
            Cells(I + 1, myMatch + 2) = Replace(Divvs(J).Text, Chr(195) & Chr(172), "ì", , , vbTextCompare)
        End If
    Next J
Next I

Stop

End Sub

Ho eliminato (credo) tutti gli Stop meno l'ultimo, che ti lascia Chrome aperto con l'elenco delle disponibilità, e ho aggiunto la cancellazione delle colonne C:J prima di importare l'elenco delle disponibilità

Prova e vedi se raccoglie correttamente, e comunque poi segnala il contenuto della finestra Immediata, sempre dall'ultimo >>>> fino alla fine

Per "l'altra pagina" vai pure avanti (seguendo lo schema del codice con gli Stop) e prova a chiedere; chissà...
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Date CUP Web prenotabili su foglio excel

Postdi aggittoriu » 27/02/23 00:05

A furia di fare queste prove, ieri notte son riuscito a trovare e a prenotare la visita per domani mattina. :)

Altre ricette bianche da prenotare non ne ho. Ho solo le rosse, ma con quelle non fa, perchè bisogna prima loggarsi e per di più, ora non ho proprio modo di loggarmi.

Quindi aspettiamo domani e vediamo se avrò fra le mani un'altra ricetta bianca, con la quale continuare.

Però non voglio stressarti tanto. Poi mi sento in colpa. :oops: Perchè tanto, come ti ho già detto, a me va bene anche così. E ti ringrazio tanto. Perchè domani mia madre farà la visita, quando le prospettive erano di farla a settembre. E una programmata a fine agosto, gliel'avrei trovata per il primo marzo, ma non posso prenotargliela, perchè non farebbe in tempo a fare gli esami richiesti.

Però, visto che sto cercando e cercando, ma non trovo niente. Se mi dici come si fa a selezionare un valore dal menù a tendina. :D Anche in questo forum. Se cerco selenium tendina, mi trova post con la parola selenium o tendina. Ma entrambe?
aggittoriu
Utente Senior
 
Post: 156
Iscritto il: 24/06/14 08:49

Re: Date CUP Web prenotabili su foglio excel

Postdi aggittoriu » 27/02/23 23:38

E niente!
Visita fatta. Gli hanno dato un ulteriore esame da fare, con ricetta bianca. Quindi ora ne ho una. Però non si trova nessuna data disponibile in tutta la Sardegna. Quindi il codice si blocca per quello. Ho provato un po' tutta la sera, ma niente.

Appena salterà fuori qualcosa, tornerò a farti sapere! ;)
aggittoriu
Utente Senior
 
Post: 156
Iscritto il: 24/06/14 08:49

Re: Date CUP Web prenotabili su foglio excel

Postdi aggittoriu » 02/03/23 15:06

Ok. Trovta una data utile (nel 2024). E la macro ha funzionato correttamente. :)

Grazie ancora di tutto! ;)
aggittoriu
Utente Senior
 
Post: 156
Iscritto il: 24/06/14 08:49


Torna a Applicazioni Office Windows


Topic correlati a "Date CUP Web prenotabili su foglio excel":


Chi c’è in linea

Visitano il forum: Nessuno e 50 ospiti