Não é possível obter o selênio para clicar no botão

Aug 16 2020

Foto do elemento de inspeção do site Foto mais detalhada Meu trecho de 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()

Eu recebo isso quando tento executá-lo, qualquer ajuda seria apreciada

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

Respostas

2 DebanjanB Aug 17 2020 at 05:39

O elemento desejado é um elemento Angular , portanto, para clicar no elemento, você deve induzir WebDriverWait para o element_to_be_clickable()e pode usar qualquer uma das seguintes estratégias de localizador :

  • 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 : Você deve adicionar as seguintes importações:

    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') seleciona uma tag com name='Excel'.

Por exemplo, ele encontraria uma tag como esta:

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

O equivalente CSS para find_element_by_name é [name="Excel"].

Pela foto do elemento de inspeção do seu site, parece que você está tentando encontrar um elemento com o texto 'Excel' dentro do div, então, em vez disso, você precisa usar a seguinte função:

driver.find_element_by_link_text('Excel')

Espero que tenha ajudado!

Para saber mais sobre o driver da web Python Selenium, use este link . Me ajudou muito!