Попытка использовать Python и Selenium, чтобы щелкнуть ползунок/флажок

Я пытаюсь использовать Python и Selenium, чтобы щелкнуть ползунок/флажок на веб-сайте, и у меня возникают большие трудности. Я могу просто найти элемент по идентификатору (1369) и щелкнуть по нему, не беспокоясь, за исключением того, что идентификационные номера динамически меняются со временем, поэтому они оказываются для меня практически бесполезными.

Я также пытался найти элемент по классу, XPath и т. д. и щелкнуть по нему, используя множество вопросов, опубликованных в Stack Overflow в качестве ссылки, но безуспешно, поскольку, похоже, в моем сценарии есть некоторые различия в HTML-коде, которые мешают мне прогрессировать. . Любая помощь будет очень признательна, спасибо!

Ссылайтесь на HTML как на текст:

<div class = "f-box vcbox">
  <span class = "text-item box-item">Single date</span>
  <div id = "1369" class = "checkbox checbox-switch switch-primary  ">
    <label>
      <em class = "fake-input  "></em>
      <span>
        ::before
      </span>
    </label>
</div>

Ссылка на HTML-код на сайте

Код, который работает, когда идентификатор известен заранее:

driver.find_element(By.ID, "1369").click()

Код, который не сработал:

driver.find_element(By.CSS_SELECTOR, 'em.checkbox checbox-switch switch-primary').click()

driver.find_element(By.CSS_SELECTOR, 'div.checkbox.checbox-switch.switch-primary').click()

driver.find_element(By.XPATH, "//span[contains(.,'Single date')]").click()

Я также попытался найти элемент по классу/xpath. Это должно работать с правильным выражением xpath. Покажите нам, что вы пробовали.

John Gordon 02.05.2024 05:52

Скриншоты пользовательского интерфейса — это здорово, скриншоты кода или HTML — нет. Пожалуйста, прочтите, почему скриншот кода/HTML — плохая идея. Отредактируйте свой вопрос и добавьте код/HTML в виде текста в правильном формате. Кроме того, в таких случаях очень поможет ссылка на страницу.

JeffC 02.05.2024 05:56

@ мне после того, как вы обновили свой вопрос, указав HTML в виде текста. У меня есть ответ, но я хочу сначала его проверить.

JeffC 02.05.2024 06:02

Всем привет. Спасибо за ваш вклад. Я обновил свой пост, включив в него то, о чем вы просили. Если есть что-то, что можно улучшить с моей стороны, дайте мне знать, и я буду рад отредактировать снова по мере необходимости.

Benny88 02.05.2024 06:46

@JeffC рад опробовать любые предложения, спасибо, но для веб-сайта требуется вход в систему, который я не могу предоставить другим, чтобы они могли попробовать протестировать, извини, приятель.

Benny88 02.05.2024 08:13

@Benny88 Benny88 Вот почему я запрашиваю соответствующий HTML в виде текста. У меня на рабочем столе есть фиктивный HTML-файл, в который я могу вставить ваш HTML-код, открыть эту страницу в браузере и затем протестировать локаторы. Хотя во многих случаях URL-адрес лучше из-за времени и других проблем, это, по крайней мере, достойная замена.

JeffC 02.05.2024 16:16

@JeffC имеет смысл. Если я буду публиковать еще вопросы в будущем, я обязательно структурирую их таким образом.

Benny88 02.05.2024 23:31
Почему в 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 может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
7
64
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вам необходимо убедиться, что вы указываете правильные имена классов. Кажется, в имени вашего класса «checkbox-switch» допущена опечатка. Это должен быть «переключатель флажка». Кроме того, элемент не является дочерним элементом флажка класса with, поэтому ваш селектор CSS не будет работать. Вы можете попробовать что-то вроде этого:

driver.find_element(By.CSS_SELECTOR, 'div.checkbox.checkbox-switch.switch-primary').click()

Для подхода XPath вы можете попробовать следующее:

driver.find_element(By.XPATH, "//div[contains(@class, 'checkbox') and contains(@class, 'checkbox-switch') and contains(@class, 'switch-primary')]").click()

это должно работать.

Если вы посмотрите на фактический HTML-код, который был опубликован в вопросе... слово «флажок» на самом деле написано неправильно. Ни один из этих локаторов не будет работать.

JeffC 02.05.2024 16:10
Ответ принят как подходящий

Учитывая HTML

<span class = "text-item box-item">Single date</span>
<div id = "1369" class = "checkbox checbox-switch switch-primary  ">

Рядом с нами есть элемент, который можно однозначно идентифицировать по содержащемуся в нем тексту,

<span class = "text-item box-item">Single date</span>

использование и XPath

(By.XPATH, "//span[text()='Single date']")

Отсюда мы можем найти DIV прямо под ним, используя following-sibling,

(By.XPATH, "//span[text()='Single date']/following-sibling::div[1]")

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

Как нажать кнопку в раскрывающемся меню, используя селен в моем Java-приложении?
Является ли элемент присутствующего метода сломанным?
Как установить прокси с параметрами Selenium при подключении к Google-Chrome, созданному из командной строки
Запуск нескольких экземпляров селена приводит к ошибке соединения
Могу ли я выполнять поиск по определенным ключевым словам в строке поиска с помощью Selenium (python) во время парсинга веб-сайта?
Имитировать прокрутку в Rselenium или селен в Python
Как получить динамический исходный код HTML для скрытого div с помощью Python? (проблемы с селеном и красивым супом)
При использовании Electron Forge + Vite + Selenium у меня возникла ошибка javaScript в основном процессе
Что мне делать, если мой код печатает только один словарь, когда у меня есть несколько списков после очистки веб-сайта с использованием селена
EXCEL VBA Selenium щелкните svg/xlink:href