Как выбрать любой элемент из веб-элемента с атрибутом «display: none», используя Selenium в Python

4

Мне нужно выбрать любой элемент из веб-элемента с атрибутом display: none который выглядит так:

<div class="some_class">
  <select id="some_id" class="some_select_class" style="display: none;">
    <option value="1" data-isleaf="false" data-catid="3" data-special_message="" data-adtypeid="0">1</option>
    <option value="2" data-isleaf="true" data-catid="4" data-special_message="" data-adtypeid="1">2</option>    
  </select>
</div>

Я могу сделать это вручную из веб-браузера, но мне нужно сделать это через Selenium в Python. К сожалению, когда у меня есть следующий код:

try:
  element = selenium.webdriver.support.ui.WebDriverWait(driver, 60).until(EC.visibility_of_element_located((By.ID, 'some_id')))
  selenium.webdriver.support.ui.Select(element).select_by_value('1')
except Exception as ex:
  print(ex)

WebDriverWait выдает исключение со следующей информацией:

Сообщение: ''

Тип исключения - selenium.common.exceptions.TimeoutException

Как я могу достичь взаимодействия этого элемента? Как я могу выбрать любой элемент в этом случае?

Заранее спасибо.

  • 0
    Selenium не взаимодействует с элементами, которые имеют display: none установлен. Он взаимодействует только с видимыми элементами. Вы можете использовать execute_script() чтобы установить значение select . Сказав это, я подозреваю, что какой-то видимый элемент на странице устанавливает select . Вы, вероятно, должны выяснить, что это за элемент, и взаимодействовать с ним.
  • 0
    @Richard В случае execute_script активированные при выборе триггеры не сработают, поэтому я не смогу увидеть всплывающие новые элементы, например
Теги:
selenium
selenium-webdriver
python-2.7

1 ответ

8
Лучший ответ

Используйте execute_script() чтобы установить свойство отображения этого элемента, а затем используйте Selenium Select для выбора требуемого значения.

Ниже код должен работать для вас:

    try:
      selenium.webdriver.support.ui.WebDriverWait(driver, 60).until(EC.visibility_of_element_located((By.ID, 'some_other_id_on_page')))
      selenium.execute_script("document.getElementById('some_id').style.display='inline-block';")
      element = selenium.webdriver.support.ui.WebDriverWait(driver, 60).until(EC.visibility_of_element_located((By.ID, 'some_id')))
      selenium.webdriver.support.ui.Select(element).select_by_value('1')
    except Exception as ex:
    print(ex)
  • 0
    WebDriverWait сгенерирует исключение, потому что веб-элемент на самом деле не виден
  • 0
    Хорошо. Посмотрите обновленный код, для первого WebDriverWait вы можете проверить видимость любого другого элемента на странице, чтобы мы были уверены, что веб-страница загружена правильно, и после этого мы можем изменить свойство отображения тега select,

Ещё вопросы

Сообщество Overcoder
Наверх
Меню