Python Selenium + Datepicker问题

psy*_*ok7 5 python selenium datepicker web-scraping

我试图让每一天的可用性/价格https://www.homeaway.pt/arrendamento-ferias/p418841点击日历,检查这天被占用与否,点击next按钮,以便它可以跳到下个月.

我还想点击到货日期,然后选择结账日期,以便我可以看到它的价格.

我遇到了问题,因为我尝试使用chrome工作的命令但是它们似乎不能在selenium中工作.

例如:

我做:

        self.driver.get(url)
        wait = WebDriverWait(self.driver, 10)
        try:
            elem = wait.until(
                EC.visibility_of_element_located(
                    (
                        By.CSS_SELECTOR,
                        "#startDateInput"
                    )
                )
            )
        except TimeoutException:
            pass
        else:
            elem.send_keys(Keys.NULL)
Run Code Online (Sandbox Code Playgroud)

这似乎打开了日历,我还可以列出可选择的日期:

for x in self.driver.find_elements_by_css_selector(".stab-calendar-day.stab-calendar-day-active.stab-calendar-day-selectable.pull-left"): print(x.get_attribute('data-formatted-date'))
Run Code Online (Sandbox Code Playgroud)

但是当我想跳到下一个活跃的月份时,它会一直显示相同的初始月份,这是因为这不起作用:

self.driver.find_element_by_css_selector('.stab-calendar-controls-next').click()
Run Code Online (Sandbox Code Playgroud)

selenium.common.exceptions.NoSuchElementException:消息:无法找到元素:{"method":"css selector","selector":".stab-calendar-controls-next"}

关于我如何获得每套选定日期房屋的可用性/价格的任何想法?

Gau*_*hah 0

我不确定您到底想实现什么目标,但如果您遇到问题只是您无法单击下一步按钮。解决方案很简单。请更改选择器以单击子元素,它将起作用。我已经测试过,它可以在 Firefox 上运行。

driver.find_element_by_css_selector(".stab-calendar-controls-next > i").click()
Run Code Online (Sandbox Code Playgroud)

以下是正在运行的整个代码。第一次它会打印当前和下一个的日期。然后是接下来的两个月。

driver = webdriver.Firefox()
driver.get("https://www.homeaway.pt/arrendamento-ferias/p418841")
wait = WebDriverWait(driver, 10)
try:
    elem = wait.until(
        EC.visibility_of_element_located(
            (
                By.CSS_SELECTOR,
                "#startDateInput"
            )
        )
    )
except TimeoutException:
    pass
else:
    elem.send_keys(Keys.NULL)

for x in driver.find_elements_by_css_selector(".stab-calendar-day.stab-calendar-day-active.stab-calendar-day-selectable.pull-left"):
    print(x.get_attribute('data-formatted-date'))
# driver.find_element_by_xpath("//*[@class='stab-calendar-controls-next']/i").click()
driver.find_element_by_css_selector(".stab-calendar-controls-next > i").click()
for x in driver.find_elements_by_css_selector(".stab-calendar-day.stab-calendar-day-active.stab-calendar-day-selectable.pull-left"):
    print(x.get_attribute('data-formatted-date'))
Run Code Online (Sandbox Code Playgroud)