def collect_price(self, driver, current_url):
        # Load a file with specified conditions.
        rows = collectors_utils.read_file(self.data_dir)

        for row in rows:
            try:
                WebDriverWait(driver,30).until(EC.visibility_of_element_located((By.XPATH,'//select[@id="st_airplace"]')))
            except:
                print('element invisible')
                driver.quit()

            # Enterring the data of the imported file.
            
            replace_btn = driver.find_element_by_xpath('//div[@id="btnReverse"]')

            dep = row['dep']
            des = row['des']

            # Departure locations
            dep_box = driver.find_element_by_xpath('//select[@id="st_airplace"]')
            dep_box, select_options_dic = self.fetch_select_options(dep_box)
            dep_box.select_by_value(select_options_dic[dep])

            # Destination locations
            des_box = driver.find_element_by_xpath('//select[@id="ar_airplace"]')
            des_box, select_options_dic = self.fetch_select_options(des_box)
            des_box.select_by_value(select_options_dic[des])

            ## dep-date
            dep_date = driver.find_element_by_xpath(f'//input[@id="datepicker"]')

            # set date
            start = row['start']
            end = row['end']

            start_date_check = collectors_utils.check_date(start)
            end_date_check = collectors_utils.check_date(end)

            if start_date_check:
                start = start.replace('/','/')
            else:
                start = collectors_utils.get_date()[0]

            if end_date_check:
                end = end.replace('/','/')
            else:
                end = collectors_utils.get_date()[1]

            ## enter departure date
            self.set_dep_date(start, dep_date, driver)
                
            # click search button
            driver.find_element_by_xpath('//div[@class="search_btn"]').click()

            #wait

            # fetch table header
            table_header = self.fetch_table_header(driver)

            date_obj = datetime.now()
            dir_date = datetime.strftime(date_obj,'%Y%m%d')

            ##
            dir_name = f'片道-{dep.replace("/","")}-{des.replace("/","")}-{dir_date}'

            if os.path.exists(f'{self.data_dir}/{dir_name}'):
                pass
            else:
                os.mkdir(f'{self.data_dir}/{dir_name}')

            while True:
                current_date_text = driver.find_element_by_xpath('//div[@class="date"]').text
                y, m, d, _ = re.sub(r'[年月日\(]', ' ', current_date_text).split()
                endsplit = end.split('/')

                file_name = f"{self.data_dir}/{dir_name}/{m}-{d}_{endsplit[1]}-{endsplit[2]}"

                
                table_contents = self.fetch_table_contents(driver, table_header)
                
                if table_contents is not None:
                    ##
                    if self.page_feed(driver, end, current_date_text):
                        ##
                        break
                    else:
                        collectors_utils.write_file(file_name, table_header, table_contents)
                else:
                    ##
                    if self.page_feed(driver, end, current_date_text):
                        break
                    else:
                        pass

            driver.get(current_url)

        driver.quit()
    def collect_price(self, driver, current_url):
        # Load a file with specified conditions.
        rows = collectors_utils.read_file(self.data_dir)

        for row in rows:
            try:
                WebDriverWait(driver, 30).until(
                    EC.visibility_of_element_located(
                        (By.XPATH, '//select[@class="pl10 departure"]')))
            except:
                print('element invisible')
                driver.quit()

            # Enterring the data of the imported file.

            dep = row['dep']
            des = row['des']

            # Departure locations
            dep_box = driver.find_element_by_xpath(
                '//select[@class="pl10 departure"]')
            dep_box, select_options_dic = self.fetch_select_options(dep_box)
            dep_box.select_by_value(select_options_dic[dep])

            # Destination locations
            des_box = driver.find_element_by_xpath(
                '//select[@class="pl10 arrive"]')
            des_box, select_options_dic = self.fetch_select_options(des_box)
            des_box.select_by_value(select_options_dic[des])

            ## dep-date
            dep_date = driver.find_element_by_xpath(
                f'//input[@aria-labelledby="aria-label-departure-date"]')

            # set date
            start = row['start']
            end = row['end']

            start_date_check = collectors_utils.check_date(start)
            end_date_check = collectors_utils.check_date(end)

            if start_date_check:
                start = start.replace('/', '/')
            else:
                start = collectors_utils.get_date()[0]

            if end_date_check:
                end = end.replace('/', '/')
            else:
                end = collectors_utils.get_date()[1]

            ## enter departure date
            #self.set_dep_date(start, dep_date, driver)
            search_date = start.replace("/", '/')
            driver.execute_script(
                f'arguments[0].setAttribute("value","{search_date}")',
                dep_date)

            # click search button
            driver.find_element_by_xpath(
                '//div[@class="decide-btn btn-grad-orange"]').click()

            # fetch table header
            table_header = self.fetch_table_header(driver)

            date_obj = datetime.now()
            dir_date = datetime.strftime(date_obj, '%Y%m%d')

            ##
            dir_name = f'片道-{dep.replace("/","")}-{des.replace("/","")}-{dir_date}'

            if os.path.exists(f'{self.data_dir}/{dir_name}'):
                pass
            else:
                os.mkdir(f'{self.data_dir}/{dir_name}')

            while True:
                current_date = driver.find_element_by_xpath(
                    '//div[@class="lowest_price_list_cell tx-c active selectable"]/p[1]'
                )
                current_date_text = current_date.text
                m, d, _ = current_date_text.replace('(', '/').split('/')
                endsplit = end.split('/')

                file_name = f"{self.data_dir}/{dir_name}/{m}-{d}_{endsplit[1]}-{endsplit[2]}"

                table_contents = self.fetch_table_contents(
                    driver, table_header)

                if table_contents is not None:
                    ##
                    if self.page_feed(driver, end, current_date, m, d):
                        ##
                        break
                    else:
                        collectors_utils.write_file(file_name, table_header,
                                                    table_contents)
                else:
                    ##
                    if self.page_feed(driver, end, current_date, m, d):
                        break
                    else:
                        pass

            driver.get(current_url)

        driver.quit()
    def collect_price(self, driver, current_url, way_num):
        # Load a file with specified conditions.
        rows = collectors_utils.read_file(self.data_dir)

        for row in rows:
            try:
                WebDriverWait(driver, 30).until(
                    EC.visibility_of_element_located(
                        (By.XPATH, '//select[@id="departure_airport"]')))
            except:
                print('element invisible')
                driver.quit()

            # Enterring the data of the imported file.
            dep_box = driver.find_element_by_xpath(
                '//select[@id="departure_airport"]')
            replace_btn = driver.find_element_by_xpath(
                '//button[@id="set_reverse"]')
            des_box = driver.find_element_by_xpath(
                '//select[@id="arrival_airport"]')

            dep = row['dep']
            des = row['des']

            # Departure locations
            dep_box, select_options_dic = self.fetch_select_options(dep_box)
            dep_box.select_by_value(select_options_dic[dep])

            # Destination locations
            des_box, select_options_dic = self.fetch_select_options(des_box)
            des_box.select_by_value(select_options_dic[des])

            if way_num == 0:
                # dep-date
                dep_date = driver.find_element_by_xpath(
                    f'//div[@class="search__ctrl__date"]/div[@id="date"]/input[@id="js-DP"]'
                )
            else:
                # dep-date
                dep_date = driver.find_element_by_xpath(
                    f'//div[@class="search__ctrl__date"]/div[@id="date"]/input[@id="js-DP"]'
                )
                # des-date
                des_date = driver.find_element_by_xpath(
                    f'//div[@class="search__ctrl__date__arrival"]/div[@id="date2"]/input[@id="js-DP2"]'
                )

            # set date
            start = row['start']
            end = row['end']

            start_date_check = collectors_utils.check_date(start)
            end_date_check = collectors_utils.check_date(end)

            if start_date_check:
                start = start.replace('/', '/')
            else:
                start = collectors_utils.get_date()[0]

            if end_date_check:
                end = end.replace('/', '/')
            else:
                end = collectors_utils.get_date()[1]

            if way_num == 0:
                # enter departure date
                driver.execute_script(
                    f"arguments[0].value = '{start.replace('/','/')}'",
                    dep_date)
            else:
                # enter departure date
                driver.execute_script(
                    f"arguments[0].value = '{start.replace('/','/')}'",
                    dep_date)
                # enter destination date
                driver.execute_script(
                    f"arguments[0].value = '{end.replace('/','/')}'",
                    des_date)

            # click search button
            driver.find_element_by_xpath(
                '//button[@id="js-btnSearchTicket"]').click()

            # fetch table header
            table_header = self.fetch_table_header(driver)

            date_obj = datetime.now()
            dir_date = datetime.strftime(date_obj, '%Y%m%d')

            if way_num == 0:
                dir_name = f'片道-{dep}-{des}-{dir_date}'
            else:
                dir_name = f'往復-{dep}-{des}-{dir_date}'

            if os.path.exists(f'{self.data_dir}/{dir_name}'):
                pass
            else:
                os.mkdir(f'{self.data_dir}/{dir_name}')

            while True:
                try:
                    WebDriverWait(driver, 3).until(
                        EC.visibility_of_element_located(
                            (By.XPATH, '//p[@class="date"]')))
                except:
                    print('element invisible')

                current_date_text = driver.find_element_by_xpath(
                    '//p[@class="date"]').text
                current_date = current_date_text.replace(
                    '\u3000|\u3000',
                    '-').replace(' - ', '-').replace(' (',
                                                     '(').replace('/', '-')
                current_date = f"{current_date.split('-')[1]}-{current_date.split('-')[2]}"

                if way_num == 0:
                    file_name = f'{self.data_dir}/{dir_name}/{current_date}'
                else:
                    endsplit = end.split('/')
                    file_name = f"{self.data_dir}/{dir_name}/{current_date}_{endsplit[1]}-{endsplit[2]}"

                table_contents = self.fetch_table_contents(
                    driver, table_header)

                if table_contents is not None:
                    if self.page_feed(driver, current_date_text, end):
                        if way_num == 1:
                            endsplit = end.split('/')
                            last_day = int(endsplit[-1]) + 1
                            end = f'{endsplit[1]}-{last_day}'

                            file_name = f"{self.data_dir}/{dir_name}/{current_date}_{end}"
                            collectors_utils.write_file(
                                file_name, table_header, table_contents)
                        break
                    else:
                        collectors_utils.write_file(file_name, table_header,
                                                    table_contents)
                else:
                    if self.page_feed(driver, current_date_text, end):
                        break
                    else:
                        pass

            driver.get(current_url)

        driver.quit()
Esempio n. 4
0
    def collect_price(self, driver, current_url, way_num):
        # Load a file with specified conditions.
        rows = collectors_utils.read_file(self.data_dir)

        for row in rows:
            try:
                WebDriverWait(driver, 30).until(
                    EC.visibility_of_element_located(
                        (By.XPATH, '//select[@id="ID_F1Departure"]')))
            except:
                print('element invisible')
                driver.quit()

            # Enterring the data of the imported file.
            dep_box = driver.find_element_by_xpath(
                '//select[@id="ID_F1Departure"]')
            replace_btn = driver.find_element_by_xpath(
                '//li[@class="flight_replace replace_btn"]')
            des_box = driver.find_element_by_xpath(
                '//select[@id="ID_F1Destination"]')

            dep = row['dep']
            des = row['des']

            # Departure locations
            driver.execute_script("arguments[0].click()", dep_box)
            driver.find_element_by_xpath(
                f'//li[@data-airport_name="{dep}"]').click()

            # Destination locations
            driver.execute_script("arguments[0].click()", des_box)

            time.sleep(1)
            driver.find_element_by_xpath(
                f'//span[@id="des_list"]/ul/li[@data-airport_name="{des}"]'
            ).click()

            time.sleep(1)

            if way_num == 0:
                # dep-date
                dep_date = driver.find_element_by_xpath(
                    f'//li[@class="flight_date to-date"]/span[@class="from-trigger"]/span[@class="text-dep-date"]'
                )
                # des-date
                des_date = driver.find_element_by_xpath(
                    f'//li[@class="flight_date returnDay"]/span[@class="to-trigger"]/span[@class="text-des-date"]'
                )
            else:
                # dep-date
                dep_date = driver.find_element_by_xpath(
                    f'//li[@class="flight_date to-date"]/span[@class="from-trigger"]/span[@class="text-dep-date"]'
                )

            # set date
            start = row['start']
            end = row['end']

            start_date_check = collectors_utils.check_date(start)
            end_date_check = collectors_utils.check_date(end)

            if start_date_check:
                start = start.replace('/', '/')
            else:
                start = collectors_utils.get_date()[0]

            if end_date_check:
                end = end.replace('/', '/')
            else:
                end = collectors_utils.get_date()[1]

            if way_num == 0:
                # enter departure date
                driver.execute_script(f"arguments[0].innerHTML = '{start}'",
                                      dep_date)
                # enter destination date
                driver.execute_script(f"arguments[0].innerHTML = '{end}'",
                                      des_date)
            else:
                # enter departure date
                driver.execute_script(f"arguments[0].innerHTML = '{start}'",
                                      dep_date)

            # click search button
            driver.find_element_by_xpath(
                '//input[@class="search_button"]').click()

            # fetch table header
            table_header = self.fetch_table_header(driver)

            date_obj = datetime.now()
            dir_date = datetime.strftime(date_obj, '%Y%m%d')

            if way_num == 0:
                dir_name = f'往復-{dep}-{des}-{dir_date}'
            else:
                dir_name = f'片道-{dep}-{des}-{dir_date}'

            if os.path.exists(f'{self.data_dir}/{dir_name}'):
                pass
            else:
                os.mkdir(f'{self.data_dir}/{dir_name}')

            while True:
                current_date_text = driver.find_element_by_xpath(
                    '//div[@id="showSearchBoxButton"]').text
                current_date = current_date_text.replace(
                    '\u3000|\u3000',
                    '-').replace(' - ', '-').replace(' (',
                                                     '(').replace('/', '-')
                current_date = f"{current_date.split('-')[2]}-{current_date.split('-')[3]}"

                if way_num == 0:
                    endsplit = end.split('/')
                    file_name = f"{self.data_dir}/{dir_name}/{current_date}_{endsplit[1]}-{endsplit[2]}"
                else:
                    file_name = f'{self.data_dir}/{dir_name}/{current_date}'

                table_contents = self.fetch_table_contents(
                    driver, table_header)

                if table_contents is not None:
                    if self.page_feed(driver, end):
                        if way_num == 0:
                            endsplit = end.split('/')
                            last_day = int(endsplit[-1]) + 1
                            end = f'{endsplit[1]}-{last_day}'

                            file_name = f"{self.data_dir}/{dir_name}/{current_date}_{end}"
                            collectors_utils.write_file(
                                file_name, table_header, table_contents)
                        break
                    else:
                        collectors_utils.write_file(file_name, table_header,
                                                    table_contents)
                else:
                    if self.page_feed(driver, end):
                        break
                    else:
                        pass

            driver.get(current_url)

        driver.quit()
Esempio n. 5
0
    def collect_price(self, driver, current_url):
        # Load a file with specified conditions.
        rows = collectors_utils.read_file(self.data_dir)

        for row in rows:
            try:
                WebDriverWait(driver, 3).until(
                    EC.visibility_of_element_located(
                        (By.XPATH, '//*[@id="flight-origin-hp-flight"]')))
            except:
                print('element invisible')

            # Enterring the data of the imported file.

            dep = row['dep']
            des = row['des']

            # Departure locations
            dep_box = driver.find_element_by_xpath(
                '//*[@id="flight-origin-flp"]')
            dep_box.clear()
            dep_box.send_keys(dep)
            time.sleep(1)
            dep_box.clear()
            dep_box.send_keys(dep)

            # Destination locations
            des_box = driver.find_element_by_xpath(
                '//*[@id="flight-destination-flp"]')
            des_box.clear()
            des_box.send_keys(des)
            time.sleep(1)
            des_box.clear()
            des_box.send_keys(des)

            # set date
            start = row['start']
            end = row['end']

            start_date_check = collectors_utils.check_date(start)
            end_date_check = collectors_utils.check_date(end)

            if start_date_check:
                start = start.replace('/', '/')
            else:
                start = collectors_utils.get_date()[0]

            if end_date_check:
                end = end.replace('/', '/')
            else:
                end = collectors_utils.get_date()[1]

            ## enter departure date
            #self.set_dep_date(start, dep_date, driver)
            search_date = start.replace("/", '/')

            self.set_date(driver, search_date)

            # click search button
            search_btn = driver.find_element_by_xpath(
                '//label[@class="col search-btn-col"]/button')
            driver.execute_script('arguments[0].click()', search_btn)

            # fetch table header
            table_header = [i + 1 for i in range(19)]

            date_obj = datetime.now()
            dir_date = datetime.strftime(date_obj, '%Y%m%d')

            ##
            dir_name = f'片道-{dep.replace("/","")}-{des.replace("/","")}-{dir_date}'

            if os.path.exists(f'{self.data_dir}/{dir_name}'):
                pass
            else:
                os.mkdir(f'{self.data_dir}/{dir_name}')

            while True:
                current_date = driver.find_element_by_xpath(
                    '//div[@class="title-date-rtv"]')
                current_date_text = current_date.text
                m, d, _ = current_date_text.replace(' 月 ',
                                                    ' ').replace(' 日 ',
                                                                 ' ').split()
                endsplit = end.split('/')

                file_name = f"{self.data_dir}/{dir_name}/{m}-{d}_{endsplit[1]}-{endsplit[2]}"

                table_contents = self.fetch_table_contents(
                    driver, table_header)

                if table_contents is not None:
                    ##
                    if self.page_feed(driver, end, current_date, m, d):
                        ##
                        break
                    else:
                        collectors_utils.write_file(file_name, table_header,
                                                    table_contents)
                else:
                    ##
                    if self.page_feed(driver, end, current_date, m, d):
                        break
                    else:
                        pass

            driver.get(current_url)

        driver.quit()