Атрибут
readonly
означает, что вы не можете установить значение текстового поля с помощью метода send_keys
.
Если вам не нужен ваш скрипт для имитации поведения пользователя, вы можете реализовать JavaScriptExecutor
, как показано ниже
input_field = driver.find_element_by_id('txtShareholdingDate')
driver.execute_script('arguments[0].value="2018/10/24";', input_field)
driver.find_element_by_xpath('//input[@type="submit"]').click()
Если вам нужно выбрать дату как пользователь:
import time
input_field = driver.find_element_by_id('txtShareholdingDate')
input_field.click()
time.sleep(1)
driver.find_element_by_xpath('//b[@class="year"]//li[.="2018"]').click()
time.sleep(1)
driver.find_element_by_xpath('//b[@class="month"]//li[.="10"]').click()
time.sleep(1)
driver.find_element_by_xpath('//b[@class="day"]//li[.="24"]').click()
time.sleep(1)
driver.find_element_by_xpath('//input[@type="submit"]').click()
P.S. Вам также может понадобиться использовать ExplicitWait вместо time.sleep(1)
:
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait as wait
input_field = driver.find_element_by_id('txtShareholdingDate')
input_field.click()
wait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//b[@class="year"]//li[.="2017"]'))).click()
wait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//b[@class="month"]//li[.="11"]'))).click()
wait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//b[@class="day"]//li[.="22"]'))).click()
driver.find_element_by_xpath('//input[@type="submit"]').click()