Элемент не отображается при попытке доступа к Select Input Python Splinter

Я пытаюсь щелкнуть какой-либо элемент в раскрывающемся списке выбора с помощью Python Splinter.

Исходный код (пример - в оригинале больше значений параметров):

<div class="row form-group">
     <div class="col s12 m12 l6">
        <label>
        Zeitzone der Website
        </label>
        <div class="select-wrapper">
           <span class="caret">▼</span><input type="text" class="select-dropdown" readonly="true" data-activates="select-options-0388a2bc-2b5c-c534-8870-fc41b27e78c4" value="Wählen Sie eine Stadt">
           <ul id="select-options-0388a2bc-2b5c-c534-8870-fc41b27e78c4" class="dropdown-content select-dropdown ">
              <li class=""><span>Wählen Sie eine Stadt</span></li>
              <li class="optgroup-option "><span>Berlin</span></li>
           </ul>
           <select name="timezone" id="timezone-0" class="initialized">
              <option value="No timezone">Wählen Sie eine Stadt</option>
              <optgroup label="Europe">
                 <option value="Europe/Berlin">Berlin</option>
              </optgroup>
           </select>
        </div>
     </div>
  </div>

и я хотел бы выбрать Берлин.

Я пробовал browser.find_by_css/text и т. д., но элемент не виден, и я стал исключением.

Traceback (most recent call last):
  File "matomo.py", line 598, in <module>
    browser.find_option_by_text('Berlin').first.click()
  File "/usr/lib/python3.6/site-packages/splinter/driver/webdriver/__init__.py", line 562, in click
    self._element.click()
  File "/usr/lib/python3.6/site-packages/selenium/webdriver/remote/webelement.py", line 80, in click
    self._execute(Command.CLICK_ELEMENT)
  File "/usr/lib/python3.6/site-packages/selenium/webdriver/remote/webelement.py", line 628, in _execute
    return self._parent.execute(command, params)
  File "/usr/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 320, in execute
    self.error_handler.check_response(response)
  File "/usr/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementNotVisibleException: Message: element not visible: Element is not currently visible and may not be manipulated
  (Session info: chrome=67.0.3396.99)
  (Driver info: chromedriver=2.40.565383 (76257d1ab79276b2d53ee976b2c3e3b9f335cde7),platform=Linux 4.14.56-1-MANJARO x86_64)

Любые идеи, обходные пути или советы? :)


person Tobias Hüske    schedule 24.07.2018    source источник
comment
Разместите свой код, html и исключение в виде текста в вопросе (а не в виде изображений/ссылок).   -  person Guy    schedule 24.07.2018
comment
Так что размещайте соответствующие разделы. Перейдите к разделу Как создать минимальный, полный и проверяемый пример.   -  person Guy    schedule 24.07.2018
comment
@TobiasHüske Какой вариант вы хотите выбрать? Ваши испытания кода и соответствующая трассировка стека ошибок?   -  person DebanjanB    schedule 24.07.2018


Ответы (1)


Вы можете попытаться дождаться его, используя явное ожидание,

wait = WebDriverWait(driver, 10)
wait.until(EC.element_to_be_clickable(By.XPATH, "//span[contains(text(),'Berlin')]")).click()

Событие Click по функции Javascript:

driver.execute_script("arguments[0].click()", ElementToClick)
person Ishita Shah    schedule 24.07.2018
comment
Это не работает :/ Я пробовал записывать с помощью Katalon Recorder (Selenium IDE для Chrome), но когда я проигрываю записанное, браузер щелкает раскрывающийся список, но не может выбрать элемент. - person Tobias Hüske; 25.07.2018