Python Селен найти флажок - PullRequest
1 голос
/ 31 марта 2020

Я пытаюсь найти флажок и нажать на него. Я пытался использовать:

driver.find_element_by_xpath(("//*[contains(text(), '2+ interchanges')]")).click()

или

driver.find_element_by_class_name('BpkCheckbox_bpk-checkbox__label__1vrLS BpkCheckbox_bpk-checkbox__label--small__16XBT')

или

driver.find_element_by_name('2+ interchanges').click()

но не повезло, всегда получаю ошибку:

selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element:

Не могли бы вы дать мне несколько советов, как мне найти этот флажок?

Спасибо!

Лучший

Код выглядит так:

    <div class="Filter_verticallySpaced__1Sm6F Filter_horizontallySpaced__RwfGp FiltersCheckboxes_colourOnHover__erAw_">
     <label class="BpkCheckbox_bpk-checkbox__2yTOQ FiltersCheckboxes_checkboxLine__7IQLY">
      <input aria-invalid="false" aria-label="2+ interchanges" checked="" class="BpkCheckbox_bpk-checkbox__input__2qMb7" name="twoPlusStops" type="checkbox"/>
      <svg class="BpkCheckbox_bpk-checkbox__icon__1KuPa" height="18" style="width: 0.75rem; height: 0.75rem;" viewbox="0 0 24 24" width="18" xmlns="http://www.w3.org/2000/svg">
       <path d="M9.4 20c-.5 0-.9-.2-1.3-.5l-5.8-5.1c-.4-.4-.5-1-.1-1.4l1.3-1.5c.4-.4 1-.5 1.4-.1l4 3.5c.2.1.4.1.6 0l9.2-10.5c.4-.4 1-.5 1.4-.1l1.5 1.3c.4.4.5 1 .1 1.4L10.9 19.3c-.4.5-.9.7-1.5.7z">
       </path>
      </svg>
      <span aria-hidden="true" class="BpkCheckbox_bpk-checkbox__label__1vrLS BpkCheckbox_bpk-checkbox__label--small__16XBT">
       2+ interchanges
      </span>
     </label>
     <span class="BpkText_bpk-text__2NHsO BpkText_bpk-text--sm__345aT FiltersCheckboxes_subText__3aG9- FiltersCheckboxes_block__1ZTpQ FiltersCheckboxes_checkboxIndent__2c49O">
      2 735 $
     </span>
    </div>
<div class="Filter_verticallySpaced__1Sm6F Filter_horizontallySpaced__RwfGp FiltersCheckboxes_colourOnHover__erAw_">
 <label class="BpkCheckbox_bpk-checkbox__2yTOQ FiltersCheckboxes_checkboxLine__7IQLY">
  <input aria-invalid="false" aria-label="1 interchange" checked="" class="BpkCheckbox_bpk-checkbox__input__2qMb7" name="oneStop" type="checkbox"/>
  <svg class="BpkCheckbox_bpk-checkbox__icon__1KuPa" height="18" style="width: 0.75rem; height: 0.75rem;" viewbox="0 0 24 24" width="18" xmlns="http://www.w3.org/2000/svg">
   <path d="M9.4 20c-.5 0-.9-.2-1.3-.5l-5.8-5.1c-.4-.4-.5-1-.1-1.4l1.3-1.5c.4-.4 1-.5 1.4-.1l4 3.5c.2.1.4.1.6 0l9.2-10.5c.4-.4 1-.5 1.4-.1l1.5 1.3c.4.4.5 1 .1 1.4L10.9 19.3c-.4.5-.9.7-1.5.7z">
   </path>
  </svg>
  <span aria-hidden="true" class="BpkCheckbox_bpk-checkbox__label__1vrLS BpkCheckbox_bpk-checkbox__label--small__16XBT">
   1 interchange
  </span>
 </label>
 <span class="BpkText_bpk-text__2NHsO BpkText_bpk-text--sm__345aT FiltersCheckboxes_subText__3aG9- FiltersCheckboxes_block__1ZTpQ FiltersCheckboxes_checkboxIndent__2c49O">
  2 787 $
 </span>
</div>

Ответы [ 2 ]

0 голосов
/ 01 апреля 2020

Хорошо, я нашел это :) Решение, я просто добавил подождать 10 секунд перед кликом и изменил xpath.

time.sleep(10)
stops_chkbox = driver.find_element_by_xpath('//*[@id="stops_content"]/div/div/div[3]/label').click()
0 голосов
/ 31 марта 2020

С помощью этого

driver.find_element_by_class_name('BpkCheckbox_bpk-checkbox__label__1vrLS BpkCheckbox_bpk-checkbox__label--small__16XBT')

вы выбрали два имени класса как одно (между каждым именем класса есть пробел). Попробуйте использовать это:

driver.find_element_by_class_name('BpkCheckbox_bpk-checkbox__label__1vrLS')

Кстати, этот

driver.find_element_by_name('2+ interchanges').click()

ищет имя в элементе (например), а не значение внутри. (Ваш тег не имеет атрибута имени)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...