2016-05-03 15 views
1

airpnbの各日の空室状況や価格をdatepickerカレンダーの次のボタンをクリックして運行しています。datepickerの空き状況をxヶ月間サイトで確認

def handle(self, *args, **options): 
    def airbnb(): 
     display = Display(visible=0, size=(1024, 768)) 
     display.start() 
     driver = webdriver.Firefox() 
     driver.maximize_window() 
     driver.get("https://www.airbnb.pt/rooms/265820") 

     # wait for the check in input to load 
     wait = WebDriverWait(driver, 10) 
     elem = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.book-it-panel input[name=checkin]"))) 
     elem.click() 

     # wait for datepicker to load 
     wait.until(
      EC.visibility_of_element_located((By.CSS_SELECTOR, '.ui-datepicker:not(.loading)')) 
     ) 

     days = driver.find_elements_by_css_selector(".ui-datepicker table.ui-datepicker-calendar tr td") 
     for cell in days: 
      day = cell.text.strip() 
      if not day: 
       continue 

      if "ui-datepicker-unselectable" in cell.get_attribute("class"): 
       status = "Unavailable" 
      else: 
       status = "Available" 

      price = "n/a" 
      if status == "Available": 
       # hover the cell and wait for the tooltip 
       ActionChains(driver).move_to_element(cell).perform() 
       price = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, '.datepicker-tooltip'))).text 

      print(day, status, price) 

彼らの仕事だけで1ヶ月間の両方:

私の現在のコードのようなものです。代わりにX月を設定できるようにしたい。 homeawayためたとえば、私は、右の最初のオープンのカレンダーをクリックした後self.driver.find_element_by_css_selector('.ui-datepicker-next.ui-corner-all').c‌​lick()と試みたが、私はすべての

答えて

1

まず、私はあるa.ui-datepicker-next CSSセレクタで「来月」ボタンを見つけるだろう事前にElementNotVisibleException

おかげです両方とも可読で信頼性があります。

from selenium import webdriver 
from selenium.webdriver import ActionChains 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 


MONTH_COUNT = 3 

driver = webdriver.Firefox() 
driver.maximize_window() 
driver.get("https://www.airbnb.pt/rooms/265820") 

# wait for the check in input to load 
wait = WebDriverWait(driver, 10) 
elem = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.book-it-panel input[name=checkin]"))) 
elem.click() 

# iterate over the month count 
for month in range(MONTH_COUNT): 
    # wait for datepicker to load 
    wait.until(
     EC.visibility_of_element_located((By.CSS_SELECTOR, '.ui-datepicker:not(.loading)')) 
    ) 

    # getting current month for displaying purposes 
    current_month = driver.find_element_by_css_selector(".ui-datepicker-month").text 
    print(current_month) 

    # iterate over days 
    days = driver.find_elements_by_css_selector(".ui-datepicker table.ui-datepicker-calendar tr td") 
    for cell in days: 
     day = cell.text.strip() 
     if not day: 
      continue 

     if "ui-datepicker-unselectable" in cell.get_attribute("class"): 
      status = "Unavailable" 
     else: 
      status = "Available" 

     price = "n/a" 
     if status == "Available": 
      # hover the cell and wait for the tooltip 
      ActionChains(driver).move_to_element(cell).perform() 
      price = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, '.datepicker-tooltip'))).text 

     print(day, status, price) 

    print("-----") 
    # click next month 
    driver.find_element_by_css_selector("a.ui-datepicker-next").click() 

driver.close() 

プリント:

Maio 
(u'1', 'Unavailable', 'n/a') 
(u'2', 'Unavailable', 'n/a') 
(u'3', 'Unavailable', 'n/a') 
... 
(u'30', 'Unavailable', 'n/a') 
(u'31', 'Unavailable', 'n/a') 
----- 
Junho 
(u'1', 'Unavailable', 'n/a') 
(u'2', 'Unavailable', 'n/a') 
(u'3', 'Unavailable', 'n/a') 
... 
(u'28', 'Unavailable', 'n/a') 
(u'29', 'Unavailable', 'n/a') 
(u'30', 'Unavailable', 'n/a') 
----- 
Julho 
(u'1', 'Unavailable', 'n/a') 
(u'2', 'Unavailable', 'n/a') 
(u'3', 'Unavailable', 'n/a') 
... 
(u'29', 'Unavailable', 'n/a') 
(u'30', 'Available', u'\u20ac36') 
(u'31', 'Available', u'\u20ac36') 
----- 
+0

それがAirbnbのために動作しますが、我々は持っているので、homeawayのために、より複雑であると思われるがMONTH_COUNT変数が定義されて何ヶ月として処理 - ここ

は実装価格を得るために2カレンダーで遊んでください。あなたはその1つのためにどんな甘えがありますか? – psychok7

+0

「first_available_date」の後に「driver.find_element_by_css_selector」(「a.ui-datepicker-next」)を追加しようとしましたが、「end_date」の後ろに「ElementNotVisibleException」が追加されました。 – psychok7

+0

私に更新しますか私はairbnbのためにしようとしている完全なコードで私の質問? – psychok7

関連する問題