Condividi:        

Aiuto per selezione menu' a tendina di un sito

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

Aiuto per selezione menu' a tendina di un sito

Postdi templare77 » 04/08/16 03:50

Ciao Anthony, ciao Flash,

vi dò questo indirizzo http://www.betexplorer.com/next/soccer/?year=2016&month=08&day=05

AIUTOOO mi sono bloccato .... in questa pagina, c'è il palinsetsto delle partite ed un piccolo menù a tendina con due voci: "Kick off times" e "Leagues".

Di default il palinsesto è visualizzato con "Kick off times", mi sarebbe stramaledettamente comodo visualizzarlo selezionando la voce
"Leagues", ma come posso fare in modo che Excel faccia questo?

Grazie!!! :cry: :cry: :cry: :cry: :cry: :cry:
templare77
Utente Senior
 
Post: 153
Iscritto il: 18/04/16 06:26

Sponsor
 

Re: URGENTE!! Aiuto per selezione menu' a tendina di un sito

Postdi Flash30005 » 04/08/16 04:00

L'Id dovrebbe essere questo
id="next-filter-sort"
con opzione valore = 2
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: URGENTE!! Aiuto per selezione menu' a tendina di un sito

Postdi templare77 » 04/08/16 06:15

Ciao Flash,
grazie per la celere risposta!!! Perdona il mio limitato comprendonio....non ho capito ancora come potrei sfruttare quel dato per visualizzare il palinsesto come vorrei io.... :oops: :oops:

Anche io avevo trovato quella riga di codice però, come faccio a "dire" tramite codice VBA, apri il palinsesto ordinato per "Leagues"?

Grazie ancora!! :cry: :cry: :cry:
templare77
Utente Senior
 
Post: 153
Iscritto il: 18/04/16 06:26

Re: URGENTE!! Aiuto per selezione menu' a tendina di un sito

Postdi templare77 » 04/08/16 06:53

Forse Forse ho trovato...
navigando nel codice ho trovato due DIV, quello con id="nr-lg" e style="display: none;" dovrebbe fare al caso mio....puoi confermarmi FLASH?
templare77
Utente Senior
 
Post: 153
Iscritto il: 18/04/16 06:26

Re: URGENTE!! Aiuto per selezione menu' a tendina di un sito

Postdi templare77 » 04/08/16 07:02

No...purtroppo quel div compare solo dopo aver selezionato Leagues.......come faccio allora?
templare77
Utente Senior
 
Post: 153
Iscritto il: 18/04/16 06:26

Re: URGENTE!! Aiuto per selezione menu' a tendina di un sito

Postdi Flash30005 » 04/08/16 10:42

templare77 ha scritto:....non ho capito ancora come potrei sfruttare quel dato per visualizzare il palinsesto come vorrei io.... :oops: :oops:

Anche io avevo trovato quella riga di codice però, come faccio a "dire" tramite codice VBA, apri il palinsesto ordinato per "Leagues"?


A me sembra di aver capito che già scarichi delle tabelle da quel sito ma che vorresti scaricare i dati di League

allora invia la macro che hai in maniera tale che apporrò le modifiche (se sarà possibile farlo) con la variante o aggiunta

ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: URGENTE!! Aiuto per selezione menu' a tendina di un sito

Postdi templare77 » 04/08/16 11:30

Grazie mille FLASH (di nome e di fatto!!)

Entro nella pagina e scandaglio la tabella con class.name ="result-table lmbzero res-fix-table narrowodds", la quale può essere composta da tre tipi di righe diverse che si alternano...ecco il perchè di tre pezzi di codice con i relativi If riga.classname =

Solo che di default, il valore di quel menù a tendina è "Kick off time", che me li spariglia troppo. In modalità LEAGUES, invece gli incontri sono già aordinati per federazione e orario...vorrei evitarmi di ordinare gli incontri nell'altro modo, perchè lo dovrei fare per federazione ed orario...mi sembra più complicato...


Codice: Seleziona tutto
Set mycoll = ie.document.getElementsByTagName("table")
                     
            For Each tabella In mycoll
                If tabella.classname = "result-table lmbzero res-fix-table narrowodds" Then
                For Each riga In tabella.Rows
                    If riga.classname = "rtitle league-title" Then
                        inizio = InStr(riga.innerHTML, "href=") + 6
                        fine = InStr(riga.innerHTML, "><span") - 1
                        fedhtml = "http://www.betexplorer.com" & Trim(Mid(riga.innerHTML, inizio, fine - inizio))
                       
                        For q = 1 To UBound(myurl)
                           
                                If fedhtml = myurl(q) Then
                                    GoTo salta_riga_s
                                End If
                           
                        Next q
                        GoTo salta_tabella_s
                       
                    ElseIf riga.classname = "nday first-row" Then
                        GoTo salta_tabella_s
                    ElseIf riga.classname = "first-row" Then
                       
                        For Each td In riga.Cells
                            If td.classname = "time first-cell" Then
                                orario = td.innerText
                            ElseIf td.classname = "left nobr" Or td.classname = "left" Then
                                If InStr(td.innerText, "...") > 0 Then
                                    Set mySColl = td.getElementsByTagName("span")
                                    For Each Item In mySColl
                                        incontro = Item.Title
                                    Next Item
                                    Set mySColl = Nothing
                                Else
                                    incontro = td.innerText
                                End If
                            ElseIf td.classname = "score" Then
                                If td.innerText <> "" Then
                                    GoTo salta_riga_s
                                End If
                            ElseIf td.classname = "live-score" Then
                                If td.innerText <> "" Then
                                    GoTo salta_riga_s
                                End If
                            End If
                        Next td
                               
                        'TROVO LA FEDERAZIONE NELL'ARRAY FEDERAZIONI TENENDO PRESENTE CHE SE STO AL GIORNO
                        'ATTUALE, DEVO PRENDERE IN CONSIDERAZIONE L'ORARIO DELLA PARTITA, ALTRIMENTI SE STO AL
                        'GIORNO DOPO, NON TENGO PRESENTE L'ORARIO
                        For w = 1 To UBound(arr_federazioni) - 1
                            If i = 1 Then
                                If Trim(Right(arr_federazioni(w), Len(arr_federazioni(w)) - InStr(arr_federazioni(w), "@"))) = fedhtml And ((Format(Now, "hh:mm")) < orario) Then
                       
                                    fed = Trim(Left(arr_federazioni(w), InStr(arr_federazioni(w), "@") - 1))
                                    ReDim Preserve arr_tutte(indice_tutte)
                                    arr_tutte(indice_tutte) = incontro & " // " & orario & " rif. " & w
                                    indice_tutte = indice_tutte + 1
                                    Exit For
                                   
                                End If
                            Else
                                '*** NO ORARIO
                                If Trim(Right(arr_federazioni(w), Len(arr_federazioni(w)) - InStr(arr_federazioni(w), "@"))) = fedhtml Then
                       
                                    fed = Trim(Left(arr_federazioni(w), InStr(arr_federazioni(w), "@") - 1))
                                    ReDim Preserve arr_tutte(indice_tutte)
                                    arr_tutte(indice_tutte) = incontro & " // " & "DOMANI - " & orario & " rif. " & w
                                    indice_tutte = indice_tutte + 1
                                    Exit For
                                   
                                End If
                            End If
                        Next w
                       
                    ElseIf riga.classname = "strong" Then
                       
                        For Each td In riga.Cells
                            If td.classname = "time first-cell" Then
                                orario = td.innerText
                            ElseIf td.classname = "left nobr" Or td.classname = "left" Then
                                If InStr(td.innerText, "...") > 0 Then
                                    Set mySColl = td.getElementsByTagName("span")
                                    For Each Item In mySColl
                                        incontro = Item.Title
                                    Next Item
                                    Set mySColl = Nothing
                                Else
                                    incontro = td.innerText
                                End If
                            ElseIf td.classname = "score" Then
                                If td.innerText <> "" Then
                                    GoTo salta_riga_s
                                End If
                            ElseIf td.classname = "live-score" Then
                                If td.innerText <> "" Then
                                    GoTo salta_riga_s
                                End If
                            End If
                        Next td
                       
                        'TROVO LA FEDERAZIONE NELL'ARRAY FEDERAZIONI
                        For w = 1 To UBound(arr_federazioni) - 1
                            If i = 1 Then
                                If Trim(Right(arr_federazioni(w), Len(arr_federazioni(w)) - InStr(arr_federazioni(w), "@"))) = fedhtml And ((Format(Now, "hh:mm")) < orario) Then
                       
                                    fed = Trim(Left(arr_federazioni(w), InStr(arr_federazioni(w), "@") - 1))
                                    ReDim Preserve arr_tutte(indice_tutte)
                                    arr_tutte(indice_tutte) = incontro & " // " & orario & " rif. " & w
                                    indice_tutte = indice_tutte + 1
                                    Exit For
                                   
                                End If
                            Else
                                '*** NO ORARIO
                                If Trim(Right(arr_federazioni(w), Len(arr_federazioni(w)) - InStr(arr_federazioni(w), "@"))) = fedhtml Then
                       
                                    fed = Trim(Left(arr_federazioni(w), InStr(arr_federazioni(w), "@") - 1))
                                    ReDim Preserve arr_tutte(indice_tutte)
                                    arr_tutte(indice_tutte) = incontro & " // " & "DOMANI - " & orario & " rif. " & w
                                    indice_tutte = indice_tutte + 1
                                    Exit For
                                   
                                End If
                            End If
                        Next w
                       
                    ElseIf riga.classname = "" Then
                       
                        For Each td In riga.Cells
                            If td.classname = "time first-cell" Then
                                orario = td.innerText
                            ElseIf td.classname = "left nobr" Or td.classname = "left" Then
                                If InStr(td.innerText, "...") > 0 Then
                                    Set mySColl = td.getElementsByTagName("span")
                                    For Each Item In mySColl
                                        incontro = Item.Title
                                    Next Item
                                    Set mySColl = Nothing
                                Else
                                    incontro = td.innerText
                                End If
                            ElseIf td.classname = "score" Then
                                If td.innerText <> "" Then
                                    GoTo salta_riga_s
                                End If
                            ElseIf td.classname = "live-score" Then
                                If td.innerText <> "" Then
                                    GoTo salta_riga_s
                                End If
                            End If
                        Next td
                                             
                        'TROVO LA FEDERAZIONE NELL'ARRAY FEDERAZIONI
                        For w = 1 To UBound(arr_federazioni) - 1
                            If i = 1 Then
                                If Trim(Right(arr_federazioni(w), Len(arr_federazioni(w)) - InStr(arr_federazioni(w), "@"))) = fedhtml And ((Format(Now, "hh:mm")) < orario) Then
                       
                                    fed = Trim(Left(arr_federazioni(w), InStr(arr_federazioni(w), "@") - 1))
                                    ReDim Preserve arr_tutte(indice_tutte)
                                    arr_tutte(indice_tutte) = incontro & " // " & orario & " rif. " & w
                                    indice_tutte = indice_tutte + 1
                                    Exit For
                                   
                                End If
                            Else
                                '*** NO ORARIO
                                If Trim(Right(arr_federazioni(w), Len(arr_federazioni(w)) - InStr(arr_federazioni(w), "@"))) = fedhtml Then
                       
                                    fed = Trim(Left(arr_federazioni(w), InStr(arr_federazioni(w), "@") - 1))
                                    ReDim Preserve arr_tutte(indice_tutte)
                                    arr_tutte(indice_tutte) = incontro & " // " & "DOMANI - " & orario & " rif. " & w
                                    indice_tutte = indice_tutte + 1
                                    Exit For
                                   
                                End If
                            End If
                        Next w
                                         
                    End If
                   
salta_riga_s:

                Next riga
templare77
Utente Senior
 
Post: 153
Iscritto il: 18/04/16 06:26

Re: URGENTE!! Aiuto per selezione menu' a tendina di un sito

Postdi Anthony47 » 04/08/16 23:31

Dopo aver "navigato" all'url indicato e stabilizzato il contenuto (attesa che Ie.Busy diventi Falso e che Ie.ReadyState diventi 4 = document complete), devi impostare su 2 il valore del controllo e poi innescare l'evento "OnChange"; questo lo puoi ottenere con questo codice:
Codice: Seleziona tutto
Ie.document.getelementbyid("next-filter-sort").Value = 2
Ie.document.getelementbyid("next-filter-sort").fireevent ("onchange")

Devi poi ri-attendere Ie.Busy = Falso e Ie.ReadyState = 4; infine puoi importare le tabelle.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19181
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: URGENTE!! Aiuto per selezione menu' a tendina di un sito

Postdi templare77 » 05/08/16 00:15

Sei un mostro!!!
templare77
Utente Senior
 
Post: 153
Iscritto il: 18/04/16 06:26

Re: URGENTE!! Aiuto per selezione menu' a tendina di un sito

Postdi templare77 » 17/08/16 16:41

Ciao Anthony, altro quesito...a questo link http://www.hot-odds.com/DroppingOdds trovi una pagina con diversi menù a tendina. Non riesco a cambiare il valore del menù con etichetta "Select Sport"....

Ho provato con questo codice che mi avevi dato per l'esempio precedente:
Codice: Seleziona tutto
Ie.document.getelementbyid("SportId").Value = 6046

ma non viene visualizzato il valore "Football"....

Poi però non saprei simulare la pressione del pulsante "Search"......can you help me? :oops:
templare77
Utente Senior
 
Post: 153
Iscritto il: 18/04/16 06:26

Re: URGENTE!! Aiuto per selezione menu' a tendina di un sito

Postdi templare77 » 17/08/16 21:23

Ciao Anthony,
credo di aver risolto. In effetti il valore del menù a tendina non cambia però con questo codice, mi carica lo sport che gli impongo io:

Codice: Seleziona tutto
ie.document.getElementById("SportId").Value = 54094
ie.document.getElementById("form_submit").Click
templare77
Utente Senior
 
Post: 153
Iscritto il: 18/04/16 06:26

Re: URGENTE!! Aiuto per selezione menu' a tendina di un sito

Postdi Anthony47 » 18/08/16 01:04

E' la stessa conclusione a cui ero arrivato anche io: il valore risulta corretto, la visualizzazione rimane quella "precedente", la Search funziona regolarmente.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19181
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: URGENTE!! Aiuto per selezione menu' a tendina di un sito

Postdi templare77 » 07/09/17 23:06

Ciao Anthony, devo essermi arrugginito nel frattempo... :(

A questo link http://www.betexplorer.com/soccer/italy/serie-a-2012-2013/, puoi trovare gli incontri del campionato Italiano stagione 2012/2013. Siccome il sito è cambiato, non riesco più a simulare il click sul menù a tendina Show Last come mostrato in figura https://s26.postimg.cc/6ny8u3xzd/Cattura.jpg

A me servirebbe poter selezionare la voce 9 Months per visualizzare tutti gli incontri, solo che non riesco tramite codice VBA....potresti darmi una mano? Grazie!
templare77
Utente Senior
 
Post: 153
Iscritto il: 18/04/16 06:26

Re: Aiuto per selezione menu' a tendina di un sito

Postdi Anthony47 » 08/09/17 16:09

Avevamo gia' visto un comportamento strano simile:
-il controllo e' indirizzato e se ne puo' modificare il valore, ma la visualizzazione non cambia

Inoltre il componente non e' cliccabile, ma e' associato a un evento "onchange" che deve essere attivato dalla macro. Quindi:
Codice: Seleziona tutto
    Set myITM = IE.document.getElementById("js-leagueresults-show")
    myITM.Value = 9
    myITM.fireevent ("onchange")


Dovrai poi attendere la compilazione locale del documento, tenendo presente che non puoi usare ne' IE.Busy ne' IE.ReadyState, essendo il doc assemblato in loco dal javascript.

Dalle poche prove che ho fatto ho notato che sul fireevent il document ha 3 tabelle; dopo "pochi decimi di secondo" ne scompare una (la seconda); dopo pochi secondi (variabile pero' da 1 a 10 secondi) si torna a 3 tabelle di cui la seconda (quella di nostro interesse) ha da subito tutte le righe compilate.
Potresti quindi sincronizzarti sul numero di tabelle che torna a 3 dopo 1 secondo dal fireevent; oppure, e sarebbe in effetti meglio, aspetti che (sempre dopo 1 secondo dal fireevent) la seconda tabella abbia classname ="table-main", con un timeout che forza l'uscita dal loop diciamo di 10 secondi.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19181
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: URGENTE!! Aiuto per selezione menu' a tendina di un sito

Postdi templare77 » 08/09/17 16:23

Grazie Anthony sei monumentale! Appena torno a casa vedo. Per la stabilizzazione della pagina dopo l'evento fireevent, avevo individuato un div che appare e poi scompare
templare77
Utente Senior
 
Post: 153
Iscritto il: 18/04/16 06:26

Re: Aiuto per selezione menu' a tendina di un sito

Postdi templare77 » 15/09/19 15:10

Ciao Anthony,
l'evento fireevent ("onchane") non funziona in questa pagina....non riesco a capire perché. Io vorrei cambiare il numero di incontri visualizzati, da 20 a 100 agendo sul menù "events". Riesco a cambiaere il valore da 20 a 100, ma poi di fatto non visualizzo l'elenco aggiornato

La pagina è https://bookodds.com/en

Per poter avere la possibilità di cambiare il numero degli incontri, bisogna registrarsi e fare di conseguenza il login.
il codice te lo vorrei postare in privato perchè effettuo un login automatico con user id e password, magari dimmi come inviartelo
templare77
Utente Senior
 
Post: 153
Iscritto il: 18/04/16 06:26

Re: Aiuto per selezione menu' a tendina di un sito

Postdi templare77 » 15/09/19 21:14

Anzi....te lo metto lo stesso omettendo i dati sensibili

Codice: Seleziona tutto

Sub download()
   
   
    waittime = TimeSerial(0, 0, 2)
   
automation_error:
    If Err.Number = -2147023169 Then
        Application.Wait (Now + waittime)
        Err.Clear
        GoTo riprova_automation:
    End If


    On Error GoTo automation_error
riprova_automation:

torna_indietro_errore_ie:
        Set Ie = CreateObject("InternetExplorer.Application")
        On Error GoTo errore_ie
errore_ie:
        If Err.Number <> 0 Then
            Call IE_Sledgehammer
            Application.Wait (Now + waittime)
            Err.Clear
            GoTo torna_indietro_errore_ie
        End If
           
            prima = Timer
            With Ie
                .navigate "https://bookodds.com/en"
                .Visible = True
                Do While Ie.Busy: DoEvents: Loop
               
                Do While Ie.readystate <> 4
                    DoEvents
                    dopo = Timer
                    If dopo - prima > 15 Then
                        GoTo torna_indietro_errore_ie
                    End If
                Loop
            End With
       
            mystart = Timer
            Do
                DoEvents
                If Timer > mystart + 2 Or Timer < mystart Then Exit Do
            Loop
           
            Set login = Ie.document.getelementsbyclassname("text-info-300")
            login(0).Click
           
            Do While Ie.Busy: DoEvents: Loop
            Do While Ie.readystate <> 4
                DoEvents
            Loop
           
            Set user_passw = Ie.document.getelementsbyclassname("form-control")
            Set button_login = Ie.document.getelementsbyclassname("btn bg-blue btn-block")
           
            For Each elem In user_passw
                If elem.Name = "email" Then elem.Value = **** qui la mail ****
                If elem.Name = "pass" Then
                    elem.Value = **** qui la password ****
                    button_login(0).Click
                   
                    Do While Ie.Busy: DoEvents: Loop
                    Do While Ie.readystate <> 4
                        DoEvents
                    Loop
                   
                    Ie.navigate "https://bookodds.com/en"
                    Do While Ie.Busy: DoEvents: Loop
                    Do While Ie.readystate <> 4
                        DoEvents
                    Loop
                   
                    mystart = Timer
                    Do
                        DoEvents
                        If Timer > mystart + 2 Or Timer < mystart Then Exit Do
                    Loop
                   
                    Exit For
                End If
            Next elem
           
            Set matches_number = Ie.document.getelementbyid("shown_events")
            matches_number.Value = 100
            matches_number.fireevent ("onchange") ====>> qui non succede nulla
            Do While Ie.Busy: DoEvents: Loop
            Do While Ie.readystate <> 4
                DoEvents
            Loop
                   
            mystart = Timer
            Do
                DoEvents
                If Timer > mystart + 2 Or Timer < mystart Then Exit Do
            Loop
End Sub

templare77
Utente Senior
 
Post: 153
Iscritto il: 18/04/16 06:26

Re: Aiuto per selezione menu' a tendina di un sito

Postdi Anthony47 » 16/09/19 00:34

Senza poter vedere l'effettivo sorgente vado a occhio...
Quello di cui parli e' un "select", per modificarne il valore devi usare l'indice dei valori proposti nel suo campo <option>; ad esempio, per il secondo valore nell'elenco:
Codice: Seleziona tutto
Ie.document.getelementbyid("shown_events").selectedIndex = 1


Se il valore non viene recepito allora aggiungerai l'evento "onchange", ma non e' detto che funzioni: dipende da cosa c'e' scritto nel codice html e io non so scendere sotto l'epidermide.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19181
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Aiuto per selezione menu' a tendina di un sito

Postdi templare77 » 16/09/19 14:05

Grazie Anthony,
credo di aver risolto refreshando la pagina, con ie.refresh, ma agendo sull'icona a fianco al conto alla rovescia. Mi sono accorto infatti che il tutto funzionava una volta avvenuto il refresh tramite Javascript. Quindi ho simulato il click sull'icona di refresh ed ora sembra funzionare anche l'evento .fireevent ("onchange")
templare77
Utente Senior
 
Post: 153
Iscritto il: 18/04/16 06:26


Torna a Applicazioni Office Windows


Topic correlati a "Aiuto per selezione menu' a tendina di un sito":

aiuto windows 10
Autore: mod360
Forum: Software Windows
Risposte: 1
aiuto installazione
Autore: mod360
Forum: Software Windows
Risposte: 3

Chi c’è in linea

Visitano il forum: Nessuno e 30 ospiti

cron