Condividi:        

Usare IE

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

Usare IE

Postdi Raffaele53 » 09/01/25 12:59

In riferimento a viewtopic.php?f=26&t=113467
Nuovo aggiornamento del sito ed il codice OLD-AGCOM non funziona più.

Premessa: non posso installare "Selenium" sù computer aziendali, W10 termina nel 2025 e IE (non più supportato da tempo), però funzionante ancora sul mio PC.

Ho provato con altri siti che visualizzo correttamente
(Ex https://it.wikipedia.org/wiki/Pagina_principale), invece sù
(https://datiroc.agcom.it/numerazionicallcenter) non visualizzo nulla (schermata bianca).Per cortesia potete controllare sul Vostro PC.
Come dovrò procedere in futuro? Desiderei una Vostra opinione in merito (non conosco altri metodi).

Ps. Mi sembra che l'ID della cella d'immissione numero si chiami "e-0" ???
Codice: Seleziona tutto
Option Explicit
Sub Telefoni_Agcom()
Dim Ur As Long, x As Long, c As Long, Num As String
    Dim ie As Object
    Dim Doc As Object
    Dim HTMLtr As Object
    Dim HTMLTable As Object
    Dim HTMLtd As Object
    Dim HTMLTables  As Object
    Dim oHTML_Element As IHTMLElement
    Const myURL As String = "https://datiroc.agcom.it/numerazionicallcenter"
    'Const myURL As String = "https://it.wikipedia.org/wiki/Pagina_principale"
    Ur = Range("F" & Rows.Count).End(xlUp).Row
        Set ie = CreateObject("InternetExplorer.Application")
        With ie
            .navigate myURL
            .Visible = True
            Do While .Busy: DoEvents: Loop
            Do While .readyState <> 4: DoEvents: Loop
        End With
        Set Doc = ie.document

'For x = 2 To Ur
    c = 7
    Num = "0682950305" 'Num = Cells(x, 6)
        Doc.getElementById("e-0").Value = Num '<<<<ERRORE
        For Each oHTML_Element In Doc.getElementsByTagName("input")
            If oHTML_Element.Type = "submit" Then oHTML_Element.Click:  Exit For ' circa 10 Each
        Next
        ''''''''''''''''''' Aggiunto perchè mi copiava il valore della ricerca precente
        With ie
            Do While .Busy: DoEvents: Loop
            Do While .readyState <> 4: DoEvents: Loop
        End With
        Set Doc = ie.document
        '''''''''''''''''
        Set HTMLTables = Doc.getElementsByClassName("tab-telefonia-fissa")
            For Each HTMLTable In HTMLTables ' qui salta se la ricerrca non da esito
                For Each HTMLtr In HTMLTable.getElementsByTagName("tr")
                    For Each HTMLtd In HTMLtr.getElementsByTagName("td")
                        Cells(x, c) = HTMLtd.innerText
                        c = c + 1
                    Next HTMLtd
                Next HTMLtr
            Next HTMLTable
            If Cells(x, 7) = "" Then Cells(x, 7) = "Non esiste"
'Next
    ie.Quit
    MsgBox "Finito" ', fatto in "
    Set ie = Nothing
    Set Doc = Nothing
End Sub
Raffaele53
Utente Junior
 
Post: 37
Iscritto il: 03/10/24 13:06

Sponsor
 

Re: Usare IE

Postdi Anthony47 » 09/01/25 19:07

Anche sul mio pc riesco ancora ad eseguire sessioni di InternetExplorer, però a quell’url poi non corrisponde nessuna pagina
Se guardi il “sorgente” della pagina, il “body” contiene solo 2 script:
Codice: Seleziona tutto
<body>
  <app-root></app-root>
<script src="polyfills-6EAL64PA.js" type="module"></script><script src="main-7SKJPZOL.js" type="module"></script></body>
Evidentemente quegli scripts quando si accorgono che il client e’ di tipo I.E. “vanno in sciopero”; in altre parole quel browser non e’ supportato.

Consigli? Se la ricerca e’ da fare per lavoro, dimostra a chi si occupa di IT nella tua azienda che Selenium potrebbe far risparmiare tempo e fornire un risultato più affidabile rispetto alla ricerca fatta a mano
So che non e' proprio originale, ma....
Avatar utente
Anthony47
Moderatore
 
Post: 19486
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Usare IE

Postdi Raffaele53 » 09/01/25 21:02

Grazie Anthony, in pratica ogni sito decide se le proprie pagine possono essere visualizzate da I.E. oppure negarle.

Alla Società dove lavora mio figlio, farò sapere che non ci sono altri metodi. Usando "Selenium & Edge", metto il numero nella casella mà non riesco a premere il bottone "Cerca", i risultati dovrebbero appartenere ad >>>td _ngcontent-ng-c61977633 (1/6)<<<
Se riesci ad aiutarmi Ti sarò grato.

Codice: Seleziona tutto
Option Explicit 'USARE BROWSER ................. EDGE
    Sub Telefoni_Agcom_Selenium()
        Dim Cd As New Selenium.EdgeDriver
       ' Dim Tb As Selenium.WebElements
        Dim El As Selenium.WebElement
        Dim eTr As Selenium.WebElement
        Const myURL As String = "https://datiroc.agcom.it/numerazionicallcenter"
        Dim Ur As Long, x As Long, n As Long, Col As Long, Num As String 'String per ex 02.123456789
        Ur = Range("F" & Rows.Count).End(xlUp).Row
        If x = 1 Then Exit Sub
        With Cd
            .Start
            .SetCapability "ms:edgeOptions", "{""args"":[""--headless""]}"
            .Get myURL
            .Wait 750
           ' .FindElementsByCss("button.agree-button")(1).Click    ' NON ESISTE cookies
            '.SwitchToFrame .FindElementsByTag("iframe")(1)        ' mi sposto nel frame
            '.activeElement.WaitEnabled
            x = 2 'For x = 2 To Ur
            Col = 7
            Num = "0682950306" '    Num = Cells(x, 6)
                .FindElementById("e-0").SendKeys (Chr$(127) & Num) ' inserisco il numero di telefono
                On Error Resume Next
                Do
                'QUI DOVREI PREMERE IL BOTTONE "Cerca"
                    '.FindElementsByClass("_ngcontent-ng-c1252000173").Click
                    '.FindElementsByClass("btn btn-primary").Click
                    '.FindElementsByClass("_ngcontent-ng-c1252000173").Click
                    If Err = 0 Then Exit Do
                    Err.Clear
                Loop
                On Error GoTo 0
            'QUI DOVREI ESTRARE I DATI, TUTTI NELLA STESSA RIGA PARTENDO DA COLONNA G
            Set Tb = .FindElementsByCss(".......")
            n = Tb.Count
                For Each eTr In .FindElementsByCss(".......")
                    If eTr.FindElementsByCss(".......").Count Then
                    ''  Range("G" & X).Value = .FindElementsByClass("ng-binding")(3).Attribute("innerText")
                        Cells(x, Col).Value = eTr.FindElementsByCss(".......")(6).Text: Col = Col + 1
                        Cells(x, Col).Value = eTr.FindElementsByCss(".......")(1).Text: Col = Col + 1
                        Cells(x, Col).Value = eTr.FindElementsByCss(".......")(2).Text: Col = Col + 1
                        Cells(x, Col).Value = eTr.FindElementsByCss(".......") '????  : Col = Col + 1
                        Cells(x, Col).Value = eTr.FindElementsByCss(".......") '????  : Col = Col + 1
                        Cells(x, Col).Value = eTr.FindElementsByCss(".......") '????  : Col = Col + 1
                        'DATO CHE CI SONO DUE RISULTATI, DEVE ESTRARNE 12 <td _ngcontent-ng-c61977633 (6x2)
                    End If
                Next eTr
           ' Next x
            .SwitchToParentFrame                                  ' ritorno al chiamante
 End With
'MsgBox "Fatto"
End Sub
Raffaele53
Utente Junior
 
Post: 37
Iscritto il: 03/10/24 13:06

Re: Usare IE

Postdi Anthony47 » 10/01/25 00:22

Quel sito e' un disastro... Tempi di attesa per avere una risposta 5-10-15-25! secondi...

Ho ottenuto buoni risultati con il seguente codice:
Codice: Seleziona tutto
Sub Telefoni_Agcom_Selenium()
    Dim Cd As New Selenium.EdgeDriver
   ' Dim Tb As Selenium.WebElements
    Dim El As Selenium.WebElement
    Dim eTr As Selenium.WebElement
    Dim noOne As Boolean, CollA As Object, XX As Long, MaxXX As Long
'
    Const myURL As String = "https://datiroc.agcom.it/numerazionicallcenter"
    Dim Ur As Long, x As Long, n As Long, Col As Long, Num As String 'String per ex 02.123456789
    Ur = Range("F" & Rows.Count).End(xlUp).Row
'    If x = 1 Then Exit Sub
    MaxXX = 40
    With Cd
         .Start
'            .SetCapability "ms:edgeOptions", "{""args"":[""--headless""]}"
         .Get myURL
         .Wait 750
        For x = 2 To Ur                 'loop sulle righe da esaminare
           Col = 7
           ''Num = "0682950306" '
           Num = Cells(x, 6)
               .FindElementById("e-0").SendKeys (Chr$(127) & Num) ' inserisco il numero di telefono
               On Error Resume Next
           For XX = 1 To 10             'Cerco la disponibilita' del bottone Cerca
                .Wait 300
                    'QUI DOVREI PREMERE IL BOTTONE "Cerca"
                Set CollA = .FindElementsByClass("btn-primary")
                If CollA.Count > 0 Then
                    CollA(1).Click
                    Exit For
                End If
            Next XX
            Debug.Print "X=" & x, "Wait=" & XX
            DoEvents
            noOne = False
            For XX = 1 To MaxXX         'Cerco che una risposta sia disponibile
'                Debug.Print String(XX, ".")
                .Wait 800
                Set CollA = .FindElementsByTag("td")
                If CollA.Count > 3 Then Exit For        'se >3 TD risultato pronto
                If InStr(1, CollA(1).Text, "Nessun risultato", vbTextCompare) > 0 Then      'Nessun risultato?
                    noOne = True
                    Exit For
                End If
                DoEvents
            Next XX
            Debug.Print "X=" & x, "noOne=" & noOne, "Wait=" & XX, "TD-Count=" & CollA.Count
            If noOne = False And XX < MaxXX Then
                'Se risultati disponibili, li copio:
                For XX = 1 To CollA.Count
                    Cells(x, XX + 7) = "'" & CollA(XX).Text
                    If XX >= 6 Then Exit For
                    DoEvents
                Next XX
            Else
                Cells(x, 8) = "Nessun Riscontro"
            End If
        Next x
    End With
MsgBox "Fatto"
End Sub

C'e' qualche commento che ti da l'idea di come ho ragionato per convivere con i tempi di reazione del sito

Ho messo i numeri telefonici in colonna F, e ho scritto i risultati da colonna H a M
Sulla "finestra Immediata" del vba vengono restituite informazioni sulla tempistica di elaborazione

Quanto alla disponibilita' di altri metodi, io non posso escludere che ce ne siano, ma non ne conosco perche' a me basta quello che ottengo con Selenium
Avatar utente
Anthony47
Moderatore
 
Post: 19486
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "Usare IE":


Chi c’è in linea

Visitano il forum: Nessuno e 13 ospiti