Condividi:        

10eLotto importa in 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

Re: 10eLotto importa in excel

Postdi Anthony47 » 13/12/21 00:30

Niente, non mi sono orientato, quindi devi dire qualcosa di piu'

In particolare quali sono le informazioni da prelevare dalla pagina web; immagino che si debbano riprendere TUTTE le estrazioni presenti, ma sono tutte quelle della giornata? e a mezzanotte l'elenco si svuota? e sul file excel tu conservi del passato un riepilogo, o no tieni solo quelli della giornata?
Dai per scontato che con le query web non si fa piu' niente e dovremo aprire la pagina con IE per estrarre i dati; ad esempio questo codice compila su Foglio33 da Y2 in giu' con le estrazioni che trova:
Codice: Seleziona tutto
#If VBA7 Then
    Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
#Else
    Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#End If

Sub Get10eLottoWeb()
Dim IE As Object
Dim AColl As Object, BColl As Object, trItm
Dim I As Long, J As Long, AllNum As String
Dim oArr(0 To 500, 0 To 20), oInd As Long, mySplit

Set IE = CreateObject("InternetExplorer.Application")
myURL = "https://www.lottologia.com/10elotto5minuti/past-draws-archive/?table_view_type=default"
With IE
    .navigate myURL
    .Visible = True
    Do While .Busy: DoEvents: Loop    'Attesa not busy
    Do While .readyState <> 4: DoEvents: Loop 'Attesa documento
End With
'
Sleep 300
Set AColl = IE.document.getElementsByTagName("TD")
For I = 0 To AColl.Length - 1
    If AColl(I).className = "DATE" Then
        oArr(oInd, 0) = AColl(I).innerText
        Set trItm = AColl(I).parentElement
        AllNum = Replace(trItm.getElementsByTagName("TD")(1).innerText, Chr(13), "#", , , vbTextCompare)
        AllNum = Replace(AllNum, Chr(10), "#", , , vbTextCompare)
        AllNum = Replace(AllNum, Chr(32), "", , , vbTextCompare)
       
        AllNum = Replace(AllNum, "##", "#", , , vbTextCompare)
        AllNum = Replace(AllNum, "##", "#", , , vbTextCompare)
        AllNum = Replace(AllNum, "##", "#", , , vbTextCompare)
        AllNum = Replace(AllNum, "##", "#", , , vbTextCompare)
       
        Debug.Print oInd, AllNum
        mySplit = Split(AllNum & "#", "#", , vbTextCompare)
        If UBound(mySplit) > 5 Then
            For J = 1 To UBound(mySplit)
                oArr(oInd, J) = mySplit(J)
                If J > 19 Then Exit For
            Next J
            oInd = oInd + 1
        End If
    End If
Next I
Sheets("Foglio33").Range("Y2").Resize(500, 22).ClearContents
Sheets("Foglio33").Range("Y2").Resize(oInd + 2, 21) = oArr
'
On Error Resume Next
IE.Quit
Set IE = Nothing
End Sub

Mettilo in un Modulo vba vuoto in modo che le dichiarazioni iniziali siano in testa; poi lancia la Sub Get10eLottoWeb

Se il risultato e' simile a cio' che ti aspetti allora possiamo lavorare per adeguare il codice

Tieni pero' presente che IE è "in scadenza", quindi portati avanti creando l'ambiente "Selenium": guarda qui viewtopic.php?f=26&t=112225

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Sponsor
 

Re: 10eLotto importa in excel

Postdi raimea » 13/12/21 07:23

ciao

1_le informazioni da prelevare sono solo i 20 numeri estratti ogni 5 minuti
2_ solo quelle della giornata in corso
3_ a mezzanotte si vuota e iniziano a pubblicare le nuove
estrazioni della giornata partendo da h 00:05

4_non mi serve un archivio delle estraz. passate

la macro Get10eLottoWeb
preleva correttamente i 20 numeri della giornata

ora li scrive da Y2
ma mi servirebbe da A2
mettendo in fondo, all ultima riga , l'ultima estrazione la piu recente

ho iniziato a leggere x selenium
iniziero l istallazione seguendo passo-passo quanto descritto

grazie
S.O. win10, Excell 2019
Avatar utente
raimea
Utente Senior
 
Post: 1410
Iscritto il: 11/02/10 07:33
Località: lago

Re: 10eLotto importa in excel

Postdi Anthony47 » 13/12/21 10:46

Ho inserito i risultati in Y2 per confrontarli con quelli originali; se ti vanno bene così allora sostituiamo nel codice attuale quei due "Y2" con "A2"
Per avere il risultati in ordine inverso, invertiamo il For /Next inizializzandolo come For I = AColl.Length - 1 To 0 Step -1
Visto che il sito lo consente, ne ho approfittato per aggiungere la possibilita' di prelevare dati storici, usando Y1: se la cella e' vuota allora verranno prelevati i dati odierni; altrimenti verranno prelevati i dati del giorno indicato.
E' possibile inserire anche una data futura, nel caso si voglia provare a vincere facile; purtroppo in questo caso vengono restituiti i dati odierni... Peccato...

Infine ho inserito in A1 la data delle estrazioni.

La macro così aggiornata corrisponde a questo codice:
Codice: Seleziona tutto
Sub Get10eLottoWeb()
Dim IE As Object
Dim AColl As Object, BColl As Object, trItm
Dim I As Long, J As Long, AllNum As String
Dim oArr(0 To 500, 0 To 20), oInd As Long, mySplit
Dim ccDate As Date
'
If Sheets("Foglio33").Range("Y1").Value = "" Then
    ccDate = Date
Else
    ccDate = Sheets("Foglio33").Range("Y1").Value
End If
Set IE = CreateObject("InternetExplorer.Application")
myURL = "https://www.lottologia.com/10elotto5minuti/past-draws-archive/?table_view_type=default&date=" & Format(ccDate, "yyyy-mm-dd")
With IE
    .navigate myURL
    .Visible = True
    Do While .Busy: DoEvents: Loop    'Attesa not busy
    Do While .readyState <> 4: DoEvents: Loop 'Attesa documento
End With
'
Sleep 300
Set trItm = IE.document.getElementsByClassName("pt-title")(0)
Sheets("Foglio33").Range("A1").Value = trItm.innerText
Set AColl = IE.document.getElementsByTagName("TD")
For I = AColl.Length - 1 To 0 Step -1
    If AColl(I).className = "DATE" Then
        oArr(oInd, 0) = AColl(I).innerText
        Set trItm = AColl(I).parentElement
        AllNum = Replace(trItm.getElementsByTagName("TD")(1).innerText, Chr(13), "#", , , vbTextCompare)
        AllNum = Replace(AllNum, Chr(10), "#", , , vbTextCompare)
        AllNum = Replace(AllNum, Chr(32), "", , , vbTextCompare)
       
        AllNum = Replace(AllNum, "##", "#", , , vbTextCompare)
        AllNum = Replace(AllNum, "##", "#", , , vbTextCompare)
        AllNum = Replace(AllNum, "##", "#", , , vbTextCompare)
        AllNum = Replace(AllNum, "##", "#", , , vbTextCompare)
       
        Debug.Print oInd, AllNum
        mySplit = Split(AllNum & "#", "#", , vbTextCompare)
        If UBound(mySplit) > 5 Then
            For J = 1 To UBound(mySplit)
                oArr(oInd, J) = mySplit(J)
                If J > 19 Then Exit For
            Next J
            oInd = oInd + 1
        End If
    End If
Next I
Sheets("Foglio33").Range("A2").Resize(500, 22).ClearContents
Sheets("Foglio33").Range("A2").Resize(oInd + 2, 21) = oArr
'
On Error Resume Next
IE.Quit
Set IE = Nothing
End Sub

Sostituisci il precedente codice della macro, lasciando in testa al modulo le precedenti dichiarazioni

Per usare questo approccio ti consiglio preventivamente di pulire l'area A:W di Foglio33, in modo da cancellare anche la precedente Query non piu' utilizzabile.
Le intestazioni B1:U1 le metti a mano una tantum

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: 10eLotto importa in excel

Postdi raimea » 13/12/21 17:55

ciao

bene ora in foglio33 d' appoggio ho i dati
in maniera corretta.

ultimo passaggio devono passare da fgl33 in fgl >> archivio

prima lo facevo con macro >> TrovaT in modulo1
(pulsante in fgl ambi)

la quale separava l orario e il numero estraz.
sistemando il formato ORA, in Col A Es 17:20
e il num delle Estraz in col B

mentre i numeri in fgl Archivio partono da col C

ho provato a gestire TrovaT ma non ci sono riuscito
fa molti riferimenti a delle querry tipo quella nella macro >> sistemaorari


riallego il file con la macro >> Get10eLottoWeb funzionante

https://www.dropbox.com/scl/fi/ai6jqukbkcjciiq3rcfve/preleva_2_1.xlsm?dl=0&rlkey=yoluh7cxx6s1w1c9ak2cxvxua


ciao
S.O. win10, Excell 2019
Avatar utente
raimea
Utente Senior
 
Post: 1410
Iscritto il: 11/02/10 07:33
Località: lago

Re: 10eLotto importa in excel

Postdi Anthony47 » 13/12/21 19:50

A me pare che il tuo processo sia:
Avvii la Sub TrovaT, che chiama la Sub AggiornaDati, che chiama la Sub sistemaorari, che finora eseguiva una QueryTable.Refresh, che aggiornava i dati di Foglio33 e poi chissa' che cosa.

Quindi e' da modificare certamente la Sub SistemaOrari in modo che:
-chiami la Sub Get10eLottoWeb (invece di fare QueryTable.Refresh)
-trasferisca correttamente i dati da Foglio33 a foglio Archivi

La nuova Sub sistemaorari:
Codice: Seleziona tutto
Sub SistemaOrari()
Dim WQSh As String, DestSh As String, lastA As Long, I As Long, J As Long
'Versione C12313 (Dic 13 2021)
'questa macro serve a portare i numeri e orari da fgl 33 ad archivio
'inoltre li inverte mettendo in fgl arcgivio in alto i num h 00.05 ed in
' basso gli ultimi estratti

Worksheets("foglio33").Select
Call Get10eLottoWeb
WQSh = "foglio33"     '<< Il foglio dove e' posizionata la nuova web query
DestSh = "Archivio"   '<< Il foglio dove i dati vanno traslati
'
lastA = Sheets(WQSh).Cells(Rows.Count, 1).End(xlUp).Row
J = 1
For I = lastA To 2 Step -1
    Sheets(DestSh).Cells(J + 1, 1) = Replace(Right(Cells(I, "A").Value, 5), ".", ":")
    Sheets(DestSh).Cells(J + 1, 2) = Mid(Cells(I, "A").Value, 3, 3)
    Sheets(DestSh).Cells(J + 1, 3).Resize(1, 20).Value = Sheets(WQSh).Cells(I, "B").Resize(1, 20).Value
    J = J + 1
Next I
End Sub

(non ti chiedo perche' nella Get10eLottoWeb mi hai fatto mettere i dati col piu' vecchio in testa se poi Sub SistemaOrari li deve rigirare)
Per ora do' per scontato che, avendo su Archivi i dati nello stesso formato in cui li avevi prima, tutto il resto funzioni magicamente. Per ora

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: 10eLotto importa in excel

Postdi raimea » 13/12/21 20:17

ciao

(non ti chiedo perche' nella Get10eLottoWeb mi hai fatto mettere i dati col piu' vecchio in testa se poi Sub SistemaOrari li deve rigirare)


azz....
ovviamente non ha senso !!

l'errore e' stato mio ,
non ricordavo che nella macro successiva >> SistemaOrari
invertiva l' ordine :cry:

quindi , cosa devo modificare per avere anche in fgl archivio
l 'ultima estrazione nell ultima riga ? :-?

chiedo venia !
-------------------------
ci sono riuscito !

ho modificato questo pezzettino in macro >> Get10eLottoWeb

Codice: Seleziona tutto
'
Sleep 300

Set AColl = IE.document.getElementsByTagName("TD")  '<<<<
For I = 0 To AColl.Length - 1                       '<<<<<

    If AColl(I).className = "DATE" Then
        oArr(oInd, 0) = AColl(I).innerText


cosicche' l inversione in fgl archivio la fa successivamente con >> sistema orari

grazie







ciao
S.O. win10, Excell 2019
Avatar utente
raimea
Utente Senior
 
Post: 1410
Iscritto il: 11/02/10 07:33
Località: lago

Re: 10eLotto importa in excel

Postdi raimea » 13/12/21 21:36

ciao
solo X info_ correttezza:

ho letto e seguito
passo_passo
la procedura riguardo seleniumbasic
( ho predisposto per Crome)

tutto ok

il file finale >>> selenium test funziona

grazie
S.O. win10, Excell 2019
Avatar utente
raimea
Utente Senior
 
Post: 1410
Iscritto il: 11/02/10 07:33
Località: lago

Re: 10eLotto importa in excel

Postdi Anthony47 » 14/12/21 13:10

ci sono riuscito !
ho modificato questo pezzettino in macro >> Get10eLottoWeb
[. . . ]

Ma io avevo lascoato tutto come era perche' il commento in testa alla tua Sub SistemaOrari diceva:
"inoltre li inverte mettendo in fgl arcgivio in alto i num h 00.05"
Ora se Sub Get10eLottoWeb non inverte piu' e Sub SistemaOrari inverte allora in testa non avrai piu' l'orario piu' vecchio...


ho letto e seguito passo_passo
la procedura riguardo seleniumbasic
( ho predisposto per Crome)

tutto ok
il file finale >>> selenium test funziona

Se l'ambiente Selenium funziona allora potresti gia' usarlo per raccogliere questi dati.
Il codice:
Codice: Seleziona tutto
Sub Get10eLottoSel()
'richiede la Selenium Type Library
Dim AColl As WebElements, BColl As WebElements, trItm
Dim I As Long, J As Long, AllNum As String
Dim oArr(0 To 500, 0 To 20), oInd As Long, mySplit
Dim ccDate As Date, myURL As String
Dim WPage As New WebDriver
'
If Sheets("Foglio33").Range("Y1").Value = "" Then
    ccDate = Date
Else
    ccDate = Sheets("Foglio33").Range("Y1").Value
End If
myTim = Timer
myURL = "https://www.lottologia.com/10elotto5minuti/past-draws-archive/?table_view_type=default&date=" & Format(ccDate, "yyyy-mm-dd")
WPage.Start "Chrome", myURL      ' <11
'WPage.Start "edge", myURL       ' <22
WPage.Get "/"
'
Sleep 300
Set trItm = WPage.FindElementsByClass("pt-title")(1)
Sheets("Foglio33").Range("A1").Value = trItm.Text
Set AColl = WPage.FindElementsByTag("TD")
For I = AColl.Count To 1 Step -1
    If AColl(I).Attribute("class") = "DATE" Then
        oArr(oInd, 0) = AColl(I).Text
        Set trItm = AColl(I + 1)
        AllNum = Replace(trItm.Text, Chr(13), "#", , , vbTextCompare)
        AllNum = Replace(AllNum, Chr(10), "#", , , vbTextCompare)
        AllNum = Replace(AllNum, Chr(32), "", , , vbTextCompare)
        AllNum = Replace(AllNum, "##", "#", , , vbTextCompare)
        AllNum = Replace(AllNum, "##", "#", , , vbTextCompare)
        AllNum = Replace(AllNum, "##", "#", , , vbTextCompare)
        AllNum = Replace(AllNum, "##", "#", , , vbTextCompare)
        Debug.Print oInd, AllNum
        mySplit = Split(AllNum & "#", "#", , vbTextCompare)
        If UBound(mySplit) > 5 Then
            For J = 1 To UBound(mySplit)
                oArr(oInd, J) = mySplit(J - 1)
                If J > 19 Then Exit For
            Next J
            oInd = oInd + 1
        End If
    End If
Next I
Sheets("Foglio33").Range("A2").Resize(500, 22).ClearContents
Sheets("Foglio33").Range("A2").Resize(oInd + 2, 21) = oArr
Debug.Print "Completato in " & Format(Timer - myTim, "0.00")
'
On Error Resume Next
WPage.Quit
End Sub

Se vuoi integrarlo allora il mio suggerimento e' che salvi il file con un nuovo nome, poi in questo nuovo file sostituisci il codice della vecchia Sub Get10eLottoWeb con questo nuovo (lasciando pero' il titolo Get10eLottoWeb). Inoltre nel vba devi spuntare il riferimento alla Selenium Type Library:
-Menu /Strumenti /Riferimenti; scorri l'elenco, metti la spunta alla voce Selenium Type Library, completi con Ok

Noterai che in questo modo il tempo di esecuzione e' drasticamente superiore (3-5 volte piu' lento); evidentemente accedere al browser Microsoft IE con una libreria vba Microsoft (mshtml.tlb) e' molto piu' integrato che accedere con una libreria di un "terzo" (Selenium) a un browser di un quarto (Google).

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: 10eLotto importa in excel

Postdi raimea » 14/12/21 17:17

ciao

Vers. Selenium
ok funziona preleva

2 info:

1_ ogni volta che apre la pagina con crome
x prelevare devo premere su accetta la pravacy ecc... e' corretto ?

2_ in fgl archivio ultima riga mi servirebbe avere l' ultima estrazione ....

allego tutto il file completo predisposto x selenium

https://www.dropbox.com/scl/fi/eilyme9zw9j6f3g9ljxzl/10ELotto5Min_v_13_3_selenium-Copia.xlsm?dl=0&rlkey=8q766u2vhrxyal4smdw4jzs3y

ciao
S.O. win10, Excell 2019
Avatar utente
raimea
Utente Senior
 
Post: 1410
Iscritto il: 11/02/10 07:33
Località: lago

Re: 10eLotto importa in excel

Postdi Anthony47 » 14/12/21 21:28

Il comportamento di Chrome non e' pilotabile da Selenium; comunque l'estrazione procede anche senza accettare i termini.

Se devi capovolgere i dati allora modifica sempre il solito For I= /Next I all'interno della Sub Get10eLottoSel:
Codice: Seleziona tutto
For I = 1 To AColl.Count 


Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: 10eLotto importa in excel

Postdi raimea » 14/12/21 22:39

ciao
ora ok tutto ok anche vers. selenium

grazie
S.O. win10, Excell 2019
Avatar utente
raimea
Utente Senior
 
Post: 1410
Iscritto il: 11/02/10 07:33
Località: lago

Precedente

Torna a Applicazioni Office Windows


Topic correlati a "10eLotto importa in excel":


Chi c’è in linea

Visitano il forum: Nessuno e 69 ospiti