#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’)