Novità

Avete problemi con l'aggiornamento delle estrazioni di spaziometria?

Ouroboros

Senior Member
magia;n1986809 ha scritto:
Buonasera,
Salutando tutti gli intervenuti noi aggiorniamo senza problemi dal televideo , e segnalo che non ci funziona il link di Ouroboros.
Volevamo altresi segnalare questa discussione
http://forum.lottoced.com/forum/lott...vio-estrazioni
che avevamo aperto tempo fa.
Potrebbe essere uno spunto per continuare l' argomentazione ed eventualmente ampliare la discussione anche su come scaricare li dati da pagine web , parsing , come aveva accennato Moro80 e Mike58 ,per poter ampliare gli aggiornamenti di eventuali archivi secondari .

Ciao Magia,
provato or ora e funziona.
Ciao
 
L

LuigiB

Guest
magia;n1986809 ha scritto:
Potrebbe essere uno spunto per continuare l' argomentazione ed eventualmente ampliare la discussione anche su come scaricare li dati da pagine web , parsing , come aveva accennato Moro80 e Mike58 ,per poter ampliare gli aggiornamenti di eventuali archivi secondari .

ciao , propongo uno script che dimostra come istanziare internet explorer e leggere i dati contenuti nelle pagine.
Lo script essendo un esempio è semplice e rappresenta una base per fare altri scritpt che leggano
le estrazioni dal web.
in questo caso io ho usato il sito dei monopoli


Codice:
Option Explicit
Sub Main
    
    Dim ObjIe
    Dim s , sOut  , i ,ii , TimeStart , sUrl
    Dim cTimeOut
    Dim cREADYSTATE_COMPLETE  ' costante di internet explorer che indica la navigazione completata
    
    cREADYSTATE_COMPLETE = 4 ' la costante vale 4 (secondo documentazione)
    cTimeOut = 30 ' variabile per gestire il timeout
    
    
    ' imposto un url di prova
    sUrl ="https://www.agenziadoganemonopoli.gov.it/portale/monopoli/giochi/gioco-del-lotto/lotto_g/lotto_estr?prog=50&anno=2016"
    
    ' istanzio un oggetto internet explorer per navigare sulla link
    Set ObjIe = CreateObject("InternetExplorer.Application")
    
    ' navigo sulla link
    objIE.Navigate2 (sUrl)
    
    ' Aspetto che la paginasia caricata
        Do While   objIE.ReadyState <> cREADYSTATE_COMPLETE
        DoEventsEx
      
        Loop
    
    
    ' aspetto che nella pagina sia presente una particolare stringa che gia conosco
    ' in anticipo cerco in questo caso la stringa "<caption>Estrazione" perche
    ' in fase distudio  navigando  a mano sul sito e salvando la pagina html sull hd
    ' poi riaprendola con un editor di testo mi sono accorto che è quella la stringa che mi
    ' serve per Iniziare a fare il parsing del file.
    ' Potrebbe darsi che nella link navigata questa aparticolare stringa non
    ' esista e quindi il codice gestisce l'uscita dal ciclo do dopo un timeout
    
    s = ObjIe.Document.All(0).outerHTML ' leggo il contenuto della pagina che sto navigando
    TimeStart = Timer
    i = InStr(s , "<caption>Estrazione")' cerco la stringa conosciuta

    Do While i =0
        
        s = ObjIe.Document.All(0).outerHTML' rileggo il contenuto della pagina che sto navigando


        i = InStr(s , "<caption>Estrazione") ' ricerco la stringa conosciuta

        If Timer -TimeStart > cTimeOut Then Exit Do ' se la stringa non viene trovata dopo il timeout esce
    Loop
    
    If i > 0 Then
        ' scrivo a video il contento della variabile
        ' continuando al fare il parsing del contenuto di S
        ' (il parsing si fa individuando delle "stringhe cardine" e poi
        ' usando le funzioni per le stringhe Instr, Mid , Left , Right e via dicendo)
        ' e possibile leggere le informazioni che ci servono
        
        'cerco un'altra stringa cardine per limitare il testo da estrarre anche
        ' questa gia la conoscevo in anticipo
        ii = InStr(i ,s,"<h2>Cerca Estrazioni</h2>" ,vbTextCompare )
        ' gestisco il fatto di aver trovato la stringa oppure no
        If ii > 0 Then
            sOut = Mid(s , i , ii -i)
        Else
            sOut = Mid(s , i)
        End If
        ' scrivo a video la stringa.
        Call Scrivi(sOut)
        
    Else
        ' informo che la stringa cercata non c'era
        Call Scrivi ("Elemento non trovato")
    End If
    ' chiudo il browser
    ObjIe.Quit
    ' anniento la variabile
    Set ObjIe = Nothing
    
    
End Sub
 
Ultima modifica di un moderatore:

Joe91

Advanced Member >PLATINUM PLUS<
Buon Giorno a tutte/i.

Ciao Luigi.

Ribadisco interessante ... anche perchè introduce

a conoscenze ed elementi di html ... di cui sono totalmente ignorante.

Chiaro che si tratta di trovare e selezionare i "dati utili" e poi scriverli in archivio.

Per tutto questo avevo redatto il plug-in che vi propongo:

http://www.mediafire.com/download/pc...video_BETA.zip

:) Cordiali saluti.
 
L

LuigiB

Guest
Ciao Joe l esempio che ho proposto e molto basico e se vgliamo anche poco ortodosso. Mi spiego per leggere un file html si puo usare anche un apposita libreria che riesce a navigare tra i vari elementi ed e questa che andrebbe usata per fare le cose pulite infatti spaziometria fa cosi nello script per renderlo piu facile una volta ottenuta la stringa che rappresenta l html della pagina poi si puo operare su quella con le istruzioni che interagiscono con le stringhe. A tale proposito devo fare una precisazione nel mio esempio mi collego al sito scarico la pagina ed estraggo sommariamente dei dati questi dati li espongo a video. Ebbene dato che spaziometria per mostrare l output usa proprio htnl capita che la stringa che ho estratto dalla pagina dei monopoli si presenti a video seguendo un certo layot proprio perche la stringa in questione contiene codici dell html originale della pagina che vengono appunto interpretati come codici html. Per vedere il vero contenuto della stringa che metto a video si deve salcare la stringa su file di testo e vedere quello oppure si deve salvare l output dello script e leggerlo poi non con un browser ma con notepad o similari. Prova a remnare la parte che cerca la seconda stringa cardine e vedrai che nell output compariranno elementi della pagina originale dei monopoli propruo perche era una pagina html e viene interpretata per quello che e visto che anche soaziometria genera l output in html.
 

Moro_80

Advanced Member
Ciao,
quindi la parte in questione in questo caso è questa nel suo formato html:
Codice:
<caption>Estrazione n°50 del 26/04/2016</caption><tbody><tr>
                         <th id="R0" scope="row">NAZIONALE</th>
                         <td headers="R0">5</td>
                         <td headers="R0">66</td>
                         <td headers="R0">16</td>
                         <td headers="R0">61</td>
                         <td headers="R0">18</td>
                       </tr><tr>
                         <th id="R1" scope="row">BARI</th>
                         <td headers="R1">74</td>
                         <td headers="R1">5</td>
                         <td headers="R1">71</td>
                         <td headers="R1">25</td>
                         <td headers="R1">88</td>
                       </tr><tr>
                         <th id="R2" scope="row">CAGLIARI</th>
                         <td headers="R2">11</td>
                         <td headers="R2">41</td>
                         <td headers="R2">81</td>
                         <td headers="R2">75</td>
                         <td headers="R2">5</td>
                       </tr><tr>
                         <th id="R3" scope="row">FIRENZE</th>
                         <td headers="R3">6</td>
                         <td headers="R3">32</td>
                         <td headers="R3">74</td>
                         <td headers="R3">36</td>
                         <td headers="R3">43</td>
                       </tr><tr>
                         <th id="R4" scope="row">GENOVA</th>
                         <td headers="R4">70</td>
                         <td headers="R4">78</td>
                         <td headers="R4">65</td>
                         <td headers="R4">7</td>
                         <td headers="R4">14</td>
                       </tr><tr>
                         <th id="R5" scope="row">MILANO</th>
                         <td headers="R5">52</td>
                         <td headers="R5">43</td>
                         <td headers="R5">5</td>
                         <td headers="R5">68</td>
                         <td headers="R5">11</td>
                       </tr><tr>
                         <th id="R6" scope="row">NAPOLI</th>
                         <td headers="R6">18</td>
                         <td headers="R6">17</td>
                         <td headers="R6">60</td>
                         <td headers="R6">52</td>
                         <td headers="R6">62</td>
                       </tr><tr>
                         <th id="R7" scope="row">PALERMO</th>
                         <td headers="R7">6</td>
                         <td headers="R7">61</td>
                         <td headers="R7">14</td>
                         <td headers="R7">21</td>
                         <td headers="R7">36</td>
                       </tr><tr>
                         <th id="R8" scope="row">ROMA</th>
                         <td headers="R8">55</td>
                         <td headers="R8">39</td>
                         <td headers="R8">67</td>
                         <td headers="R8">17</td>
                         <td headers="R8">1</td>
                       </tr><tr>
                         <th id="R9" scope="row">TORINO</th>
                         <td headers="R9">89</td>
                         <td headers="R9">57</td>
                         <td headers="R9">65</td>
                         <td headers="R9">7</td>
                         <td headers="R9">26</td>
                       </tr><tr>
                         <th id="R10" scope="row">VENEZIA</th>
                         <td headers="R10">63</td>
                         <td headers="R10">13</td>
                         <td headers="R10">2</td>
                         <td headers="R10">37</td>
                         <td headers="R10">85</td>
                       </tr></tbody></table><div id="boxEvidenza">
                     <h2>Cerca Estrazioni</h2>

Saluti
 

Joe91

Advanced Member >PLATINUM PLUS<
Capisco quello che scrivi ....

perchè ho ri-trovato moltii "codici" apparentemente invisibili

che tuttavia trasformavano ... in tabella ...

quanto invece avrebbe dovuto essere solo "il contenuto" di pochi numeri

... in formato testo.

Il mio lavoro è consistito nel trattarli, spezzettando quell'unica linea ...

ripulendo le varie sotto-stringhe da questo plus inutile e "stravolgente".

Il vero imprevisto, è stata l' indisponibilità di EstrazioniArchivio.

Per cui mi appariva inaspettatamente subito e permanentemente

ad esempio un "+2 e +5 Giorni "

Insensibile ... al trattarsi l'essere la prima ... o l'ultima estrazione.

(So che hai capito ... non specifico oltre, anche perchè è piuttosto inutile

considerando che si era già superato codesto imprevisto).

Valuterò, per contro, meglio quanto hai appena scritto.

... vedo adesso-adesso che Moro-80 ha reso esplicita

la presenza di "questi" codici.

:) Buona Giornata a tutte/i.
 
Ultima modifica:
L

LuigiB

Guest
Esatto ripulire il testo estratto dalla pagina html dai codici inutili e proprio l operazione di parsing di cui parlavo un patsing a basso livello non nel senso di scadente ma nel senso di operare sul testo originale e rimuovere tutti i tag usati per l htnl. In parsing di piu alto livello si luo fare sfruttando la libreria preposta per questo scopo ..sebbene esuli dal discorso script lotto magari mettero un esempio...ciao
 

Moro_80

Advanced Member
Ciao Luigi,
ma la libreria di cui parli...è una scritta da Te per tale scopo oppure è una dll / libreria che già il visual basic 6 ha di suo ed è nata per fare l'estrazione dati??

Sarebbe bello, vedere un esempio di utilizzo...


Ciao
 
L

LuigiB

Guest
Ciao Moro no fatta da Microsoft..ora vedo se un esempio si possa fare in vbscript .. mi rendo conto di aver stimolatola curiosita di chi e interessato all informatica oltre che al lotto. ...
 
L

LuigiB

Guest
Ad esempio facendo girare lo stesso script in lottodesk nell output si dovrebbe vedere tutto il contenuto della stringa dato che l output di lottodesk e in rtf e non html...
 

janez57

Super Member >GOLD<
Buona sera a tutti/e

Grazie mille Sig. Luigi per l'aggiornamento di Spaziometria.
Con Windows10 nessun problema per l'aggiornamento come spiegato da lei.Mentre
l'ho installato su un vecchio computer con Xp non funziona però ho ovviato in questo modo:
Lancio Mozzilla FireFox vado a questo indirizzo della Lottomatica:
http://www.lottomaticaitalia.it/lotto/risultatieconcorsi/estrazioni_ultime.html
sul calendario scelgo l'estrazione che mi serve la copio poi aprendo aggiornamento manuale dell'estrazione in spaziometria schiaccio il tasto incolla ed a mano aumento il numero dell'estrazione. Ora essendo fermo all'11/6/2016 n°70 metto la successiva il numero 71 e così via.Confermo e chiudo.Poi riapro per mettere le successive.Il tutto con pochi semplici clik.
Chiedo Venia per il mio intervento
Janez
 
L

LuigiB

Guest
Ciao Janez hai fatto bene ad intervenire ed a spiegare il comprtamento in xp ..anche a me e capitato su xp lo stesso problema..irrisolvibile...comunque se uno dei pc si aggiorna puoi prendere il file delle estrazioni basedati.dat e copiarlo su quell altto...un saluto
 

Joe91

Advanced Member >PLATINUM PLUS<
Ciao Janez,

Hai provato il plugin che ho inserito qui al mesaggio #44 ?

:) Facci sapere
 
L

LuigiB

Guest
ciao a tutti , come avevo promesso ecco qui un esempio di come usare la libreria MSHTML per navigare il contenuto del documento.
Dato che il vbscript non ha tipizzazione delle variabili e le dll che io sappia non si possono referenziare in realta non si hanno tutti i vantaggi che si possono avere in un ambiente di sviluppo come vb6 (ma anche tutti gli altri altri) che consistono nell'intellisense ovvero tutti quei menu a tendina che compaiono premendo il punto dopo il nome di una variabile e che ci elencano automaticamente i nomi delle proprietà e dei metodi dell'oggetto. Usandole in vbscript bisogna ricordarsele a memoria .. oppure vederle nell'ambiente vb6 e replicarle poi nello script.
in ambiente vb6 tutte le variabili si possono dichiarare di un certo tipo e come si vede nello script ho remmato la dichiarazione.
Tuttavia incollando lo script in vb6 anziche nell'editor di spaziometria e usando la tipizzazione delle variabili (rimuovendo il rem dalle istruzioni dim... ' AS ,,,) bisogna anche referenziare la dll per far funzionare il tutto, si fa dal menu riferimenti
hostare immagini

ecco lo script per chi è interessato , come si vede nell'output ho estratto e mostro i dati in modo piu ordinato e privo di codici html come nel primo esempio.
Da qui si puo partire ad esempio per ottenere un array con i numeri estratti delle 11 ruote

Codice:
Option Explicit
Sub Main
    Dim TimeStart,cTimeOut
    Dim s,i
    Dim nIdTabella,sBuffer,sRecord
    
    Dim sUrl ' url daa navigare
    Dim ObjIe 'oggetto InternetExplorer
    Dim DocAll 'As MSHTML.HTMLDocument
    Dim e 'As MSHTML.HTMLGenericElement
    Dim tbl 'As MSHTML.HTMLTable
    Dim tbl_row 'As MSHTML.HTMLTableRow
    Dim tbl_Cell 'As MSHTML.HTMLTableCell
    Dim cREADYSTATE_COMPLETE ' costante di internet explorer che indica la navigazione completata
    
    ' inizializza variabili
    cREADYSTATE_COMPLETE = 4 ' la costante vale 4 (secondo documentazione)
    cTimeOut = 30 ' variabile per gestire il timeout
    ' imposto un url di prova
    sUrl = "https://www.agenziadoganemonopoli.gov.it/portale/monopoli/giochi/gioco-del-lotto/lotto_g/lotto_estr?prog=50&anno=2016"
    
    ' istanzio un oggetto internet explorer per navigare sulla link
    Set ObjIe = CreateObject("InternetExplorer.Application")
    ' navigo sulla link
    objIE.Navigate2(sUrl)
    ' Aspetto che la paginasia caricata
    Do While objIE.ReadyState <> cREADYSTATE_COMPLETE
        DoEventsEx
    Loop
    ' aspetto che nella pagina sia presente una particolare stringa che gia conosco
    ' in anticipo cerco in questo caso la stringa "<caption>Estrazione" perche
    ' in fase distudio  navigando  a mano sul sito e salvando la pagina html sull hd
    ' poi riaprendola con un editor di testo mi sono accorto che è quella la stringa che mi
    ' serve per Iniziare a fare il parsing del file.
    ' Potrebbe darsi che nella link navigata questa aparticolare stringa non
    ' esista e quindi il codice gestisce l'uscita dal ciclo do dopo un timeout
    
    ' ATTENZIONE la routine seguente serve per aspettare che lo script di questa
    ' specifica pagina  finisca l'esecuzione , se non aspettiamo
    ' non avremo l'estrazionecon i numeri  nei dati html.
    ' In altre circostanze e con altri siti che non hanno script come
    ' nel caso del sito dei monopoli potrebbe non essere necessario usare questo trucco
    '=======================================================================
    s = ObjIe.Document.All(0).outerHTML ' leggo il contenuto della pagina che sto navigando
    TimeStart = Timer
    i = InStr(s,"<caption>Estrazione")' cerco la stringa conosciuta
    Do While i = 0
        s = ObjIe.Document.All(0).outerHTML' rileggo il contenuto della pagina che sto navigando
        i = InStr(s,"<caption>Estrazione") ' ricerco la stringa conosciuta
        If Timer - TimeStart > cTimeOut Then Exit Do ' se la stringa non viene trovata dopo il timeout esce
    Loop
    '========================================================================
    If i > 0 Then
        ' se ho trovato una pagina contenente un'estrazione valida  procedo con la navigazione del contenuto
        ' ciclo sugli elementi html della pagina fino a trovare quello che contiene cio che voglio
        ' naturalmente conosco il nome e il tipo dell'elemento che mi interessa perche lo avevo visto analizzando
        ' precedentemente la pagina mentre studiavo il problema.
        ' Mi serve un oggetto DIV il cui nome sia "contenuti_aams"
        ' l'elemento DIV è un tag html che definisce una sezione all'interno di una pagina
        ' ogni tag ha un suo nome che si legge con la proprietà <id>
        
        
        For Each e In ObjIe.Document.All ' ciclo su tutti gli elementi del documento html
            If UCase(e.tagName) = "DIV" Then ' verifico se ho trovato l'elemento div
                If e.id = "contenuti_aams" Then ' verifico che sia l'elemento div il cui nome è quello che serve a me
                    ' avendolo trovato imposto l'oggetto documento sul contenuto
                    ' dell'elemento che ho trovato che è proprio quello che mi serve
                    ' cioè quello che contiene la tabella con i numeri estratti
                    ' si puo uscire dal  ciclo
                    Set DocAll = e.All
                    Exit For
                End If
            End If
        Next
        ' se l'oggetto è stato trovato (dal ciclo precedente) allora elenco le tabelle in esso contenute
        
        If Not DocAll Is Nothing Then ' verifico che l'elemento div ce mi serviva sia stato effettivamente trovato
            For Each e In DocAll ' ciclo su tutti i tag del documento (in qesto momento DocAll è una sezione del documetno principale)
                If UCase(e.tagName) = "TABLE" Then ' se il nome del tag html è TABLE (cioè l'oggetto tabella)
                    nIdTabella = nIdTabella + 1 ' incremento il numero delle tabelle trovate
                    sBuffer = sBuffer & "TABELLA_" & nIdTabella & vbCrLf ' alimento il buffer che contiene le righe
                    Set tbl = e ' imposto la variabile tbl sull'oggetto e , so che è è una TABLE
                    For Each tbl_row In tbl.rows ' ciclo sulle righe della tabella
                        sRecord = "" ' svuoto la variabile per preparare la nuova riga'
                        For Each tbl_Cell In tbl_row.cells ' ciclo sulle celle della riga e alimento una variabile
                            
                            sRecord = sRecord &  tbl_Cell.innerText  & "|" ' attraverso la proprietà innertext leggo il contenuto
                            
                        Next
                        ' aggiungo la variabile al buffer
                        sBuffer = sBuffer & sRecord & vbCrLf
                    Next
                End If
            Next
        End If
    Else
        sBuffer = "La pagina non contiene i dati che ci si aspetta"
    End If
    Call Scrivi(sBuffer)
    ' chiudo il browser
    ObjIe.Quit
    ' anniento la variabile
    Set ObjIe = Nothing
End Sub
 

Moro_80

Advanced Member
Ciao Luigi,
molto interessante il discorso della libreria MSHTML, l'avevo già vista ma non ancora usata...
Dunque su spaziometria non dovendo tipizzare le dll e le variabili, il tutto come da Te postato fila liscio e in output ottengo quanto segue: 13ee.jpg

La storia cambia su vb6, che è dove io "traffico" di più diciamo, dunque qui devo tipizzare le variabili e referenziare la dll. Come dichiarazione variabili ho lasciato le Tue togliendo il Rem, aggiunto le reference come da immagine un command button per far partire e una text per vedere l'output, all'esecuzione ottengo un primo errore sul DoEvents che secondo me hai sbagliato di scrivere:
Doevents.jpg

Poi sistemando il DoEvents, mi si blocca qui:
13.jpg
13e.jpg
Dandomi il Doc.All come "Nothing" direi che non trova la stringa "contenuti_aams"

E' solo una prima analisi...così al volo, Tu l'hai provato sul VB6? Gira?


Saluti
 
Ultima modifica:
L

LuigiB

Guest
ciao Moro , il doevents in vb6 si chiama doevents nel vbscript non esiste sicche si usa la funzione che offre spaziometia DoEventsEx che una volta riportato in vb6 va ritrasformata in doevents.
Riguardo al resto ci sono 2 piccole modifiche da fare DocAll va dichiarato come object (non come MSHTML.HTMLDocument) e alla fine dato che in vb6 non esiste la funzione Scrivi ol a fai tu oppure
invece di usarla valorizzi un campo testo con la proprieta multiline preimpostata a true con il valore di sbuffer
Questo codice sotto va incollato dentro l'evento click di un commandbutton su un form dove sia presente una TextBox con proprietà multiline = true e il cui nome sia Text1.
Ciao

Codice:
    Dim TimeStart, cTimeOut
    Dim s, i
    Dim nIdTabella, sBuffer, sRecord
    
    Dim sUrl ' url daa navigare
    Dim ObjIe 'oggetto InternetExplorer
    Dim DocAll As Object 'MSHTML.HTMLDocument
    Dim e As MSHTML.HTMLGenericElement
    Dim tbl As MSHTML.HTMLTable
    Dim tbl_row As MSHTML.HTMLTableRow
    Dim tbl_Cell As MSHTML.HTMLTableCell
    Dim cREADYSTATE_COMPLETE ' costante di internet explorer che indica la navigazione completata
    
    ' inizializza variabili
    cREADYSTATE_COMPLETE = 4 ' la costante vale 4 (secondo documentazione)
    cTimeOut = 30 ' variabile per gestire il timeout
    ' imposto un url di prova
    sUrl = "https://www.agenziadoganemonopoli.gov.it/portale/monopoli/giochi/gioco-del-lotto/lotto_g/lotto_estr?prog=50&anno=2016"
    
    ' istanzio un oggetto internet explorer per navigare sulla link
    Set ObjIe = CreateObject("InternetExplorer.Application")
    ' navigo sulla link
    ObjIe.Navigate2 (sUrl)
    ' Aspetto che la paginasia caricata
    Do While ObjIe.ReadyState <> cREADYSTATE_COMPLETE
        DoEvents
    Loop
    ' aspetto che nella pagina sia presente una particolare stringa che gia conosco
    ' in anticipo cerco in questo caso la stringa "<caption>Estrazione" perche
    ' in fase distudio  navigando  a mano sul sito e salvando la pagina html sull hd
    ' poi riaprendola con un editor di testo mi sono accorto che è quella la stringa che mi
    ' serve per Iniziare a fare il parsing del file.
    ' Potrebbe darsi che nella link navigata questa aparticolare stringa non
    ' esista e quindi il codice gestisce l'uscita dal ciclo do dopo un timeout
    
    ' ATTENZIONE la routine seguente serve per aspettare che lo script di questa
    ' specifica pagina  finisca l'esecuzione , se non aspettiamo
    ' non avremo l'estrazionecon i numeri  nei dati html.
    ' In altre circostanze e con altri siti che non hanno script come
    ' nel caso del sito dei monopoli potrebbe non essere necessario usare questo trucco
    '=======================================================================
    s = ObjIe.Document.All(0).outerHTML ' leggo il contenuto della pagina che sto navigando
    TimeStart = Timer
    i = InStr(s, "<caption>Estrazione") ' cerco la stringa conosciuta
    Do While i = 0
        s = ObjIe.Document.All(0).outerHTML ' rileggo il contenuto della pagina che sto navigando
        i = InStr(s, "<caption>Estrazione") ' ricerco la stringa conosciuta
        If Timer - TimeStart > cTimeOut Then Exit Do ' se la stringa non viene trovata dopo il timeout esce
    Loop
    '========================================================================
    If i > 0 Then
        ' se ho trovato una pagina contenente un'estrazione valida  procedo con la navigazione del contenuto
        ' ciclo sugli elementi html della pagina fino a trovare quello che contiene cio che voglio
        ' naturalmente conosco il nome e il tipo dell'elemento che mi interessa perche lo avevo visto analizzando
        ' precedentemente la pagina mentre studiavo il problema.
        ' Mi serve un oggetto DIV il cui nome sia "contenuti_aams"
        ' l'elemento DIV è un tag html che definisce una sezione all'interno di una pagina
        ' ogni tag ha un suo nome che si legge con la proprietà <id>
        
        
        For Each e In ObjIe.Document.All ' ciclo su tutti gli elementi del documento html
            If UCase(e.tagName) = "DIV" Then ' verifico se ho trovato l'elemento div
                If e.id = "contenuti_aams" Then ' verifico che sia l'elemento div il cui nome è quello che serve a me
                    ' avendolo trovato imposto l'oggetto documento sul contenuto
                    ' dell'elemento che ho trovato che è proprio quello che mi serve
                    ' cioè quello che contiene la tabella con i numeri estratti
                    ' si puo uscire dal  ciclo
                    Set DocAll = e.All
                    Exit For
                End If
            End If
        Next
        ' se l'oggetto è stato trovato (dal ciclo precedente) allora elenco le tabelle in esso contenute
        
        If Not DocAll Is Nothing Then ' verifico che l'elemento div ce mi serviva sia stato effettivamente trovato
            For Each e In DocAll ' ciclo su tutti i tag del documento (in qesto momento DocAll è una sezione del documetno principale)
                If UCase(e.tagName) = "TABLE" Then ' se il nome del tag html è TABLE (cioè l'oggetto tabella)
                    nIdTabella = nIdTabella + 1 ' incremento il numero delle tabelle trovate
                    sBuffer = sBuffer & "TABELLA_" & nIdTabella & vbCrLf ' alimento il buffer che contiene le righe
                    Set tbl = e ' imposto la variabile tbl sull'oggetto e , so che è è una TABLE
                    For Each tbl_row In tbl.rows ' ciclo sulle righe della tabella
                        sRecord = "" ' svuoto la variabile per preparare la nuova riga'
                        For Each tbl_Cell In tbl_row.cells ' ciclo sulle celle della riga e alimento una variabile
                            
                            sRecord = sRecord & tbl_Cell.innerText & "|" ' attraverso la proprietà innertext leggo il contenuto
                            
                        Next
                        ' aggiungo la variabile al buffer
                        sBuffer = sBuffer & sRecord & vbCrLf
                    Next
                End If
            Next
        End If
    Else
        sBuffer = "La pagina non contiene i dati che ci si aspetta"
    End If
    Text1 = sBuffer
    
    ' chiudo il browser
    ObjIe.Quit
    ' anniento la variabile
    Set ObjIe = Nothing
 
L

LuigiB

Guest
dimenticavo in vb6 anche l'oggetto ObjIE puo essere dichiarato ti un tale tipo.
Bisogna prero referenziare la librerie Microsoft Internet Controls.
Usando questo metodo non è piu necessario crerarsi la costante cREADYSTATE_COMPLETE
perche ce la forniece la libreria , quindi va remmata.sia la dichiarazioen sia la valorizzazione

Codice:
Dim ObjIe As SHDocVw.InternetExplorer
 

Moro_80

Advanced Member
Ciao Luigi,
ovviamente funziona ed è una vera chicca per un parsing da dati html serio...potrà essere d'aiuto se qualcuno si cimenta in plugin o altro per aggiornamenti estrazioni prelevate dal web.
Ecco l'output di vb6:
vb_ok.jpg

Ciao
 

Ultima estrazione Lotto

  • Estrazione del lotto
    venerdì 26 aprile 2024
    Bari
    65
    67
    84
    22
    77
    Cagliari
    38
    09
    83
    18
    20
    Firenze
    76
    24
    78
    30
    40
    Genova
    50
    56
    61
    90
    57
    Milano
    87
    21
    15
    12
    79
    Napoli
    13
    66
    86
    25
    49
    Palermo
    72
    60
    68
    74
    09
    Roma
    23
    15
    43
    07
    75
    Torino
    82
    79
    31
    41
    64
    Venezia
    66
    89
    18
    80
    41
    Nazionale
    04
    24
    10
    69
    73
    Estrazione Simbolotto
    Genova
    33
    03
    16
    35
    32
Alto