ho un blocco di codice fatto con selenium che funziona correttamente MA lo devo applicare su due diversi link dello stesso sito Ilink1 e ilink2 , quindi devo creare un qualche ciclo che finita la ricerca su per es ilink1 passi alla ricerca su iLink2 , spazzolando sempre lo stesso blocco di selenium . Ho provato a mettere dei riferimenti X e Y ma o sbaglio la logica o sbaglio il sistema. Ripeto, la parte di scrping è ok. Tanto per intenderci la stessa procedura con due macro separate, dove cambia solo il link, l'ho già realizzata ed è perfettamente funzionante.
Solo che mi sto intestardendo a voler unificare in un solo codice le due procedure di interrogazione.
Uffa che fatica e sono sicuro di non essere stato chiaro a sufficienza.
Qui un esempio che funziona ma solo per uno dei due link per l'altro nisba .
https://ufile.io/109zldcb
PS in questo file le X accanto agli Isin sono da mettere manualmente , nel progetto completo vengono copiate da un'altra pagina.
e qui il codice .
- Codice: Seleziona tutto
Option Explicit
Sub Aggiorna()
Dim driver As New Selenium.ChromeDriver
Dim iTables As Selenium.WebElements
Dim Data()
Dim ur As Long
Dim myIsin As String
Dim i As Integer
Dim n As Integer
Dim r As Long
Dim c As Integer
Dim bln As Boolean, bln1 As Boolean
Dim Ws1 As Worksheet
Dim iLink1 As String
Dim iLink2 As String
Set Ws1 = Sheets("Dati")
Ws1.Activate
ur = Ws1.Cells(Rows.Count, 2).End(xlUp).Row
Range("B1:P1") = Array("Isin", "Denominazione", "Sottostante", "Facoltà", "Strike", "Scadenza", "Prezzo Rif.", "Barriera", "Categoria", _
"Prezzo", "Perf.da.INIZIO", "Perf.1gg", "Perf.1M", "Perf.6M", "Perf.1A")
Ws1.Range("I2:z" & ur).Clear
' codifica come stringa
Ws1.Range("I2:z" & ur).Select
With Selection
.NumberFormat = "@"
End With
Range("a1").Select
With driver
.Start
'.AddArgument ("--headless")
.Window.Maximize
For i = 2 To ur
bln = False
myIsin = Range("B" & i)
iLink1 = "https://www.borsaitaliana.it/borsa/cw-e-certificates/scheda/" & myIsin & ".html?lang=it"""
iLink2 = "https://www.borsaitaliana.it/borsa/cw-e-certificates/dati-mercato.html?isin=" & myIsin & "&lang=it"
If Ws1.Range("A" & i) = "X" Then ' qui ho tentato mettendo degli indicatori X e Y per correlare il bln e bln1
bln = True
bln1 = False
.Get iLink1
ElseIf Ws1.Range("A" & i) = "Y" Then
bln = False
bln1 = True
.Get iLink2
End If
On Error Resume Next
driver.Manage.DeleteAllCookies
driver.FindElementByCss(".ccc-notify-button.ccc-tabbable.ccc-accept-button").Click
driver.FindElementByCss("#ccc-dismiss-button").Click
On Error GoTo 0
.Wait 1000
If bln = True Or bln1 = True Then
Set iTables = .FindElementsByCss("table")
For n = 1 To iTables.Count
Data = iTables(n).AsTable.Data
For c = 1 To UBound(Data, 1)
For r = 1 To UBound(Data, 1)
If InStr(Data(r, 1), "Barriera") Then ' link1
Cells(i, 9) = Data(r, 2)
End If
If InStr(Data(r, 1), "Categoria di Borsa") Then ' link1
Cells(i, 10).Value = Data(r, 2)
End If
If bln = True Then GoTo 20
If InStr(Data(r, 1), "Prezzo Acquisto") Then 'link2
Cells(i, 11) = Data(r, 2)
End If
If InStr(Data(r, 1), "Performance Inizio") Then
Cells(i, 12).Value = Data(r, 2)
End If
If InStr(Data(r, 1), "Performance 1 Giorno") Then
Cells(i, 13) = Data(r, 2)
End If
If InStr(Data(r, 1), "Performance 1 mese") Then
Cells(i, 14) = Data(r, 2)
End If
If InStr(Data(r, 1), "Performance 6 mesi") Then
Cells(i, 15) = Data(r, 2)
End If
If InStr(Data(r, 1), "Performance 1 anno") Then
Cells(i, 16) = Data(r, 2)
End If
20:
Ws1.Range("A" & i) = "Y"
Next
Next
Next n
End If
Next
.Quit
End With
Ws1.Range("A1").Select
MsgBox ("Finito")
End Sub