2017-03-31 128 views
5

我试图通过点击日历来检查每日https://www.homeaway.pt/arrendamento-ferias/p418841的可用性/价格,检查哪些天被占用或没有,点击next按钮,以便它可以跳到下个月。Python Selenium +日期选择器问题

我也想点击抵达日期,然后选择一个结帐日期,以便我可以看到它的价格。

我遇到了问题,因为我尝试在chrome中工作的命令,但他们似乎并没有在硒中工作。

例如:

我做的:

 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:消息:无法定位元件:{ “方法”: “CSS选择”, “选择器”: “刺个历控制 - 下”}

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

+0

我没有python,但我在Java中编写了一些代码,我没有真正发现任何问题。我正在使用不同的CSS选择器来获取可用日期'',div.stab-calendar-day-selectable:not(.stab-calendar-day-disabled)“'。您需要使用这个来区分那些在月末和月初作为占位符的日期,但不能点击或者您会发现您会重复日期。当我用'“a.stab-calendar-controls-next”找到并点击下一个按钮时,它对我来说工作正常。这可能是一个计时问题,你点击下一步之前是否尝试过等待? – JeffC

+0

您可以发布您的Java代码,以便我可以看看并尝试这种方式吗?我没有尝试等待,但没有运气 – psychok7

+0

只要日历弹出窗口仍在显示,您的代码就可以在Chrome和Python上正常工作。我剪切和粘贴没有错误。检查硒的版本?你可以尝试与另一个驱动程序(Firefox等)? – pbuck

回答

0

我不确定你到底想要达到什么目标,但是如果你有问题,那就是你无法点击下一个按钮。解决方案很简单。请更改选择器以单击子元素,它将起作用。我已经测试过它,它在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'))