Как найти элемент который находиться в #document в selenium python
мне надо найти и кликнуть по элементу который находиться в теге #document, примерно вот структура html кода:
<html>
<head></head>
<body>
#document
<html>
<head></head>
<body>
<нужный элемент с классом btn_capt>
</body>
</html>
</body>
</html>
Я уже пробовал:
driver.find_element(By.CLASS_NAME, 'btn_capt').click()
Не получилось пишет что элемент не найден. Заранее спасибо
Ответы (2 шт):
Автор решения: Eugene Violent
→ Ссылка
Попробуйте изначально найти сам тэг, а потом уже в самом тэге найти нужный элемент.
tag = driver.find_element(By.XXX, 'xxx')
element = tag.find_element(By.XXX, 'xxx')
element.click()
Автор решения: Алексей Р
→ Ссылка
В простом варианте в данном случае можно было бы обойтись следующей инструкцией
driver.find_element(By.CSS_SELECTOR, '#document .btn_capt').click()
то есть с помощью CSS Selector выбрать первый элемент с классом btn_capt, находящийся внутри элемента с идентификатором document.
Однако при долгой загрузке страницы или при отсутствии такого элемента произойдет ошибка, поэтому целесообразно ошибки обработать. Ниже приведен рабочий пример:
from selenium import webdriver
from selenium.common.exceptions import *
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
options = webdriver.ChromeOptions()
options.add_experimental_option("detach", True) # не закрывать браузер автоматически
driver = webdriver.Chrome(options=options)
driver.get('https://randstuff.ru/number/') # в вашем случае ваш URL
selector = '#page .number' # в вашем случае '#document .btn_capt'
delay = 3 # секунд на ожидание загрузки страницы
content = None
try:
content = WebDriverWait(driver, delay).until(
EC.presence_of_element_located((By.CSS_SELECTOR, selector)))
print(f"Страница загружена с элементом `{selector}`!")
except TimeoutException:
print(f"Время на загрузку истекло, элемент `{selector}` на странице отсутствует!")
driver.quit()
if content is not None:
content.click()
print('Все отлично, клик удался!')
Страница загружена с элементом `#page .number`!
Все отлично, клик удался!