【问题标题】:Python Selenium + Datepicker IssuesPython Selenium + Datepicker 问题
【发布时间】:2017-08-25 23:22:22
【问题描述】:

我正在尝试通过单击日历来获取 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)

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

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'))

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

self.driver.find_element_by_css_selector('.stab-calendar-controls-next').click()

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

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

【问题讨论】:

  • 我没有 python,但我用 Java 编写了一些代码,但我并没有真正发现任何问题。我正在使用不同的 CSS 选择器来获取可用日期,"div.stab-calendar-day-selectable:not(.stab-calendar-day-disabled)"。您将需要它来区分那些在月末和月初作为占位符但不可点击的日期,否则您会发现您会发现重复日期。当我找到并单击带有"a.stab-calendar-controls-next" 的下一个按钮时,它对我来说很好。可能是时间问题,您是否尝试过等待再单击下一步?
  • 您能否发布您的 Java 代码,以便我看看并尝试一下?我确实尝试过没有运气的等待
  • 只要日历弹出窗口仍在显示,您的代码就可以在 Chrome 和 python 上正常工作。我剪切并粘贴没有错误。检查硒的版本?您可以尝试使用其他驱动程序(Firefox 等)吗?

标签: python selenium datepicker web-scraping


【解决方案1】:

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

driver.find_element_by_css_selector(".stab-calendar-controls-next > i").click()

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

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'))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-11
    • 2021-05-06
    • 1970-01-01
    • 2021-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-04
    相关资源
    最近更新 更多