当前位置: 首页 > 面试题库 >

从Datepicker获取可用性

通建安
2023-03-14
问题内容

我试图通过单击日期选择器日历中的下一个按钮来获得无家可归的每一天的价格,但是没有运气。

我当前的代码是这样的:

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

它们都可以工作,但只能使用1个月。我希望能够设置X个月。例如,对于家乡度假,我self.driver.find_element_by_css_selector('.ui- datepicker-next.ui-corner- all').c‌​lick()在第一次打开日历点击后立即尝试使用,但我得到了ElementNotVisibleException

提前致谢


问题答案:

我可以使用它,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直接使用,所以如果有人有更好的建议,我可以尝试一下。

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

这是我的最终代码:

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


 类似资料:
  • 是否可以用开放源码软件库pdfbox提取已签名PDF的可见签名(图像)? 工作流: null 像下面这样的oop风格的东西会很棒: 找到了类PDSignature和如何签署一个PDF,但没有解决方案提取一个可见的签名作为图像。

  • 问题内容: 好的,所以我试图从Wikidata中获取有关电影的信息,以以下电影为例: https //www.wikidata.org/wiki/Q24871 在页面上,数据清楚地以可读格式显示,但是当您尝试通过API提取数据时,会得到以下信息:https : //www.wikidata.org/w/api.php?action=wbgetentities&ids=Q24871 这是其中的一部分

  • jQueryUI中的Datepickers允许用户轻松,直观地输入日期。 您可以自定义日期格式和语言,限制可选日期范围,并轻松添加按钮和其他导航选项。 jQueryUI提供了datepicker datepicker()方法,该方法通过添加新的CSS类来创建日期选择器并更改页面上HTML元素的外观。 将包装集中的“input”,“div”和“span”元素转换为datepicker控件。 默认情况

  • 问题内容: 有什么好的方法可以在运行时将剩余的内存提供给JVM?这种情况的用例是使Web服务在接近内存限制时通过拒绝一个新的错误消息“太多的人使用此,请稍后再试”,而不是因OutOfMemory错误而突然死亡而接近失败,从而正常失败。 注意,这与事先计算/估算每个对象的成本无关。原则上,我可以根据该估算值估算对象占用并拒绝新连接的内存量,但这似乎有点hacky /脆弱。 问题答案: 这是该主题给出

  • 问题内容: 我整天一直在搜寻,找不到答案,因此如果已经回答了,请提前道歉。 我正在尝试从大量不同的网站中获取所有可见的文本。原因是我要处理文本以最终对网站进行分类。 经过几天的研究,我认为硒是我最好的机会。我发现一种使用Selenium来捕获所有文本的方法,不幸的是同一文本被多次捕获: 该内部条件环路消除同一文本多次读取的问题的尝试-但是,它没有,只是作为计划在某些网页的工作。(这也使脚本慢很多)

  • 问题内容: 我正在使用SSH2。当我尝试通过设置属性时,这是正确的。但是,当我尝试使用获得相同的属性时,我什么也没有。 为什么?他们不一样吗? 当我使用时,我得到了这些: 似乎在休眠状态下进行会话。为什么? 问题答案: 是的,它们是不同的,在scriptlet中,您使用http会话隐式对象;在struts标签属性中,您引用通过OGNL检索的struts会话映射对象。您一无所获,只是因为它们与众不同