PROBLEMA selenium webdriver python bot

Pubblicità

Leo_nard

Nuovo Utente
Messaggi
27
Reazioni
1
Punteggio
21
ciao essendo nuovo con selenium, ho bisogno di aiuto per cliccare un "bottone" tra due button tags. Ho provato a usare find_element_by_tag_name, ma non funziona perche ci sono altri button tag sparsi nel codice, in caso avreste un metodo magari anche usando un for su come considerare tutti i button tag cosi che poi possa considerare solo quello che mi serve? Se invece provassi find_element_by_class_name o by_xpath mi dice che non ha trovato nulla e quindi mi ritorna un eccezione . Qualcuno potrebbe aiutarmi perfavore? Questo è il codice:
HTML:
<div class="footer--1L-3T">
<div class="buttonContainer--33jjD" data-role="button-container">
  <div class="buttonContainerItem--286mU restrictedMinWidth--1yzrO" data-role="button-container-item">
   <button class="button--3h5xe buttonSizeDefault--3mQ1i buttonStateDefault--3rSF6
   buttonLabelPositionInside--2JRkN buttonIconPositionLeft--2FL2w buttonThemePopup--38gEr
   buttonModeDesktop--i3Cpv buttonFitWidth--2WSgF" data-role="button" tabindex="-1">
    <span data-role="button-bordered" class="bordered--3kSwE roundingBoth--177dl">
     <span data-role="button-label" class="label--2kPAA labelCapitalized--3pF45">Exit</span>
    </span>
   </button>
  </div>
<div class="buttonContainerItem--286mU restrictedMinWidth--1yzrO" data-role="button-container-item">
  <button class="button--3h5xe buttonSizeDefault--3mQ1i buttonStateDefault--3rSF6
  buttonLabelPositionInside--2JRkN buttonIconPositionLeft--2FL2w buttonThemePopup--38gEr
  buttonModeDesktop--i3Cpv buttonFitWidth--2WSgF" data-role="button" tabindex="-1">
   <span data-role="button-bordered" class="bordered--3kSwE roundingBoth--177dl">
    <span data-role="button-label" class="label--2kPAA labelCapitalized--3pF45">OK</span>
   </span>
  </button>
</div>
</div>
dovrei premere il pulsante ok che è il secondo "bottone".
 
Ultima modifica da un moderatore:
La strada migliore credo sia creare un selettore complesso che comprenda la struttura button-span-span e testo OK
Per un aiuto nel farlo puoi usare il Selenium IDE che, in Chrome e Firefox, ti fa registrare le azioni e poi genera un codice che puoi usare.
Il linguaggio è relativo perchè il codice del selettore è comune e lo puoi riutilizzare.
 
La strada migliore credo sia creare un selettore complesso che comprenda la struttura button-span-span e testo OK
Per un aiuto nel farlo puoi usare il Selenium IDE che, in Chrome e Firefox, ti fa registrare le azioni e poi genera un codice che puoi usare.
Il linguaggio è relativo perchè il codice del selettore è comune e lo puoi riutilizzare.
grazie mille ora provo a vedere se riesco :)
 
La strada migliore credo sia creare un selettore complesso che comprenda la struttura button-span-span e testo OK
Per un aiuto nel farlo puoi usare il Selenium IDE che, in Chrome e Firefox, ti fa registrare le azioni e poi genera un codice che puoi usare.
Il linguaggio è relativo perchè il codice del selettore è comune e lo puoi riutilizzare.
ho provato a usare il path che ho ottenuto con Selenium IDE ma mi dice comunque che non riesce a trovare nulla. C'è qualcos'altro che posso fare per farlo funzionare? intanto click() va bene come comando o dovrei usare submit()?
 
ho provato a usare il path che ho ottenuto con Selenium IDE ma mi dice comunque che non riesce a trovare nulla. C'è qualcos'altro che posso fare per farlo funzionare? intanto click() va bene come comando o dovrei usare submit()?
click va bene
metti qui il path che ti ha dato e vediamo...
 
click va bene
metti qui il path che ti ha dato e vediamo...
ti elenco tutti i vari output di selenium ide:
css=.buttonContainerItem--286mU:nth-child(2) .bordered--3kSwE

* xpath=//div[@id='root']/div/div/div/div[10]/div/div/div/div[3]/div/div[2]/button/span

* xpath=//div[3]/div/div[2]/button/span

xpath=//span[contains(.,'OK')]

pero io ho provato solo quelli con gli * perche gli altri non so come usarli, se eseguo il codice ottengo questo errore:

button = browser.find_element_by_xpath("//div[3]/div/div[2]/button/span")
button.click()

output:
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//div[3]/div/div[2]/button/span"}
(Session info: chrome=88.0.4324.190)
 
* xpath=//div[@id='root']/div/div/div/div[10]/div/div/div/div[3]/div/div[2]/button/span

* xpath=//div[3]/div/div[2]/button/span

xpath=//span[contains(.,'OK')]
Non so perchè ne hai 3, dovrebbe essere uno solo.
Quando registri segui i passi che farebbe il test automatico, devono essere sempre uguali, se a volte devi fare cose diverse la faccenda si complica perchè devi riconoscere quelle situazioni.

Stai avendo problemi perchè Selenium nasce principalmente come ambiente di test per pagine sviluppate dall'utente stesso e non per fare bot.
Se la pagina era tu ci mettevi un bel id e non avevi problemi di accesso all'elemento...
 
Non so perchè ne hai 3, dovrebbe essere uno solo.
Quando registri segui i passi che farebbe il test automatico, devono essere sempre uguali, se a volte devi fare cose diverse la faccenda si complica perchè devi riconoscere quelle situazioni.

Stai avendo problemi perchè Selenium nasce principalmente come ambiente di test per pagine sviluppate dall'utente stesso e non per fare bot.
Se la pagina era tu ci mettevi un bel id e non avevi problemi di accesso all'elemento...
me ne da 4 perché ogni click che faccio mi da più modi per scrivere lo stesso click. Il problema è che il bot non preme sui pulsanti, ad esempio in quel frammento di codice ci sono annidati i tag div,button,span,span, che delimitano il mio pulsante e ho provato a usare click() su ognuno di essi ma nessuno ha funzionato eppure deve essere uno di quei 4 per forza. Ho riscontrato lo stesso problema anche su un altro bot, ogni volta che tra i tag button non c'è scritto type="button" o type="submit" sembra che non possa essere cliccato. Hai qualche idea/soluzione ? O forse dovrei usare un altro tool che non sia selenium?
 
ci sono annidati i tag div,button,span,span, che delimitano il mio pulsante
Il path li comprende tutti e va usato quello: //div[@id='root']/div/div/div/div[10]/div/div/div/div[3]/div/div[2]/button/
ho provato a usare click() su ognuno di essi
Pur passando l'evento è meglio farlo sul solo pulsante
Guarda il path che ti ho messo in alto, devi accedere al pulsante

Comunque dopo che hai registrato una sequenza di comandi la puoi riprodurre e testare, se è corretta deve funzionare direttamente dal plugin
Se non va vuol dire che non è stato selezionato il pulsante
 
Il path li comprende tutti e va usato quello: //div[@id='root']/div/div/div/div[10]/div/div/div/div[3]/div/div[2]/button/

Pur passando l'evento è meglio farlo sul solo pulsante
Guarda il path che ti ho messo in alto, devi accedere al pulsante

Comunque dopo che hai registrato una sequenza di comandi la puoi riprodurre e testare, se è corretta deve funzionare direttamente dal plugin
Se non va vuol dire che non è stato selezionato il pulsante
ti riferisci al selenium ide? in caso da li mi funziona ma se incollo quel path sul programma mi da errore. Ho provato a mettere pure il tuo codice ma niente da fare. C'è un modo per simulare lo spostamento del mouse e il click da integrare nel codice? non saprei davvero come sistemare senno
 
Pubblicità
Pubblicità
Indietro
Top