@DenKsen2010

Как на сайте мосбиржи поменять месяц в календаре с помощью питона?

С помощью библиотеки selenium пытаюсь поменять месяц и год в календаре на сайте мосбиржи. Ссылка: ссылка удалена модератором.
Проблема в том, что когда к году или месяце идет обращение, то там появляется drop-down список, к которому нет возможности посмотреть Xpath.
  • Вопрос задан
  • 52 просмотра
Решения вопроса 1
Во-первых, это дубль вопроса.

Во-вторых, там очень простые локаторы по XPath. На самом деле локаторы по XPath бывают довольно сложными, но это не ваш случай, тут достаточно прочитать любую вводную статью, чтобы разобраться в вопросе.

локатор чтобы открыть календарь //input[contains(@class, "date-selector")]
локатор для стрелочки влево //a[@data-handler="prev"]
локатор для стрелочки вправо //a[@data-handler="next"]
локатор для выбора года //select[@data-handler="selectYear"]
локатор для выбора месяца //select[@data-handler="selectMonth"]
локатор для выбора дня N //td[@data-handler="selectDay"]//a[text()="N"]

Небольшая проблема может быть из-за того, что selenium не может нативно выбрать значение, используя select_by_visible_text и подобные методы, но и тут нечего сложного нет, отправляйте нажатия стрелочек с клавиатуры и выбирайте нужный вам месяц.

Демонстрация
from time import sleep

from selenium import webdriver
from selenium.webdriver import Keys
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager

options = webdriver.ChromeOptions()
options.add_argument('--disable-infobars')
options.add_argument('--disable-extensions')
options.add_argument('start-maximized')

driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)
driver.get('https://www.moex.com/ru/bondization/calc')

# Открываем календарь
calendar = driver.find_element(By.XPATH, '//input[contains(@class, "date-selector")]')
calendar.click()
sleep(1)
# Открываем выпадающий список
calendar_month = driver.find_element(By.XPATH, '//select[@class="ui-datepicker-month"]')
calendar_month.click()  # Начальное значение текущий месяц март
sleep(1)
calendar_month.send_keys(Keys.ARROW_UP)  # Февраль
sleep(1)
calendar_month.send_keys(Keys.ARROW_UP)  # Январь
sleep(1)
calendar_month.send_keys(Keys.ARROW_DOWN)  # Февраль
sleep(1)
calendar_month.send_keys(Keys.ARROW_DOWN)  # Март
sleep(1)
calendar_month.send_keys(Keys.ARROW_UP)  # Февраль
sleep(1)
calendar_month.send_keys(Keys.RETURN)  # Устанавливаем февраль
sleep(5)
driver.quit()
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы