Impossible d'obtenir du sélénium pour cliquer sur le bouton

Aug 16 2020

Image de l'élément d'inspection du site Web Plus en profondeur pic Mon extrait de code

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from time import sleep
import requests
///
excel = driver.find_element_by_name('Excel')
excel.click()

J'obtiens alors ceci lorsque j'essaie de l'exécuter, toute aide serait appréciée

NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[name="Excel"]"}

Réponses

2 DebanjanB Aug 17 2020 at 05:39

L'élément souhaité est un élément angulaire , donc pour cliquer sur l'élément, vous devez induire WebDriverWait et vous element_to_be_clickable()pouvez utiliser l'une des stratégies de localisation suivantes :

  • Utilisation CSS_SELECTOR:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button[mat-button] > span.mat-button-wrapper span"))).click()
    
  • Utilisation XPATH:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@mat-button]/span[@class='mat-button-wrapper']//span[text()='Excel']"))).click()
    
  • Remarque : Vous devez ajouter les importations suivantes :

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
1 hams222 Aug 16 2020 at 13:42

driver.find_element_by_name('Excel') sélectionne une balise avec name='Excel'.

Par exemple, il trouverait une balise comme celle-ci :

<div name='Excel'>Hello</div>.

L'équivalent CSS de find_element_by_name est [name="Excel"].

D'après la photo de l'élément d'inspection de votre site Web, il semble que vous essayez de trouver un élément avec le texte "Excel" à l'intérieur de la div, donc à la place, vous devez utiliser la fonction suivante :

driver.find_element_by_link_text('Excel')

J'espère que cela a aidé!

Pour en savoir plus sur le pilote Web Python Selenium, utilisez ce lien . Cela m'a beaucoup aidé !