如何使用python-selenium选择日历中的特定日期?

1 投票
1 回答
4838 浏览
提问于 2025-04-20 09:09

比如说,如果我想用python-selenium在www.priceline.com上选择一个特定的入住和退房日期,我该怎么做呢?

这是日历的HTML代码(你也可以在www.priceline.com上找到它)

<input name="checkInDate" pclnfield="ts" pclnoptional="true" preformat="" pclnprepop="false" 
pclnfocusnext="hotel-checkout" type="text" id="hotel-checkin" placeholder="Choose Date" 
autocomplete="off" class="hasDatepicker">

这是我的代码:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.select import Select
url = 'http://www.priceline.com/' #
driver = webdriver.Firefox()
driver.get(url)
sleep(3)
select = Select(  driver.find_element_by_id('hotel-checkin')  )

接下来该怎么办呢?

1 个回答

1

首先,你需要点击日期选择器的输入框:

driver.find_element_by_xpath("//input[@id='hotel-checkin'").click()

然后你等着日历出现:

wait.until(lambda driver: driver.find_element_by_xpath("//div[@id='ui-datepicker-div']"))

接着你在日历上点击某个日期:

driver.find_element_by_xpath("//div[@id='ui-datepicker-div']//a[@class='ui-state-default'][text()='HERE_IS_DATE_LIKE_10']")).click() # meaning //div[@id='ui-datepicker-div']//td/a[@class='ui-state-default'][text()='10']

大概就是这样。如果你用浏览器的开发者工具查看日历,你会发现每个“天”都是一个 td 元素,并且有 data-yeardata-month 这些属性,你可以对它们进行一些操作。比如 //div[@id='ui-datepicker-div']//td[@data-year='2014'][@data-month='8']/a[@class='ui-state-default'][text()='10']

撰写回答