Selenium с Python: выберите (и щелкните) элемент из таблицы

Я не могу понять, почему это не работает. Идентификатор, очевидно, "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

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
23
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Этот идентификатор

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

Спасибо за ответ, CruisePandey. Я сделал проверку, и это выглядело хорошо! Что это значит, когда идентификатор динамический? В таблице много дат и времени, и меня интересует только ReservedDateTime_2022-08-29 14:10:00.

Johan Blomquist 17.03.2022 15:30

Это может означать, что каждый раз, когда вы запускаете браузер, значение зависит от времени. Рад, что мы смогли решить это вместе, ура!

cruisepandey 17.03.2022 15:35

Datetime может быть динамическим для каждого экземпляра, попробуйте вместо этого name.

driver.find_element(By.NAME, 'ReservedDateTime')

Другие вопросы по теме