从datepi获取可用性

2024-09-25 00:34:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图通过单击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_selector('.ui-datepicker-next.ui-corner-all').c‌​lick(),但是我得到了一个ElementNotVisibleException

提前谢谢


Tags: uidatebydriverdatepickerelementselectorstart
2条回答

我可以使用driver.execute_script('$( "a.ui-datepicker-next" ).click()')来实现这个功能,因为其他的一切都给了我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>

我不想直接使用JavascriptjQuery,所以如果有人有更好的建议,我可以试试。在

但是仍然有一些怪癖,例如每次我获得某个月的可用性时,我必须手动重置日历。在

这是我的最终代码:

^{pr2}$

若要在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()

要多次单击“下个月”按钮,每次都需要重新定义elements,因此最好将这两个操作(定义列表和按钮单击)作为方法click_next_month()。在

如果有任何问题,请告诉我

相关问题 更多 >