Python 从datepicker获取可用性

Python 从datepicker获取可用性,python,selenium,datepicker,Python,Selenium,Datepicker,我试图通过点击datepicker日历中的“下一步”按钮来获取homeaway中每天的价格,但运气不佳 我当前的代码类似于: def handle(self, *args, **options): def homeaway(self): display = Display(visible=0, size=(1024, 768)) display.start() driver = webdriver.Firefox() dri

我试图通过点击datepicker日历中的“下一步”按钮来获取homeaway中每天的价格,但运气不佳

我当前的代码类似于:

def handle(self, *args, **options):
    def homeaway(self):
        display = Display(visible=0, size=(1024, 768))
        display.start()
        driver = webdriver.Firefox()
        driver.maximize_window()

        wait = WebDriverWait(driver, 10)

        url = 'https://www.homeaway.pt/arrendamento-ferias/p1418427a?uni_id=1590648'
        driver.get(url)

        # pick start date
        start_date = wait.until(EC.visibility_of_element_located((
                                                                 By.CSS_SELECTOR,
                                                                 ".quotebar-container input[name=startDateInput]")))
        start_date.click()

        first_available_date = wait.until(EC.element_to_be_clickable(
            (By.CSS_SELECTOR, "#ui-datepicker-div td.full-changeover > a")))
        ActionChains(driver).move_to_element(first_available_date).perform()
        driver.find_element_by_css_selector(
            "#ui-datepicker-div td.full-selected.full-changeover > a").click()

        # pick end date (TODO: violates DRY principle, refactor!)
        end_date = wait.until(EC.visibility_of_element_located(
            (By.CSS_SELECTOR, ".quotebar-container input[name=endDateInput]")))
        end_date.click()

        first_available_date = wait.until(EC.element_to_be_clickable(
            (By.CSS_SELECTOR, "#ui-datepicker-div td.full-changeover > a")))
        ActionChains(driver).move_to_element(first_available_date).perform()
        driver.find_element_by_css_selector(
            "#ui-datepicker-div td.full-selected.full-changeover > a").click()

        # get the calculated price
        price = wait.until(EC.visibility_of_element_located(
            (By.CSS_SELECTOR, ".price-quote .price-total")))

        print(price.text.encode('ascii', 'ignore'))

        driver.close()
他们都工作,但只工作一个月。我希望能够设置X个月。例如,对于homeaway,我尝试使用
self.driver.find_element_by_css_选择器('.ui datepicker next.ui corner all').c‌​在第一次打开日历单击后立即单击()
,但我得到了一个
ElementNotVisibleException

提前感谢您在datepicker已打开时单击“下个月”按钮尝试以下操作:

def click_next_month(self):
    elements = self.driver.find_element_by_xpath('//span[@class="ui-icon ui-icon-circle-triangle-e"]')
    elements[1].click()
要多次单击“下个月”按钮,您每次都需要重新定义
元素
,因此最好将这两个操作(定义列表和按钮单击)作为方法
单击下个月()


如果出现任何问题,请尝试告诉我

我可以使用
驱动程序来实现这一点。执行脚本('$('a.ui-datepicker-next”)。单击()
,因为所有其他操作都给了我
ElementNotVisibleException
,然后我注意到涉及到javascript

<a class="ui-datepicker-next ui-corner-all" data-handler="next" data-event="click" title="Próximo>"><span class="ui-icon ui-icon-circle-triangle-e">Próximo&gt;</span></a>

您好,我仍然收到您代码中的
元素NotVisibleException
:(
def homeaway(self):
    MONTH_COUNT = 6
    display = Display(visible=0, size=(1024, 768))
    display.start()
    driver = webdriver.Firefox()
    driver.maximize_window()

    wait = WebDriverWait(driver, 10)

    url = 'https://www.homeaway.pt/arrendamento-ferias/p1418427a?uni_id=1590648'
    driver.get(url)

    count = 0
    for month in range(MONTH_COUNT):
        # pick start date
        start_date = wait.until(EC.visibility_of_element_located((
            By.CSS_SELECTOR,
            ".quotebar-container input[name=startDateInput]")))
        start_date.click()

        for x in range(count):
            driver.execute_script('$( "a.ui-datepicker-next" ).click()')

        current_month = driver.find_element_by_css_selector(
            ".ui-datepicker-month").text

        print("current_month:", current_month)

        first_available_date = wait.until(EC.element_to_be_clickable(
            (By.CSS_SELECTOR, "#ui-datepicker-div td.full-changeover > a")))

        ActionChains(driver).move_to_element(first_available_date).perform()
        driver.find_element_by_css_selector(
            "#ui-datepicker-div td.full-selected.full-changeover > a").click()

        # pick end date (TODO: violates DRY principle, refactor!)
        end_date = wait.until(EC.visibility_of_element_located(
            (By.CSS_SELECTOR,
             ".quotebar-container input[name=endDateInput]")))

        end_date.click()

        first_available_date = wait.until(EC.element_to_be_clickable(
            (By.CSS_SELECTOR, "#ui-datepicker-div td.full-changeover > a")))

        ActionChains(driver).move_to_element(first_available_date).perform()
        driver.find_element_by_css_selector(
            "#ui-datepicker-div td.full-selected.full-changeover > a").click()

        # get the calculated price
        price = wait.until(EC.visibility_of_element_located(
            (By.CSS_SELECTOR, ".price-quote .price-total")))

        print(price.text.encode('ascii', 'ignore'))

        driver.execute_script('$( "button.ui-datepicker-clear" ).click()')

        count += 1

    driver.close()