Перейти к содержимому

Фотография

Работа с элементами select в splinter или selenium (python 2.7)

python selenium splinter select

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 3

#1 gumbert

gumbert

    Новый участник

  • Members
  • Pip
  • 2 сообщений
  • ФИО:Дмитрий М

Отправлено 15 августа 2014 - 07:21

Привет. Осваиваю библиотеку splinter и selenium для python. Возникли затруднения. Итак, я выполняю следующий код в splinter:

    # -*- coding: utf-8 -*-
    from splinter import Browser

    browser = Browser()
    browser.visit('https://passport.yandex.com/registration/mail')
    browser.find_by_name("hint_question_id").click()
    browser.select("hint_question_id","12")

Но вижу следующую ошибку:

    selenium.common.exceptions.ElementNotVisibleException: Message: u'Element is not currently visible and so may not be interacted with' ; Stacktrace:
    at fxdriver.preconditions.visible (file:///c:/users/dm/appdata/local/temp/tmppiwmlb/extensions/fxdriver@googlecode.com/components/command_processor.js:8791:5)

Как так? Ведь клик по выпадающему списку происходит и все элементы становятся видны.

Попробовал выполнить действие в seleium:

    # -*- coding: utf-8 -*-
    from selenium import webdriver
    from selenium.webdriver.support.ui import Select

    driver = webdriver.Firefox()
    driver.get("https://passport.yandex.com/registration/mail")

    driver.find_element_by_name("hint_question_id").click()

    # navigate to the page
    select = Select(driver.find_element_by_tag_name("select"))
    print select.options
    print [o.text for o in select.options] # these are string-s
    select.select_by_index('2')

Но вижу ту же самую ошибку.

    selenium.common.exceptions.ElementNotVisibleException: Message: u'Element is not currently visible and so may not be interacted with' ; Stacktrace:
    at fxdriver.preconditions.visible (file:///c:/users/dm/appdata/local/temp/tmpzjqnnp/extensions/fxdriver@googlecode.com/components/command_processor.js:8791:5)

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


  • 0

#2 wret

wret

    Активный участник

  • Members
  • PipPip
  • 124 сообщений
  • Город:Москва

Отправлено 15 августа 2014 - 08:22

Не?

http://stackoverflow...ium-with-python

http://stackoverflow...ion-in-selenium


  • 0

#3 gumbert

gumbert

    Новый участник

  • Members
  • Pip
  • 2 сообщений
  • ФИО:Дмитрий М

Отправлено 15 августа 2014 - 16:35

Не, немного не то. У яндекса устроено так, что Селект у них скрыт они в него устанавливают значения то которое пользователь выбирает в псевдо селекте. А я пытался выбрать как раз из него.

 

Вот этот код для splinter работает как надо.

# -*- coding: utf-8 -*-
from splinter import Browser

browser = Browser()
browser.visit('https://passport.yandex.com/registration/mail')
browser.find_by_name("hint_question_id").click()
        
#ждём пока всё прогрузится
browser.is_element_not_present_by_css("li[role=\"presentation\"]", wait_time=2)
        
#выбираем 1 вопрос
browser.find_by_css("li[role=\"presentation\"]")[1].click()

Весь файл можно посмотреть здесь: http://github.com/gu...dexmailregister


  • 0

#4 mazik7

mazik7

    Новый участник

  • Members
  • Pip
  • 63 сообщений
  • ФИО:Мазик
  • Город:Красноярск

Отправлено 19 августа 2014 - 04:10

А с selenium получилось чего? Лично я не смог например даже получить индекс от псевдоэлементов. Как вы это сделали?)


  • 0

:smile:




Темы с аналогичным тегами python, selenium, splinter, select

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных