Con quel metodo non hai nessuna chance di intercettare il barrato.
Devi passare a tecniche di "web scraping" usando l'ambiente Selenium (vedi
viewtopic.php?f=26&t=112225, e che mi pare abbiamo gia' usato in qualche caso).
Così facendo puoi raccogliere i dati dalle tabelle usando questo codice:
- Codice: Seleziona tutto
Sub Leggi()
Dim wPage As Object
'
Set wPage = CreateObject("Selenium.CHRomedriver")
Range("A2").Resize(300, 10).ClearContents
Call GetAllTablesSub(wPage, Range("A1").Value, 3, 1, "2.4")
wPage.Quit
Set wPage = Nothing
End Sub
Sub GetAllTablesSub(LPage As Object, myUrl As String, Optional rNum0 As Long = 1, Optional cNum0 As Long = 1, Optional TNum As String = "0")
Dim TBColl As Object
Dim I As Long, J As Long, myTim As Single
Dim RNum As Long, CNum As Long, TdtD As Object, TrtR As Object
'
LPage.Get myUrl
'
myTim = Timer
Set TBColl = LPage.FindElementsByTag("table")
RNum = rNum0: CNum = cNum0
For I = 1 To TBColl.Count
Dim kkk As Long
kkk = InStr(1, "." & TNum & ".", "." & I & ".", vbTextCompare)
If kkk > 0 Or TNum = 0 Then
RNum = RNum + 1
Cells(RNum, CNum).Value = "## Table " & I
For Each TrtR In TBColl(I).FindElementsByTag("tr")
For Each TdtD In TrtR.FindElementsByTag("td")
Cells(RNum + 1, CNum).Value = (TdtD.Text)
'kill striked text:
If InStr(1, TdtD.attribute("class") & "......", "lock", vbTextCompare) > 0 Then
Cells(RNum + 1, CNum).ClearContents
End If
CNum = CNum + 1
Next TdtD
RNum = RNum + 1
CNum = cNum0
Next TrtR
RNum = RNum + 1
DoEvents
End If
Next I
'
Debug.Print "FINE", RNum, Format(Timer - myTim, "0.00"), myUrl
End Sub
Il codice comprende la Sub Leggi (primaria) e una Sub GetAllTablesSub da richiamare dalla primaria con i giusti parametri, che sono:
-il driver Selenium da usare (wPage, nel nostro caso)
-l'Url della pagina da leggere (nel mio test l'ho inserito in A1
-il numero di riga da cui cominciare a scrivere i dati
-il numero di colonna da cui cominciare
-il numero di tabella da leggere. Se omesso verranno lette in sequenza tutte le colonne; possono essere indicate piu' colonne, usando una sintassi del tipo "2.4" (importa la 2 e la 4), oppure "1.5.2"
Le celle barrate quindi risulteranno vuote; ovviamente questo vale "oggi" sul sito bmbets.com; "domani" o su altri siti e' tutto imprevedibile
Il codice come pubblicato prevede che l'Url da esaminare sia scritto in A1 del foglio attivo, i dati raccolti vengono posizionati da riga 4 previa pulizia senza preavviso dei dati ivi presenti, vengono importate le tabelle 2 e 4 (la numerazione la stabilisce il sito in modo arbitrario; prima di scegliere 2.4 ho letto tutte le tabelle con l'opzione 0)