No se puede hacer que el selenio haga clic en el botón

Aug 16 2020

Imagen del elemento de inspección del sitio web Imagen más detallada Fragmento de mi código

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()

Luego obtengo esto cuando intento ejecutarlo, cualquier ayuda sería apreciada

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

Respuestas

2 DebanjanB Aug 17 2020 at 05:39

El elemento deseado es un elemento angular , por lo que para hacer clic en el elemento debe inducir a WebDriverWait yelement_to_be_clickable() puede usar cualquiera de las siguientes estrategias de localización :

  • usando CSS_SELECTOR:

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

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@mat-button]/span[@class='mat-button-wrapper']//span[text()='Excel']"))).click()
    
  • Nota : debe agregar las siguientes importaciones:

    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') selecciona una etiqueta con name='Excel'.

Por ejemplo, encontraría una etiqueta como esta:

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

El equivalente de CSS para find_element_by_name es [name="Excel"].

De la imagen del elemento de inspección de su sitio web, parece que está tratando de encontrar un elemento con el texto 'Excel' dentro del div, por lo que en su lugar, debe usar la siguiente función:

driver.find_element_by_link_text('Excel')

¡Espero que haya ayudado!

Para obtener más información sobre Python Selenium webdriver, use este enlace . ¡Me ayudó mucho!