Не удается найти элемент SVG в Google calender (python)

#html #python-3.x #selenium #svg

#HTML #python-3.x #селен #svg

Вопрос:

Я пытаюсь удалить событие в повестке дня Google. Но каждый раз, когда я получаю сообщение об ошибке, webdriver не может найти элемент. изображение элемента

 Exception has occurred: TimeoutException
Message: 
  File "C:UserscuyveDesktopgitss-tasksgoogle_agenda_API.py", line 105, in delete_event
    delete = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[4]/div/div/div[2]/span/div/div/div[1]/div/div/div[2]/div[2]/div/span/span/svg")))
  

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

 delete = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[4]/div/div/div[2]/span/div/div/div[1]/div/div/div[2]/div[2]/div/span/span/svg")))
delete.click()
  

Ответ №1:

Xpath не может найти svg элементы при обычном подходе.

Вместо:

 //svg
  

Вам нужно использовать:

 //*[name()='svg']
  

Вы также должны стараться избегать жестко закодированных xpaths. Любое изменение в любой части страницы по вашему текущему пути (а это длинный путь) приведет к его разрыву.

Для вашего календаря Google вы можете использовать это:

 //div[@data-tooltip='Delete event']//*[name()='svg']
  

Это соответствует одному уникальному идентификатору следующим образом:
devtools xpath

Комментарии:

1. спасибо, что драйвер нашел элемент, но он не нажимает на него. Сообщения об ошибке нет, но просто ничего не происходит

2. @Arnz3 — попробуйте подождать webdriver, чтобы убедиться, что объект готов и доступен для просмотра, или попробуйте другой идентификатор 🙂 — Этому вопросу уже несколько недель, возможно, вы захотите задать новый вопрос, чтобы получить дополнительную поддержку

3. Я обнаружил проблему, просто selenium не будет щелкать элементы, если вы используете name() в идентификаторе, который я исправил с помощью //div[@data-tooltip=»Afspraak verwijderen»] //* [@class=»NMm5M»]