Селен не может нажать все флажки

#python #python-3.x #selenium #checkbox

#python #python-3.x #селен #флажок

Вопрос:

Сначала устанавливаются все флажки, после этого я пытаюсь снять все флажки, кроме «Киберспорт» Я не понимаю, почему Селен не может щелкнуть некоторые флажки.. Я использую этот скрипт

 checkboxes = subpage.find_elements_by_xpath(".//div[contains(@class, 'col-xs-6 col-md-3 order-item')]")  # list of all checkboxes

for i, chckbx in enumerate(checkboxes):
    if chckbx.get_attribute("data-order") != "Киберспорт":
        
         print(f"{chckbx.text}")  # I get all names of checkboxes besides "Киберспорт"
         chckbx.click()

 

Однако Selenium нажимает не на все флажки

Результат показан на картинкевведите описание изображения здесь

Первые 2 флажка в HTML:

 <div class="col-xs-6 col-md-3 order-item" data-order="Авст. футбол">
                        <div class="checkbox">
                                <input checked="checked" name="sports[]" value="20" id="sports_20" type="checkbox">
                                <label for="sports_20">
                                    <span class="custom_checkbox"></span>
                                    <p>Авст. футбол</p>
                                </label>
                        </div>
                      </div>

<div class="col-xs-6 col-md-3 order-item" data-order="Гэл.спорт">
                        <div class="checkbox">
                                <input checked="checked" name="sports[]" value="23" id="sports_23" type="checkbox">
                                <label for="sports_23">
                                    <span class="custom_checkbox"></span>
                                    <p>Гэл.спорт</p>
                                </label>
                        </div>
                      </div>

 

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

1. возможно, вы не получаете полный массив флажков… (DOM все еще может заполняться …) Попробуйте добавить режим ожидания, чтобы посмотреть, поможет ли это. Если это так, вы хотите использовать webdriverwaits и проверить наличие устаревших элементов… (или просто используйте разумный период ожидания перед получением массива ссылок на элементы флажка)

2. @pcalkins Проблема в том, что я получаю все 38 флажков и, используя «для», я могу получить все нужные мне тексты, однако я не могу нажать на него

3. включите строку, в которой вы извлекаете массив флажков… не уверен, что то, на что вы нацелены, поскольку атрибут «порядок данных» находится в div. (возможно, было бы лучше фильтровать по идентификатору и таргетировать теги флажков …)

4. @pcalkins Я добавил строку, в которой я получаю все флажки. Я использую Selenium, не скрывая браузер, поэтому я вижу, как он нажимает стрелки построчно, флажок за флажком, но он пропускает некоторые … и я не понимаю почему..

5. все еще может быть проблема с синхронизацией… похоже, что-то добавит некоторые обработчики событий, поскольку ваш щелчок работает с div. (Таким образом, dom все еще не завершил обновление, когда вы получаете свой массив … возможно, не все обработчики событий заполнены) Попробуйте режим сна и посмотрите, изменятся ли результаты. (тем не менее, я бы вместо этого настроил флажки и использовал идентификатор для фильтрации, если вы можете … в противном случае используйте текст / метку флажка … <тип ввода=флажок> …)

Ответ №1:

У флажков есть идентификатор. Может быть проще выполнить поиск по идентификатору. subpage.find_element_by_id(‘sports_20’)