Come detto in passato, questi sono giochi di tempo e di pazienza...
Il vba, tramite la libreria mshtml.tlb, consente di accedere a InternetExplorer e ai suoi oggetti.
Quindi il gioco di pazienza e' esaminare il codice sorgente di una pagina web, identificare gli elementi di interesse, trovare il giusto "appiglio" per puntarli e finalmente leggerne il valore; partendo dal livello piu' alto accessibile, il "document" della pagina.
Elementi tipici per indirizzare gli elementi sono i Tag (getElementsByTagName) e i suoi attributi, quali ID (getElementById) nei casi fortunati e Class (getElementsByClassName).
Riprendo quanto pubblicato in un messaggio precedente:
a) creiamo l'oggetto IE
b) andiamo all'url richiesto
c) cerchiamo un aggancio al nome del titolo esaminando l'oggetto; l'html relativo:
- Codice: Seleziona tutto
<article class="l-grid__cell">
<div class="w-999 | l-box">
<div class="l-box">
<div class="l-box">
<h1 class="t-text -flola-bold -size-xlg -inherit"> Carmignac Patrimoine E Eur Acc
</h1>
</div>
<div class="l-box">
<span class="t-text -size-lg -black-warm-60"><strong>176,06</strong></span>
<span class="t-text -size-lg -cbalanced"><strong>+0,16%</strong></span>
</div>
<div class="w-999__bcol | l-box | l-screen -sm-9 -md-9">
<span class="t-text -block -size-xs">Valuta: <strong>EUR</strong></span>
<span class="t-text -block -size-xs | -xs">Data: <strong>25/03/21</strong></span>
</div>
<div class="w-999__bcol -last | l-box | l-screen -sm-6 -md-6">
<!-- PORTFOLIO -->
<span class="t-text -flola-bold -uppercase -inherit"><a title="Portafoglio" href="/borsa/user/borsa-virtuale/portafoglio-aggiungi-strumento.html?code=2CARPATE"><span class="m-icon -portfolio-xs"></span> Portafoglio</a></span>
<!-- ALERT -->
<span class="t-text -flola-bold -uppercase -inherit"><a title="Email Alert" href="/borsa/pagina-personale/alerts/imposta-alert.html?id=2CARPATE&lang=it"><span class="m-icon -alert-xs"></span> Email Alert</a></span>
</div>
</div>
</div>
</article>
La "class=w-999" ci consente un aggancio al nome del Titolo, alla sua (ultima?) quotazione, alla data, alla Variazione
Per i rendimenti, essi sono riportati nella <table> n° 3; 1-mese, 12-mesi, 36-mesi e 60-mesi corrispondono ai suoi <td> n° 2, 6, 8 e 10
Per la societa' di gestione, essa si trova nell'elemento con "class=l-grid__row" n° 7 (non ho trovato altri agganci meno precari).
d) ripetiamo per ulteriori url
Cio' detto, un codice che mastica queste cose:
- Codice: Seleziona tutto
#If VBA7 Then '!!! ON TOP OF THE VBA MODULE !!!!
Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
#Else
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#End If
Sub ScanTitoli()
Dim IE As Object, myF As Object, I As Long
'
For I = 2 To Cells(Rows.Count, 2).End(xlUp).Row
myUrl = Cells(I, 2) 'L'url della pagina da accedere
If InStr(1, myUrl, "http", vbTextCompare) = 1 Then
'Se url valido, apre tramite InternetExplorer...
If IE Is Nothing Then Set IE = CreateObject("InternetExplorer.Application")
With IE
.Visible = True '... rendi visibile IE
.navigate myUrl '....vai all'url
Sleep 100 '
Do While .Busy: DoEvents: Sleep (20): Loop 'Attesa not busy
Do While .readyState <> 4: DoEvents: Sleep (20): Loop 'Attesa document
End With
Sleep (100) 'Stabilizza
'Cerca le voci di interesse
On Error Resume Next
Set myF = IE.document.getElementsByClassName("w-999")
Cells(I, "C").Value = myF(0).getElementsByTagName("h1")(0).innerText 'Descrizione
Cells(I, "E").Value = (myF(0).getElementsByTagName("strong")(0).innerText) 'quotazione
Cells(I, "G").Value = (myF(0).getElementsByTagName("strong")(1).innerText) 'variazione
Set myF = IE.document.getElementsByClassName("w-999__bcol")
Cells(I, "F").Value = myF(0).getElementsByTagName("strong")(1).innerText 'data
Set myF = IE.document.getElementsByTagName("table")
Cells(I, "H").Value = (myF(2).getElementsByTagName("td")(1).innerText) 'Rendimenti
Cells(I, "I").Value = (myF(2).getElementsByTagName("td")(5).innerText) 'Rendimenti
Cells(I, "J").Value = (myF(2).getElementsByTagName("td")(7).innerText) 'Rendimenti
Cells(I, "K").Value = (myF(2).getElementsByTagName("td")(9).innerText) 'Rendimenti
Set myF = IE.document.getElementsByClassName("l-grid__row")
gest = myF(6).innerText
Cells(I, "L") = Application.WorksheetFunction.Clean(Split(gest, Chr(10), , vbTextCompare)(5))
On Error GoTo 0
End If
Next I
'Chiusura
On Error Resume Next
IE.Quit
Set IE = Nothing
End Sub
Garantito funzionante fino alle 14:00 (UTC+1) del 27-marzo-2021, con i titoli che hai indicato nel file allegato.
Dopo non si puo' sapere, perche' in qualsiasi momento il gestore del sito puo' cambiare la struttura interna della sua pagina senza chiedere il nostro permesso.
Inoltre cambiando titolo non e' detto che la presentazione rimanga la stessa: potrebbe cambiare perche' ad esempio BorsaItaliana.it potrebbe inglobare nel suo sito pagine provenienti da altri gestori, o semplicemente perche' la tipologia di titolo richiede una struttura diversa
Ciao