Я не могу понять, почему это не работает. Идентификатор, очевидно, "ReservedDateTime_2022-08-29 14:10:00"
ваша помощь была бы очень признательна
Индекс.html
<div data-function = "timeTableCell" data-sectionid = "40" data-servicetypeid = "632" data-fromdatetime = "2022-08-29 14:10:00" class = "pointer timecell text-center " style = "top: 620px; height:20px; background-color: #1862a8;color:#ffffff; position:relative;" aria-label = "2022-08-29 14:10:00" role = "row">
<script type = "text/javascript">
document.writeln('14:10');
</script>14:10
<noscript>
<label class = "radio pointer inline-block" for = "ReservedDateTime_2022-08-29 14:10:00">
<input type = "radio" id = "ReservedDateTime_2022-08-29 14:10:00" name = "ReservedDateTime" value = "2022-08-29 14:10:00" />
14:10
</label>
</noscript>
</div>
Питон
time.sleep(5)
driver.find_element_by_id("ReservedDateTime_2022-08-29 14:10:00").click()
>>
NoSuchElementException: no such element: Unable to locate element: {"method":"css selector","selector":"[id = "ReservedDateTime_2022-08-29 14:10:00"]"}
(Session info: chrome=99.0.4844.74)
div находится внутри tbody
Этот идентификатор
ReservedDateTime_2022-08-29 14:10:00
выглядит динамично по своей природе, так как имеет дату и время.
Я бы рекомендовал вам использовать имя вместо этого:
name = "ReservedDateTime"
или
CSS:
input[name='ReservedDateTime']
или XPath:
//input[@name='ReservedDateTime']
PS: Пожалуйста, проверьте в dev tools
(Google Chrome), есть ли у нас запись уникальный в HTML DOM
или нет.
Шаги для проверки:
Press F12 in Chrome
-> перейдите в раздел element
-> выполните CTRL + F
-> затем вставьте //input[@name='ReservedDateTime']
и посмотрите, получает ли желаемый element
выделенный с соответствующим узлом 1/1
.
Вы можете нажмите, как показано ниже:
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//input[@name='ReservedDateTime']"))).click()
Импорт:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
Это может означать, что каждый раз, когда вы запускаете браузер, значение зависит от времени. Рад, что мы смогли решить это вместе, ура!
Datetime может быть динамическим для каждого экземпляра, попробуйте вместо этого name
.
driver.find_element(By.NAME, 'ReservedDateTime')
Спасибо за ответ, CruisePandey. Я сделал проверку, и это выглядело хорошо! Что это значит, когда идентификатор динамический? В таблице много дат и времени, и меня интересует только ReservedDateTime_2022-08-29 14:10:00.