Как изменить дату в этом календаре, используя Selenium с Python? - PullRequest
0 голосов
/ 01 марта 2019

Я пытаюсь просмотреть этот сайт, используя Python и Selenium: https://markets.ft.com/data/etfs/tearsheet/historical?s=O9P:SES:USD.

Мне нужно изменить годы в левом календаре, чтобы увидеть цены на 2018 год.Несмотря на то, что мне удается изменить год и выбрать 2018 в раскрывающемся меню, я не могу нажать на день (например, 1 января 2018 года).Это странно, так как у меня нет проблем с кликом на день в 2019 году.

Я действительно не знаю почему.Вот код, который не работает.

 driver.find_element_by_css_selector("body > div.o-grid-container.mod-container > div:nth-child(2) > section.mod-main-content > div:nth-child(1) > div > div > div.mod-ui-filter-overlay.clearfix.mod-filter-ui-historical-prices-overlay > div.mod-ui-overlay.mod-ui-filter-overlay__form > div > form > fieldset > span > div.mod-ui-date-picker.mod-filter-ui-historical-prices-overlay__date--from > div.mod-ui-date-picker__input-container > i").click()
    select_element_from = driver.find_element_by_xpath("//*[@class='mod-ui-date-picker mod-filter-ui-historical-prices-overlay__date--from']//select[option[@value = '%d']]" %lastyear)
    select_from = Select(select_element_from)
    select_from.select_by_visible_text(lastyearstr)
    time.sleep(2)
    driver.find_element_by_xpath("//*[@class='mod-ui-date-picker mod-filter-ui-historical-prices-overlay__date--from']//*[@aria-label='1 Jan, %d']" %(y-1)).click()

Большое спасибо за вашу помощь!

1 Ответ

0 голосов
/ 01 марта 2019

В последней строке вашего кода: driver.find_element_by_xpath("//*[@class='mod-ui-date-picker mod-filter-ui-historical-prices-overlay__date--from']//*[@aria-label='1 Jan, %d']" %(y-1)).click() элемент не отображается.Поскольку элемент не отображается в браузере, его нельзя щелкнуть.

Я принял пошаговый подход, имитирующий действия пользователя, когда он нажимает на веб-страницу.Вот код, который работает:

# Find the element that expands the date picker
filter_arg = '//span[@class="o-labels" and @aria-hidden="false"]'
filter_icon = driver.find_element_by_xpath(filter_arg)
filter_icon.click()

# Find the calendar icon
cal_arg = '//i[@class="mod-icon mod-icon--calendar"]'
cal_icon = driver.find_element_by_xpath(cal_arg)
cal_icon.click()

# Find the dropdown selector that selects the year
year_arg = '//select[@class="picker__select--year"]'
year_selector = driver.find_element_by_xpath(year_arg)
year_selector.click()

# Find '2018'
last_year = driver.find_element_by_xpath('//option[@value="2018"]')
last_year.click()

# Find all the days that are available, and click on the one with the relevant `.text` attribute
which_day = driver.find_elements_by_xpath('//div[@class="picker__day picker__day--infocus"]')
which_day[0].text
'1'

# If i want to click on the 4th day of the month...
which_day[3].click()
...