class Rakuten::Travel::Crawler::Console

Public Class Methods

new(params) click to toggle source
# File lib/rakuten/travel/crawler/console.rb, line 5
def initialize params
  @config = {
    login_id: params[:login_id],
    login_pw: params[:login_pw],
    chain: params[:chain] ||= false,
    rakuten_hotel_id: params[:rakuten_hotel_id] ||= 0,
    mode: params[:mode] ||= :chrome
  }
  @wait = Selenium::WebDriver::Wait.new(timeout: 100)
  @driver = HotelPrice.get_selenium_driver @config[:mode]
  if @config[:chain]
    go_to_management_page_chain
  else
    go_to_management_page_single
  end
end

Public Instance Methods

daily_data() click to toggle source

def daily_data_past

@driver.find_element(:xpath, "/html/body/table[2]/tbody/tr/td[3]/table[2]/tbody/tr[1]/td[1]/table/tbody/tr/td[3]/a/img").click
@driver.find_element(:xpath, "/html/body/table[2]/tbody/tr/td[3]/table[5]/tbody/tr[2]/td[1]/table/tbody/tr[3]/td/table/tbody/tr/td[1]/input").click
sleep 3
(0..13).each do |i|
  select = Selenium::WebDriver::Support::Select.new(@driver.find_element(:name, "f_date"))
  select.select_by(:index, i)
  display_data = @driver.find_element(:xpath, '//input[@value = "表示"]')
  display_data.click
  rows = @driver.find_elements(:xpath, "//tr")
  rows[27..58].map do |row|
    cells = row.find_elements(:css, "td[align=RIGHT]").map { |a| a.text.strip.gsub(",", "") }
    break unless cells[5] && cells[5].to_i > 1
    {
      date: cells[0],
      reservation_sales: cells[1],
      access_ppl: cells[2],
      cvr: cells[3],
      reservation_unit_price: cells[4],
      pv: cells[5],
      pc_retained: cells[6],
      pc_deliveries: cells[7],
      pc_total_delivered: cells[8],
      sp_retained: cells[9],
      sp_deliveries: cells[10],
      sp_total_delivered: cells[11]
    }
  end
end

end

# File lib/rakuten/travel/crawler/console.rb, line 464
def daily_data
  @driver.find_element(:xpath, "/html/body/table[2]/tbody/tr/td[3]/table[2]/tbody/tr[1]/td[1]/table/tbody/tr/td[3]/a/img").click
  @driver.find_element(:xpath, "/html/body/table[2]/tbody/tr/td[3]/table[5]/tbody/tr[2]/td[1]/table/tbody/tr[3]/td/table/tbody/tr/td[1]/input").click
  sleep 3
  if Time.now.day == 1
  else
    value = if Time.now.month.to_s.size == 2
              Time.now.year.to_s + Time.now.month.to_s + "01"
            else
              Time.now.year.to_s + "0" + Time.now.month.to_s + "01"
            end
    select = Selenium::WebDriver::Support::Select.new(@driver.find_element(:name, "f_date"))
    select.select_by(:value, value)
  end
  @driver.find_element(:xpath, '//input[@value = "表示"]').click
  rows = @driver.find_elements(:xpath, "//tr")
  data = []
  rows[27..58].each do |row|
    cells = row.find_elements(:css, "td[align=RIGHT]").map { |a| a.text.strip.gsub(",", "") }
    break unless cells[5] && cells[5].to_i > 1
    data << {
      date: cells[0],
      reservation_sales: cells[1],
      access_ppl: cells[2],
      cvr: cells[3],
      reservation_unit_price: cells[4],
      pv: cells[5],
      pc_retained: cells[6],
      pc_deliveries: cells[7],
      pc_total_delivered: cells[8],
      sp_retained: cells[9],
      sp_deliveries: cells[10],
      sp_total_delivered: cells[11]
    }
  end
  data
end
degit2(num) click to toggle source

def get_area_seo_rank

@driver.find_element(:xpath, "/html/body/table[2]/tbody/tr/td[3]/table[1]/tbody/tr[2]/td/table/tbody/tr[1]/td[5]/table/tbody/tr/td/table[1]/tbody/tr[5]/td[2]/font/b")
rows = @driver.find_elements(:xpath, "/html/body/table[2]/tbody/tr/td[3]/table[1]/tbody/tr[2]/td/table/tbody/tr[1]/td[5]/table/tbody/tr/td/table[1]/tbody/tr[5]")
rows.each do |f|
  cells = f.find_elements(:css, "td").map(&:text)
  return cells[1]
end

end

# File lib/rakuten/travel/crawler/console.rb, line 346
def degit2 num
  num = "0#{num}" if num.to_s.size == 1
  num
end
edit_plan() click to toggle source
# File lib/rakuten/travel/crawler/console.rb, line 88
def edit_plan
  go_to_plan_setting
  @data = {}
  @plans.each_with_index do |row, i|
    cells = row.find_elements(:css, "td")
    plan_info = row.text.split(":")
    @data[i] = {
      hotel_id: @hotel.id,
      manage_number: plan_info[0],
      plan_name: plan_info[1]
    }
  end

  (0..@plans.size - 1).each do |i|
    plan = RakutenPlan.find_by(manage_number: @data[i][:manage_number])
    @driver.find_element(:link_text, @data[i][:plan_name]).click
    @driver.find_element(:xpath, "/html/body/form[4]/table[1]/tbody/tr/td/table/tbody[1]/tr[3]/td[2]").text
    flag = []
    flag[0] = "楽天トラベル[宿泊のみ]" if @driver.find_element(:name, "f_tabi_flg").selected?

    if @driver.find_element(:name, "f_dp_del_flg").selected?
      flag[1] = "ANA楽パック" if @driver.find_element(:name, "f_dp_ana_flg").selected?
      flag[2] = "JAL楽パック" if @driver.find_element(:name, "f_dp_jal_flg").selected?
    end
    flag[3] = "R-with" if @driver.find_element(:name, "f_kobetu_flg").selected?
    begin
      plan_name_p = @driver.find_element(:name, "f_dp_title").attribute("value")
      plan_body_p = @driver.find_element(:name, "f_dp_naiyo").attribute("value")

      plan_name_r = @driver.find_element(:name, "f_rw_title").attribute("value")
      plan_body_r = @driver.find_element(:name, "f_rw_naiyo").attribute("value")
    rescue StandardError => e
      plan_name_p = ""
      plan_body_p = ""

      plan_name_r = ""
      plan_body_r = ""
      puts "no dp"
      puts e
    end

    plan_body = @driver.find_element(:name, "f_naiyo").attribute("value")

    # inbound = @driver.find_element(:xpath, "/html/body/form[4]/table[1]/tbody/tr/td/table/tbody[1]/tr[11]/td[2]/table/tbody/tr[1]/td/label") if @driver.find_element(:name, "f_multi").selected?
    @room_types = @driver.find_elements(:name, "f_syu")
    @room_type = []
    @room_types.each_with_index do |row, i|
      if row.selected?
        @room_type[i - 1] = row.attribute("value")
      end
    end
    plan_start_y = @driver.find_element(:name, "f_k_nen1").attribute("value")
    plan_start_m = @driver.find_element(:name, "f_k_tuki1").attribute("value")
    plan_start_d = @driver.find_element(:name, "f_k_hi1").attribute("value")
    plan_end_y = @driver.find_element(:name, "f_k_nen2").attribute("value")
    plan_end_m = @driver.find_element(:name, "f_k_tuki2").attribute("value")
    plan_end_d = @driver.find_element(:name, "f_k_hi2").attribute("value")
    stay_start_y = @driver.find_element(:name, "f_nen1").attribute("value")
    stay_start_m = @driver.find_element(:name, "f_tuki1").attribute("value")
    stay_start_d = @driver.find_element(:name, "f_hi1").attribute("value")
    stay_end_y = @driver.find_element(:name, "f_nen2").attribute("value")
    stay_end_m = @driver.find_element(:name, "f_tuki2").attribute("value")
    stay_end_d = @driver.find_element(:name, "f_hi2").attribute("value")
    min_stay = @driver.find_element(:name, "f_min_hak").attribute("value")
    max_stay = @driver.find_element(:name, "f_max_hak").attribute("value")
    checkintime = @driver.find_element(:name, "f_lt_plan_in").attribute("value")
    checkouttime = @driver.find_element(:name, "f_lt_plan_in_limit").attribute("value")

    @driver.find_elements(:name, "f_credit").each_with_index do |f, i|
      next unless f.selected?

      @payment_method = if i == 0
                          "現金決済または事前カード決済"
                        elsif i == 1
                          "事前カード決済のみ"
                        elsif i == 2
                          "現金のみ"
                        else
                          ""
                        end
    end

    plan_hash = {
      plan_name_p: plan_name_p,
      plan_name_r: plan_name_r,
      plan_body: plan_body.gsub("\n", ""),
      plan_body_p: plan_body_p.gsub("\n", ""),
      plan_body_r: plan_body_r.gsub("\n", ""),
      # :inbound => inbound,
      room_type_ids: @room_type,
      plan_start: plan_start_y + "-" + plan_start_m + "-" + plan_start_d,
      plan_end: plan_end_y + "-" + plan_end_m + "-" + plan_end_d,
      stay_start: stay_start_y + "-" + stay_start_m + "-" + stay_start_d,
      stay_end: stay_end_y + "-" + stay_end_m + "-" + stay_end_d,
      payment_method: @payment_method,
      min_stay: min_stay,
      max_stay: max_stay,
      checkintime: checkintime,
      checkouttime: checkouttime
    }
    puts "plan saved!: #{plan_hash}" if plan.update_attributes(plan_hash)
    @driver.navigate.back
  end

  @driver.quit
end
edit_room_type() click to toggle source
# File lib/rakuten/travel/crawler/console.rb, line 214
def edit_room_type
  @driver.find_element(:xpath, "/html/body/table[2]/tbody/tr/td[3]/table[3]/tbody/tr[2]/td[1]/table/tbody/tr[3]/td/table/tbody/tr[1]/td[2]/input").click
  @wait.until { @driver.find_element(:link_text, "宿泊") }
  @driver.find_element(:link_text, "宿泊").click
  @room_types = @driver.find_elements(:class, "h_top_rm_name")
  @data = {}
  @room_types.each_with_index do |row, i|
    cells = row.find_elements(:css, "td")
    room_type_info = row.text.split(":")
    @data[i] = {
      hotel_id: @hotel.id,
      room_type_id: room_type_info[0],
      room_type_name: room_type_info[1]
    }
  end
  (0..@data.size - 1).each do |room_types|
    @driver.find_element(:link_text, @data[room_types][:room_type_name]).click
    flag = []
    flag[0] = "楽天トラベル[宿泊のみ]" if @driver.find_element(:name, "f_tabimado_del_flg").selected?

    if @driver.find_element(:name, "f_dp_del_flg").selected?
      flag[1] = "楽天トラベルパッケージ"
      room_type_name_p = @driver.find_element(:name, "f_n_dp_syu").attribute("value")
      remark_p = @driver.find_element(:name, "f_r_dp_syu").attribute("value")
    else
      room_type_name_p = ""
      remark_p = ""
    end
    flag[2] = "R-with" if @driver.find_element(:name, "f_kobetu_del_flg").selected?
    flag[3] = "R-with[割引料金]" if @driver.find_element(:name, "f_vip_del_flg").selected?

    room_facility = []
    room_facility[0] = "トイレ" if @driver.find_element(:id, "view4_toilet") .selected?
    room_facility[1] = "バス" if @driver.find_element(:id, "view4_bath") .selected?
    room_facility[2] = "シャワーのみ" if @driver.find_element(:id, "view4_shower") .selected?
    img_url = @driver.find_element(:name, "f_img_url").attribute("value")
    @driver.find_elements(:name, "f_pic_flg").each do |f|
      img_url = if f.selected?
                  @driver.find_element(:name, "f_img_url").attribute("value")
                else
                  ""
                end
    end

    @driver.find_elements(:name, "f_credit").each_with_index do |f, i|
      next unless f.selected?

      @payment_method = if i == 0
                          "現金決済または事前カード決済"
                        elsif i == 1
                          "事前カード決済のみ"
                        elsif i == 2
                          "現金のみ"
                        else
                          ""
                        end
    end

    if @driver.find_element(:id, "nc_width1").selected?
      mm = @driver.find_element(:id, "su_width1").attribute("value")
      room_size = mm.to_s + "㎡"
      room_size_mm = mm.to_i
      room_size_tatami = ""
    elsif @driver.find_element(:id, "nc_width2").selected?
      mm = @driver.find_element(:id, "nc_width2").attribute("value")
      room_size = mm.to_s + "畳"
      room_size_mm = ""
      room_size_tatami = mm.to_i
    elsif @driver.find_element(:id, "nc_width3").selected?
      room_size = "客室により異なる"
      room_size_mm = ""
      room_size_tatami = ""
    end
    (0..5).each do |i|
      @driver.find_element(:id, "view2_type_#{i}").attribute("value") if @driver.find_element(:id, "view2_type_#{i}").selected?
    end

    # Pause sort
    # room_facility = %w(禁煙ルーム 喫煙ルーム インターネットができる部屋 露天風呂付き客室 ジャグジーのある客室 離れ客室 コーナールーム 二間以上 洗浄機付きトイレ 高層階 夜景が見える 海が見える 山が見える 湖が見える 川が見える)
    # sort = []
    # for i in 1 .. 13
    #   sort[i-1] = room_facility[i-1] if @driver.find_element(:id, "narrow#{i}").selected?
    # end
    # sort.compact!

    room_db = RakutenRoom.find_by(hotel_id: @hotel.id, room_type_id: @data[room_types][:room_type_id])
    room_type_data = {
      public: flag,
      room_type_name_p: room_type_name_p,
      capacity_min: @driver.find_element(:xpath, "/html/body/table[8]/tbody/tr/td/table[1]/tbody/tr[5]/td[2]").text.gsub(" 名~ 名", ""),
      capacity_max: @driver.find_element(:name, "f_max").attribute("value"),
      remark: @driver.find_element(:name, "f_bikou").attribute("value"),
      remark_p: remark_p,
      room_size: room_size,
      room_size_mm: room_size_mm,
      room_size_tatami: room_size_tatami,
      room_category: room_category,
      room_facility: room_facility,
      room_img: img_url,
      #:sort => sort,
      payment_method: @payment_method
    }
    puts "room type info updated: #{@hotel.id}" if room_db.update_attributes(room_type_data)
    @driver.navigate.back
  end
  @driver.quit
end
get_plan_num() click to toggle source
# File lib/rakuten/travel/crawler/console.rb, line 66
def get_plan_num
  go_to_plan_setting
  @driver.quit
  @plans.size
end
get_reservation_info() click to toggle source
# File lib/rakuten/travel/crawler/console.rb, line 351
def get_reservation_info
  t = Time.now
  @driver.find_element(:xpath, "/html/body/table[2]/tbody/tr/td[3]/table[3]/tbody/tr[2]/td[2]/table/tbody/tr[3]/td/input").click
  if t.day == 1
    last_month = degit2 t.prev_month.month.to_i
    yesterday = degit2 t.prev_month.end_of_month.day.to_i
    this_month = degit2 t.month.to_i
    today = degit2 t.day.to_i
    last_month_select = Selenium::WebDriver::Support::Select.new(@driver.find_element(:name, "f_tuki1"))
    last_month_select.select_by(:value, last_month.to_s)
    yesterday_select = Selenium::WebDriver::Support::Select.new(@driver.find_element(:name, "f_hi1"))
    yesterday_select.select_by(:value, yesterday.to_s)
    this_month_select = Selenium::WebDriver::Support::Select.new(@driver.find_element(:name, "f_tuki2"))
    this_month_select.select_by(:value, this_month.to_s)
    today_select = Selenium::WebDriver::Support::Select.new(@driver.find_element(:name, "f_hi2"))
    today_select.select_by(:value, today.to_s)
    search = @driver.find_element(:xpath, "/html/body/table[7]/tbody/tr[1]/td[4]/input").click
  else
    yesterday = degit2 t.yesterday.day.to_i
    today = degit2 t.day.to_i
    yesterday_select = Selenium::WebDriver::Support::Select.new(@driver.find_element(:name, "f_hi1"))
    yesterday_select.select_by(:value, yesterday.to_s)
    today_select = Selenium::WebDriver::Support::Select.new(@driver.find_element(:name, "f_hi2"))
    today_select.select_by(:value, today.to_s)
    search = @driver.find_element(:xpath, "/html/body/table[7]/tbody/tr[1]/td[4]/input").click
  end

  @wait.until { @driver.find_elements(:xpath, "//tr") }
  sleep 10
  rows = @driver.find_elements(:xpath, "//tr")
  row_num = rows.size
  if row_num != 25
    rows[21..row_num - 4].each do |row|
      cells = row.find_elements(:css, "td").map { |a| a.text.strip.gsub(",", "") }
      point = cells[4].split("\n")[3].gsub("予定ポイント:", "").gsub(" ポイント", "") if cells[4].split("\n")[3].present?
      begin
        if cells[0].size < 7
          @reservation_date = {
            date: Time.now.strftime("%F"),
            reservation_status: cells[0],
            reservation_date: cells[1].split("\n")[2],
            checkindate: cells[1].split("\n")[0],
            checkoutdate: cells[1].split("\n")[1],
            room_type: cells[2].split("\n")[0],
            reservation_number: cells[2].split("\n")[2].split(":")[1],
            payment_on_cash: cells[3].gsub("円", "").to_i,
            price: cells[2].split("\n")[1].split(":")[0].gsub("円人数", ""),
            guest_name: cells[4].split("\n")[0],
            guest_tel: cells[4].split("\n")[1].gsub("(", "").gsub(")", ""),
            point: point
          }
        else
          plan_number = cells[2].split("\n")[0].scan(/\(.+?\)/).last
          @reservation_date = {
            date: Time.now.strftime("%F"),
            hotel_id: @hotel.id,
            reservation_status: cells[0].split("\n\n")[1],
            reservation_date: cells[1].split("\n")[2],
            checkindate: cells[1].split("\n")[0],
            checkoutdate: cells[1].split("\n")[1],
            plan_name: cells[2].split("\n")[0],
            plan_number: plan_number.to_s.gsub("(", "").gsub(")", ""),
            room_type: cells[2].split("\n")[1],
            price: cells[2].split("\n")[2].split(":")[0].gsub("円人数", ""),
            ppl_num: cells[2].split("\n")[2].split(":")[1].gsub("(", "").gsub(")", ""),
            reservation_number: cells[2].split("\n")[3].gsub("予約番号:", ""),
            payment_on_cash: cells[3].gsub("円", "").to_i,
            member_name: cells[4].split("\n")[0],
            guest_name: cells[4].split("\n")[1],
            guest_tel: cells[4].split("\n")[2].gsub("(", "").gsub(")", ""),
            point: point
          }
        end
        puts "saved:#{@reservation_date}" if RakutenReservation.create(@reservation_date).valid?
      rescue StandardError => e
        puts e
      end
    end
  end
  @driver.quit
end
go_to_management_page_chain() click to toggle source
# File lib/rakuten/travel/crawler/console.rb, line 22
def go_to_management_page_chain
  @driver.get "https://manage.travel.rakuten.co.jp/portal/inn/ry_group.main"
  @driver.find_element(:name, "f_id").send_keys @config[:login_id].to_s
  @driver.find_element(:name, "f_pass").send_keys @config[:login_pw].to_s
  @driver.find_element(:xpath, "/html/body/table/tbody/tr/td/table/tbody/tr/td/table/tbody/tr/td/table/tbody/tr/td/table/tbody/tr[2]/td/form/table/tbody/tr[2]/td[3]/input").click
  begin
    @driver.find_element(:xpath, "/html/body/center/table/tbody/tr[5]/td[2]/form[3]/input[8]").click
  rescue StandardError
    @driver.find_element(:xpath, "/html/body/center/table/tbody/tr[7]/td[2]/form[3]/input[8]").click
  end
  @i = 0
  (2..21).each do |i|
    rakuten_hotel_id = @driver.find_element(:xpath, "/html/body/center[2]/table/tbody/tr[#{i}]/td[1]").text
    @i = i if @config[:rakuten_hotel_id].to_s == rakuten_hotel_id.to_s
    break if @i == i
  end
  until @i != 0
    @driver.find_element(:xpath, "/html/body/table/tbody/tr/td[2]/form/input[10]").click
    (2..21).each do |i|
      rakuten_hotel_id = @driver.find_element(:xpath, "/html/body/center[2]/table/tbody/tr[#{i}]/td[1]").text
      @i = i if @config[:rakuten_hotel_id].to_s == rakuten_hotel_id.to_s
      break if @i == i
    end
  end
  @driver.find_element(:xpath, "/html/body/center[2]/table/tbody/tr[#{@i}]/td[3]/form/input[10]").click
  @driver
end
go_to_management_page_single() click to toggle source
# File lib/rakuten/travel/crawler/console.rb, line 50
def go_to_management_page_single
  @driver.get "https://manage.travel.rakuten.co.jp/portal/inn/mp_kanri_image_up.main"
  @driver.find_element(:name, "f_id").send_keys @config[:login_id]
  @driver.find_element(:name, "f_pass").send_keys @config[:login_pw]
  @driver.find_element(:xpath, "/html/body/table/tbody/tr/td/table/tbody/tr/td/table/tbody/tr/td/table/tbody/tr/td/table/tbody/tr[2]/td/form/table/tbody/tr[2]/td[3]/input").click
  @driver
end
go_to_plan_setting() click to toggle source
# File lib/rakuten/travel/crawler/console.rb, line 58
def go_to_plan_setting
  @driver.find_element(:xpath, "/html/body/table[2]/tbody/tr/td[3]/table[3]/tbody/tr[2]/td[1]/table/tbody/tr[3]/td/table/tbody/tr[1]/td[2]/input").click
  @wait.until { @driver.find_element(:link_text, "宿泊プラン") }
  @driver.find_element(:link_text, "宿泊プラン").click
  @plans = @driver.find_elements(:class, "h_top_pl_name")
  @driver
end
login_check() click to toggle source
# File lib/rakuten/travel/crawler/console.rb, line 322
def login_check
  exp = @driver.find_element(:xpath, "/html/body/table[1]/tbody/tr[1]/td/table/tbody/tr/td[5]/table/tbody/tr[1]/td").text.gsub("次回パスワード更新日:", "").gsub("※事前にパスワードを変更されたい場合はこちらをご参照ください。\n", "")
  rakuten_hotel_id = @driver.find_element(:xpath, "/html/body/table[1]/tbody/tr[1]/td/table/tbody/tr/td[2]/table/tbody/tr/td").text.gsub("施設番号 : ", "").split("\n")[0]
  {
    status: "success",
    password_exp_date: exp,
    rakuten_hotel_id: rakuten_hotel_id
  }
rescue StandardError => e
  {
    status: "error",
    error: e.to_s
  }
end
monthly_data_past() click to toggle source
# File lib/rakuten/travel/crawler/console.rb, line 502
def monthly_data_past
  @driver.find_element(:xpath, "/html/body/table[2]/tbody/tr/td[3]/table[2]/tbody/tr[1]/td[1]/table/tbody/tr/td[3]/a/img").click
  @driver.find_element(:xpath, "/html/body/table[2]/tbody/tr/td[3]/table[5]/tbody/tr[2]/td[1]/table/tbody/tr[3]/td/table/tbody/tr/td[2]/input").click
  @driver.find_element(:xpath, "/html/body/center/table[1]/tbody/tr[2]/td/table/tbody/tr[2]/td/form/input[8]").click
  rows = @driver.find_elements(:xpath, "//tr")
  rows[19..31].map do |row|
    cells = row.find_elements(:css, "td").map { |a| a.text.strip.gsub(",", "") }
    break unless cells[9] && cells[9].to_i > 1
    {
      date: cells[0].gsub("/", "").to_s + "01",
      reservation_sales: cells[1],
      reservation_ppl: cells[2],
      access_ppl: cells[3],
      access_ppl_top_avg: cells[4],
      cvr: cells[5],
      cvr_top_avg: cells[6],
      reservation_unit_price: cells[7],
      reservation_unit_price_top_avg: cells[8],
      pv: cells[9],
      pv_top_avg: cells[10],
      rmail_list_num: cells[11],
      rmail_num: cells[12],
      rmail_delivery_num: cells[13],
      prize: cells[14]
    }
  end
end
save_plan_name() click to toggle source
# File lib/rakuten/travel/crawler/console.rb, line 72
def save_plan_name
  go_to_plan_setting
  @data = {}
  @plans.each_with_index do |row, i|
    cells = row.find_elements(:css, "td")
    plan_info = row.text.split(":")
    @data[i] = {
      hotel_id: @hotel.id,
      manage_number: plan_info[0],
      plan_name: plan_info[1]
    }
    puts "saved" if RakutenPlan.create(@data[i]).valid?
  end
  @driver.quit
end
save_room_type() click to toggle source
# File lib/rakuten/travel/crawler/console.rb, line 195
def save_room_type
  @driver.find_element(:xpath, "/html/body/table[2]/tbody/tr/td[3]/table[3]/tbody/tr[2]/td[1]/table/tbody/tr[3]/td/table/tbody/tr[1]/td[2]/input").click
  @wait.until { @driver.find_element(:link_text, "宿泊") }
  @driver.find_element(:link_text, "宿泊").click
  @room_types = @driver.find_elements(:class, "h_top_rm_name")
  @data = {}
  @room_types.each_with_index do |row, i|
    cells = row.find_elements(:css, "td")
    room_type_info = row.text.split(":")
    @data[i] = {
      hotel_id: @hotel.id,
      room_type_id: room_type_info[0],
      room_type_name: room_type_info[1]
    }
    puts "saved" if RakutenRoom.create(@data[i]).valid?
  end
  @driver.quit
end