Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [VB.NET] Selezionare un valore da dropdown list di una pagina web con controllo WebBrowser
Forum - C# / VB.NET - [VB.NET] Selezionare un valore da dropdown list di una pagina web con controllo WebBrowser

Avatar
Giu95 (Normal User)
Newbie


Messaggi: 5
Iscritto: 07/07/2016

Segnala al moderatore
Postato alle 23:44
Giovedì, 07/07/2016
Un saluto a tutti voi.

Utilizzo il controllo WebBrowser all'indirizzo: https://www.stockpair.com/sp#trading/page.

Vorrei automatizzare alcune attività della pagina sopra citata.

Più precisamente, vorrei selezionare un valore dalla listbox della pagina (listbox centrale). La selezione di uno dei valori comporta un cambiamento dei due "form" della pagina (centrale e destro).

Utilizzando lo strumento per ispezionare gli elementi della pagina (strumento di un qualsiasi browser) ho trovato, nella sezione eventi, l'evento change associato all'oggetto SELECT (codice HTML) della listbox della pagina web.

L'oggetto SELECT contiene al suo interno una serie di oggetti OPTION contenenti i valori della listbox.

Attraverso una serie di istruzioni (che posterò a breve) sono riuscito a selezionare la voce di mio interesse.

Codice sorgente - presumibilmente C# / VB.NET

  1. Dim element As HtmlElement = WebBrowser1.Document.GetElementsByTagName("select").Cast(Of HtmlElement).First(Function(el) el.GetAttribute("classname") = "active gray IHAVEAWIDGET")
  2.  
  3. element.GetElementsByTagName("option").Cast(Of HtmlElement).First(Function(el) el.InnerText = "Nei prossimi 90 secondi").SetAttribute("selected", True)



Il problema nasce dal fatto che, nonostante il valore selezionato, non avviene alcun cambiamento nella pagina.

Ho cercato su diversi siti/forum una possibile soluzione ma sfortunatamente il problema persiste.

Ho utilizzato l'istruzione:
Codice sorgente - presumibilmente Plain Text

  1. element.InvokeMember("change")



ma senza alcun risultato.

Posto anche il codice dell'oggetto SELECT della pagina web:
Codice sorgente - presumibilmente Plain Text

  1. <select class="active gray IHAVEAWIDGET" style="width: 203px;" targetcontainer="#tradingAreaPanel .optionPanelContainer">
  2.      
  3.         <option action="/trading/optionPanel?optionType=18&pairId=111">Nei prossimi 60 secondi</option>
  4.      
  5.         <option action="/trading/optionPanel?optionType=19&pairId=111">Nei prossimi 90 secondi</option>
  6.      
  7.         <option action="/trading/optionPanel?optionType=14&pairId=111">Nei prossimi 5 minuti</option>
  8.      
  9.         <option action="/trading/optionPanel?optionType=17&pairId=111">Nei prossimi 10 minuti</option>
  10.      
  11.         <option action="/trading/optionPanel?optionType=15&pairId=111">Nei prossimi 15 minuti</option>
  12.      
  13.         <option action="/trading/optionPanel?optionType=16&pairId=111">Nei prossimi 30 minuti</option>
  14.      
  15.         <option selected="" action="/trading/optionPanel?optionType=4&pairId=111">Nei prossimi 60 minuti</option>
  16.      
  17.         <option action="/trading/optionPanel?optionType=5&pairId=111">Alla fine della giornata</option>
  18.      
  19.         <option action="/trading/optionPanel?optionType=6&pairId=111">Alla fine della settimana</option>
  20.      
  21.         <option action="/trading/optionPanel?optionType=7&pairId=111">Nei prossimi 14 giorni</option>
  22.      
  23.         <option action="/trading/optionPanel?optionType=9&pairId=111">Nei prossimi 30 giorni</option>
  24.      
  25.         <option action="/trading/optionPanel?optionType=10&pairId=111">Nei prossimi 60 giorni</option>
  26.      
  27.         <option action="/trading/optionPanel?optionType=11&pairId=111">Nei prossimi 90 giorni</option>
  28.      
  29.         <option action="/trading/optionPanel?optionType=13&pairId=111">Nei prossimi 150 giorni</option>
  30.      
  31.     </select>



Mi piacerebbe capire dove sbaglio.

Attendo un vostro riscontro.

Grazie per la pazienza :)


La pazienza è la virtù dei forti!
PM Quote
Avatar
torn24 (Normal User)
Pro


Messaggi: 138
Iscritto: 04/01/2008

Segnala al moderatore
Postato alle 7:46
Venerdì, 08/07/2016
Non sono esperto di reti, ma per fare cambiare la pagina devi comunicare col server e poi ricaricare la pagina nel webbrowser.

Come vedi alla selezione di un opzione "action" viene richiamata una pagina inviando dati a essa.

<option action="/trading/optionPanel?optionType=14&pairId=111">Nei prossimi 5 minuti</option>

se tu vuoi vedere questa "opzione" devi  impostare il webbrowser sul URL

Codice sorgente - presumibilmente Plain Text

  1. "https://www.stockpair.com/trading/optionPanel?optionType=14&pairId=111"





Ma aspetta consigli da chi ne sa di più, forse ti possono fornire una soluzione migliore.

Ultima modifica effettuata da torn24 il 08/07/2016 alle 7:56


Se si impara dai propri sbagli
non è cosi drammatico  sbagliare !
PM Quote
Avatar
Giu95 (Normal User)
Newbie


Messaggi: 5
Iscritto: 07/07/2016

Segnala al moderatore
Postato alle 9:21
Venerdì, 08/07/2016
Ciao torn24. Ti ringrazio per la risposta.

Ho già adottato questa soluzione ma il risultato ottenuto non è stato soddisfacente.

Se non ho capito male, mi hai consigliato di provare ad inserire l' URL dell'attributo ACTION come URL del controllo WebBrowser.

Così facendo, effettivamente, il valore che mi interessa viene impostato. Sfortunatamente, però, perdo alcuni oggetti della pagina come, ad esempio, i valori della listbox relativa all'importo che voglio selezionare.

Grazie ancora per la risposta.

Qualche altra idea? :)

Ultima modifica effettuata da Giu95 il 08/07/2016 alle 10:29


La pazienza è la virtù dei forti!
PM Quote
Avatar
vankraster (Member)
Rookie


Messaggi: 32
Iscritto: 05/11/2010

Segnala al moderatore
Postato alle 17:22
Sabato, 09/07/2016
Devi lanciare la seguente riga di codice da javascript
Codice sorgente - presumibilmente C# / VB.NET

  1. $("div.selectstyle div select.active :nth-child(9)").prop('selected',true).trigger('change');


dove il numero 9 è il numero dell'elemento... fai la prova con Google Console
Fammi sapere se ti serve altro.


Ci possono togliere tutto tranne la ragione e con questa possiamo ricostruire l'universo.
PM Quote
Avatar
Giu95 (Normal User)
Newbie


Messaggi: 5
Iscritto: 07/07/2016

Segnala al moderatore
Postato alle 12:48
Mercoledì, 13/07/2016
Ciao vankraster. Ti ringrazio per la risposta.

La soluzione che hai postato funziona splendidamente :k:

Grazie ancora.

Problema risolto.

Riporto, di seguito, la soluzione completa:

Codice sorgente - presumibilmente C# / VB.NET

  1. WebBrowser1.Document.Window.DomWindow.execscript("$('div.selectstyle div select.active :nth-child(9)').prop('selected',true).trigger('change');")





La pazienza è la virtù dei forti!
PM Quote
Avatar
Stefanolol10 (Normal User)
Newbie


Messaggi: 1
Iscritto: 01/12/2016

Segnala al moderatore
Postato alle 17:10
Giovedì, 01/12/2016
scusate... mi sono registrato appositamente per questa discussione... potreste rispiegarmi questa cosa però per la pagina di registrazione google?
non ho alcuna intenzione di creare programmi hack (lo dico perchè in precedenti discussioni su altri forum è venuta fuori questa discussine,cosa che mi ha disturbato un pò), ma ne ho bisogno per un sito che in seguito creerò, però giusto per capire... io provando così non ottengo niente. qualcuno che mi potrebbe spiegare il codice e come riadattarlo? grazie anticipatamente!!  

PM Quote