selenium.common.exceptions.Исключение NoSuchElementException: Сообщение: нет такого элемента: невозможно найти элемент. Может кто-нибудь мне помочь?

#python #selenium #exception #xpath #webdriver

#python #селен #исключение #xpath #webdriver

Вопрос:

 from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

import time

driver = webdriver.Chrome(executable_path='./drivers/chromedriver')
driver.get('https://web.whatsapp.com/')

name = input('Enter the name of user or group: ')
msg = input('Enter your message: ')
count = int(input('How many message you want to send: '))

input('Enter anything after scanning QR code')
user = driver.find_element_by_xpath('//span[@title = "{}"]'.format(name))
time.sleep(10)
user.click()
  

Он продолжает выдавать мне это сообщение, когда я его запускаю:

selenium.common.exceptions.Исключение NoSuchElementException: Сообщение: нет такого элемента.

Может кто-нибудь мне помочь? Я посмотрел его в Stackoverflow, и он сказал мне перевести драйвер в спящий режим, но он не работает.

Ответ №1:

Когда они говорят «перевести драйвер в спящий режим», они, вероятно, имеют в виду подождать, прежде чем пытаться найти элемент, но, как правило, плохой практикой является жесткое кодирование любого статического количества времени для ожидания во время тестирования. Общим решением является использование ожидаемых условий, которые будут приостанавливаться только до тех пор, пока требуется, с таймаутом:

 from selenium.webdriver.support import expected_conditions as EC

wait = WebDriverWait(driver, 10) 
user = wait.until(EC.element_to_be_clickable(By.XPATH, '//span[@title = "{}"]'.format(name))))
user.click()
  

Сказав это, обратите пристальное внимание на правильность выражения xpath, сгенерированного вашим кодом, и на ошибки, такие как не обрезанный пробел, являющийся частью заголовка элемента в DOM, неправильный тег, локатор, соответствующий нескольким элементам, один из которых в данный момент не виден и не доступен для просмотра.