Как использовать Selenium webdriver выберите дату по нижеуказанному URL - PullRequest
0 голосов
/ 29 октября 2018

http://www.hkexnews.hk/sdw/search/mutualmarket.aspx?t=sh

Я нахожу элемент с идентификатором 'txtShareholdingDate', а затем попытался использовать "send_keys ('201 8/10/24') не работает

Любые идеи. Спасибо

1 Ответ

0 голосов
/ 29 октября 2018
Атрибут

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...