从datepicker获取可用性 [英] Getting availability from datepicker
问题描述
我想通过点击datepicker日历中的下一个按钮来获得每日的价格,但没有运气。
我目前的代码是:
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(驱动程序,10)
url ='https://www.homeaway.pt/arrendamento-ferias/p1418427a?uni_id=1590648'
驱动程序。 get(url)
#选择开始日期
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-switchingover &a))click()
#选择结束日期(TODO:违反DRY原则,重构!)
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()
#获取计算价格
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个月。例如,对于homeaway,我尝试使用 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
然后我注意到有涉及到的
data-event =clicktitle =Próximo>>
;< span class =ui-icon ui-icon-circle-triangle-e>Próximo& gt< / span>< / a>
我宁可不使用 Javascript
或 jQuery
直接,如果有人有更好的建议,我可以尝试他们。
但还有一些怪癖,例如我必须手动重置日历,每次我得到一个月的可用性。
这是我的最终代码:
$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b 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
范围(MONTH_COUNT):
#选择开始日期
start_date = wait.until(EC.visibility_of_element_located((
By.CSS_SELECTOR,
.quotebar-container in put [name = startDateInput])))
start_date.click()
为范围(count)中的x:
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 。($)
#选择结束日期(TODO:违反DRY原则,重构!)
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()
#获得计算价格
price = wait.until(EC.visibility_o f_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()
i am trying to get the price for each day in homeaway by clicking the next button in the datepicker calendar but with no luck.
My current code is something like:
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()
They both work but only for 1 month. I want to be able to set X months instead. For example for homeaway i tried with self.driver.find_element_by_css_selector('.ui-datepicker-next.ui-corner-all').click()
right after the first open calendar click but i got a ElementNotVisibleException
Thanks in advance
I was able to get this working using driver.execute_script('$( "a.ui-datepicker-next" ).click()')
since everything else was giving me ElementNotVisibleException
and then i noticed that there was javascript involved
<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></span></a>
I would rather not use Javascript
or jQuery
directly so if anyone has better suggestions i can try them.
But there are still a few quirks, for example i have to manually reset the calendar each time i get the availability for a certain month.
here is my final code:
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()
这篇关于从datepicker获取可用性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!