def fetch_restaurant(self):
        self.driver.get(self.url)
        _id = get_id_by_url(self.url)

        print('Fetching restaurant with id: ' + _id, flush=True)
        name = self.driver.find_element_by_class_name('heading_title').text

        try:
            total_rating = float(
                self.driver.find_element_by_class_name(
                    'ui_bubble_rating').get_attribute('content').replace(
                        ',', '.'))
        except:
            total_rating = -1

        try:
            ranking_position = int(
                self.driver.find_element_by_class_name('header_popularity').
                find_element_by_tag_name('b').find_element_by_tag_name(
                    'span').text.split('ยบ ')[-1].split('#')[1].replace(
                        ',', ''))
        except:
            ranking_position = -1

        try:
            price = PRICE[get_language_by_url(self.driver.current_url)][
                self.driver.find_element_by_class_name(
                    'header_tags').text.replace(' ', '')]
        except:
            price = -1

        try:
            tags = self.driver.find_element_by_class_name(
                'header_links').text.split(', ')
        except:
            tags = ""

        try:
            street_address = self.driver.find_element_by_class_name(
                'street-address').text
        except:
            street_address = ""

        try:
            locality_address = self.driver.find_element_by_class_name(
                'locality').text
        except:
            locality_address = ""

        try:
            country_address = self.driver.find_element_by_class_name(
                'country-name').text
        except:
            country_address = ""

        try:
            phone = self.driver.find_element_by_class_name('phone').text
        except:
            phone = ""

        try:
            cuisines = self.driver.find_element_by_xpath(
                '//*[@id="taplc_restaurants_detail_info_content_0"]/div[2]/div/div[2]/div[2]'
            ).get_attribute('data-content').replace(', ', ',').split(',')
        except:
            cuisines = ""

        address = Address(street_address, locality_address, country_address)

        ratings = []
        for i in range(2, 6):
            try:
                rating_element = self.driver.find_element_by_xpath(
                    '//*[@id="taplc_restaurants_detail_info_content_0"]/div[3]/div['
                    + str(i) + ']')
            except:
                rating_element = None

            if rating_element:
                rating_name = rating_element.text
                try:
                    rating_value = RATING[
                        rating_element.find_element_by_class_name(
                            'ui_bubble_rating').get_attribute('class').split(
                                ' ')[-1]]
                except:
                    rating_value = -1
                rating = Rating(rating_name, rating_value)
                ratings.append(rating)

        restaurant = Restaurant(_id, name, total_rating, ranking_position,
                                price, tags, address, phone, cuisines, ratings)
        print('[COMPLETED]', flush=True)
        return restaurant.to_dict()