2017-02-12 3 views
1

Я очень новичок в Python и узнаю, как отменить данные с помощью Selenium.Python & Selenium Невозможно выбрать дату в datepicker

я сталкиваюсь с проблемой при попытке выбрать дату из формы Datepicker на monmondo.com (для примера)

Это дальний мне удалось получить: (Edit: я сумел пойти чуть дальше, чем раньше, но я до сих пор застрял)

from selenium import webdriver 
browser = webdriver.Firefox() 

browser.get("https://www.momondo.com") 
browser.implicitly_wait(5) 
date = browser.find_element_by_name("ctl00$Content$ctl04$SearchFormv8$SearchFormFlight$InputDepart").click() 
browser.implicitly_wait(5) 
test= browser.find_elements_by_xpath("//*['ui-datepicker-div']//td[@data-year='2017'][@data-month='2']/a[@class='ui-state-default'][@href='#'][text()='20']") 
test[0].click() 

Каких результатов в

selenium.common.exceptions.ElementNotVisibleException: Message: 

Я тестер с firepath XPath и, кажется, правильно работать как foun d в исходном коде страницы.

Веб-страница Структура день календаря в исходном коде:

<td class=" " data-handler="selectDay" data-event="click" data-month="2" data-year="2017"><a class="ui-state-default" href="#">20</a></td> 

    <a class="ui-state-default" href="#">20</a> 

Моя расплывчатое предположение о том, что данные даже нажмите вызывает выбор, но это, кажется, находится на ступень выше класса, где я может найти номер. Это говорит, что я не уверен, что это так.

Я был бы очень признателен, если бы вы могли помочь новичкам, как я!

Спасибо!

+0

ElementNotVisibleException, ну, элемент не виден. Вы видите этот элемент в браузере? – Usmiech

+0

Говорят, что это звучит довольно просто! Код позволяет открыть календарь, но, к сожалению, ничего не происходит. Может это как-то связано со всплывающим окном? Большое спасибо за ваш вклад. –

+0

Так что сборщик находится во всплывающем окне? Если нет, и вы не можете щелкнуть это в селене, тогда, возможно, используйте что-то из jquery, например $ («css_selector»). Click() Selenium может выполнять JS. Это не должно приводить к ошибкам, но не забудьте проверить консоль разработчика в браузере. Btw. monmondo.com показывает веб-сайт японского хостинга – Usmiech

ответ

1

Попробуйте добавить некоторое время подождать, пока элемент не станет видимым:

from selenium import webdriver 
from selenium.webdriver.support.ui import WebDriverWait as wait 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support import expected_conditions as EC 

browser = webdriver.Firefox() 
browser.get("https://www.momondo.com") 
browser.implicitly_wait(5) 
# Click to open drop-down 
date = browser.find_element_by_xpath("//div[@class='input _date-depart']/div[@class='ui-calendar']/input").click() 
# Choose depart date 
wait(browser, 10).until(EC.visibility_of_element_located((By.XPATH, "//td[@data-handler='selectDay']/a[text()='20']"))).click() 
# Choose return date 
wait(browser, 10).until(EC.visibility_of_element_located((By.XPATH, "//td[@data-handler='selectDay']/a[text()='30']"))).click() 
+0

Большое спасибо за этот кусок кода! Сначала, когда я запускал его, он подождал, пока таймаут не откроет всплывающее окно, поэтому, чтобы дважды проверить, я запустил его на другом компьютере и там, чудо, это сработало! Я думаю, что это связано с сообщением, которое я случайно выбросил при первом запуске Selenium, проблема в том, что я не знаю, как его исправить, но это еще одна история. –

+0

Добро пожаловать. Если мой ответ помог вам решить эту проблему, отметьте ее как «Принято». Спасибо – Andersson

+0

Это сделано, еще раз спасибо! Если я найду решение с Firefox, я опубликую его, до сих пор я удалил Geckodriver и файлы pref, и он все еще не работает. Я постараюсь провести его чистым. –

Смежные вопросы