Заполнение поля даты с помощью Selenium WebDriver

Я пытаюсь заполнить регистрационную форму, используя Selenium для практики, поскольку я начинаю знакомиться с этой библиотекой.

Это регистрационная форма на этом сайте: https://www.fast2sms.com/

Что я сейчас пытаюсь

Начну с этого:

      from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.fast2sms.com/")

Там я нажимаю кнопку регистрации с data-target атрибут установлен на "#signupM" используя селектор css для того же:

      driver.find_element_by_css_selector('button[data-target="#signupM"]').click()

Затем я установил несколько фиктивных значений для полей:

      from phone_gen import PhoneNumber

name = "John Doe"
dob = "02-01-1990"
phone_number = PhoneNumber("India").get_number().replace("+91", "")
email_address = f"{phone_number}@mailinator.com"

Жду поле имени и заполняю его:

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

name_field = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'input[name="signup_name"]')))
name_field.send_keys(name)

Затем номер телефона и адрес электронной почты:

      phone_number_field = driver.find_element_by_css_selector('input[name="signup_mobile"]')
phone_number_field.send_keys(phone_number)

email_addr_field = driver.find_element_by_css_selector('input[name="signup_email"]')
email_addr_field.send_keys(email_address)

Здесь все работает нормально, как и ожидалось, но когда я пытаюсь заполнить поле «Дата рождения», я сталкиваюсь с проблемами:

      dob_field = driver.find_element_by_css_selector('input[name="signup_dob"]')
dob_field.send_keys(dob)

Проблемы, с которыми я сталкиваюсь

  1. Поле даты рождения не заполняется.
  2. Выдает ошибку, selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
  3. Я не могу отправить форму с незаполненной датой рождения.

Способы, которыми я пытался отлаживать

  1. Перепроверил селектор CSS
  2. Ожидал, что с полем данных о рождении можно будет взаимодействовать с помощью WebDriverWait
  3. Вместо того, чтобы заполнять текст, я попытался взаимодействовать со всплывающим окном, которое появляется, когда я нажимаю на поле (я думаю, что должен это сделать, но не знаю, как).

Вопросы, которые могут показаться повторяющимися, но на самом деле это не так:

Выберите конкретную дату, используя Python Selenium (даты ролловера)

Использование Selenium для выбора даты в календаре

Взаимодействие со всплывающими окнами с использованием селена в Python

Спасибо, что нашли время прочитать этот вопрос. Я привел все детали, которые пришли мне в голову, когда писал это. Простите за плохой английский; Я немец по рождению.

1 ответ

Решение

Я понимаю, почему это может не работать. На веб-сайте используется специальная библиотека javascript, которая называется отрывком . Таким образом, элемент ввода для даты имеет формат только для чтения.

Я думаю, вы можете решить это, выполнив:

      js_code = "document.querySelector('input[name=signup_dob]').value =" 
driver.execute_script(js_code + your_date)

РЕДАКТИРОВАТЬ: Не совсем уверен, что код js будет работать. Возможно, потребуется некоторое редактирование

Другие вопросы по тегам