Как выбрать следующий день из календаря с помощью Selenium-Python - PullRequest
2 голосов
/ 17 мая 2019

Невозможно выбрать завтрашнюю дату в календаре с помощью Selenium

Я пытался использовать find_element_by_css_selector и find_element_by_xpath, но, похоже, ничего не работает.

import time
import datetime
from time import strftime
from selenium import webdriver
browser = webdriver.Chrome("C:\Program Files (x86)\Google\Chrome\Application\chromedriver_win32\chromedriver.exe")
browser.get('https://www.****.com')

browser.find_element_by_id("UserName").send_keys("***")
browser.find_element_by_id("password").send_keys("***")
browser.find_element_by_id("submit-sign-in").click()


browser.find_element_by_id("Information").click()
browser.find_element_by_id("Amenities").click()

browser.find_element_by_id("reserve").click()
browser.find_element_by_id("resv-date").click()

******#The code works fine until here**********

#Trying to pick tomorrows date from the calendar.
browser.find_element_by_css_selector("a.ui-state-default.ui-state-active").click()

Not getting an error message but it doesn't select the required date

Я прикрепил изображение ниже:

<td class="  ui-datepicker-today" data-handler="selectDay" data-event="click" data-month="4" data-year="2019"><a class="ui-state-default ui-state-highlight" href="#">17</a></td>
<a class="ui-state-default ui-state-highlight" href="#">17</a></td>
<td class=" ui-datepicker-week-end  ui-datepicker-current-day" data-handler="selectDay" data-event="click" data-month="4" data-year="2019"><a class="ui-state-default ui-state-active" href="#">18</a></td>
<a class="ui-state-default ui-state-active" href="#">18</a>

Фрагмент Выбор даты календаря

1 Ответ

1 голос
/ 17 мая 2019

Вы должны использовать приведенную ниже css для выбора следующего дня.

td.ui-datepicker-current-day + td

Код:

browser.find_element_by_css_selector("td.ui-datepicker-current-day+td").click()

+ соседний братский комбинатор. Если вы считаете, что в текущем примере td.ui-datepicker-current-day выбирает текущий день, т. Е. 17, но мы хотим выбрать следующий родной брат, поэтому при использовании + будет выбран родной брат, и мы указываем фильтрацию соседнего родного брата равной td.

Если вы хотите использовать xpath для того же случая, вы можете использовать following-sibling и фильтровать по имени тега td, как показано ниже.

//td[contains(@class, 'ui-datepicker-current-day')]/following-sibling::td

В двух словах + в css почти эквивалентен following-sibling в xpath, что поможет выбрать элементы одного уровня.

Обратитесь к ссылкам ниже по CSS и Xpath по методу, описанному выше.

CSS

...