无法使用日期填写两个输入框

时间:2019-01-07 08:39:16

标签: python python-3.x selenium selenium-webdriver web-scraping

我一直在尝试用日期填充两个输入框(其余的已经填充),然后单击Search Flights按钮以填充结果,但无法完成。我已注释掉脚本中未成功的尝试。

Website link

我希望输入框填充以下日期19 Jan, 197 Feb, 19

到目前为止我的尝试:

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

def fill_in_search_boxes(driver,url):
    driver.get(url)
    wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, ".airportselector_input[placeholder='From']"))).send_keys("Tatry - Poprad")
    wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, ".airportselector_input[placeholder='To']"))).send_keys("London")
    # wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, ".od-ui-datepicker-display"))).send_keys("Sat. 19 Jan, '19")
    # wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, ".od-ui-datepicker-display"))).send_keys("Thu. 7 Feb, '19")
    wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, ".od-flightsManager-search-flight-button"))).click()

if __name__ == '__main__':
    url = "https://www.edreams.com/"
    driver = webdriver.Chrome()
    wait = WebDriverWait(driver,10)
    try:
        fill_in_search_boxes(driver,url)
    finally:
        driver.quit()

2 个答案:

答案 0 :(得分:1)

您正在尝试将密钥发送到div,而不是input字段。您需要单击每个div并选择所需的日期。

尝试以下操作以获得所需的输出。

def fill_in_search_boxes(driver,url):
    driver.get(url)
    #  Select first airport
    wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".airportselector_input[placeholder='From']"))).send_keys("Tatry - Poprad")
    wait.until(EC.element_to_be_clickable((By.XPATH, "//span[.='Tatry - Poprad']"))).click()
    #  Select second airport
    wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".airportselector_input[placeholder='To']"))).send_keys("London")
    wait.until(EC.element_to_be_clickable((By.XPATH, "//span[.='London']"))).click()
    # Select From date
    wait.until(EC.presence_of_element_located((By.XPATH, "//div[.='Departure']"))).click()
    wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'day_2019-01-19'))).click()
    # Select To date
    wait.until(EC.presence_of_element_located((By.XPATH, "//div[.='Return']"))).click()
    wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'day_2019-02-07'))).click()
    # Submit form
    wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, ".od-flightsManager-search-flight-button"))).click()

请注意,这允许处理当前/下个月的日期。您可能需要创建一个函数来处理所有月份的日期。

P.S。由于验证码原因,我无法检查此代码,因此请告知是否有问题

答案 1 :(得分:0)

如果您仔细检查,我们将无法在日期字段中写入任何内容。它们不是文本字段,我们必须在此处选择输入。 您可以尝试以下操作:

undefined