Beispiel #1
0
class Dream11(object):
    def __init__(self):
        self.driver = None
        self.obj = Config()
        self.logger = Logger.get_console_logger()
        self.file_logger = Logger.get_file_logger()

    def get_data(self, driver_name='phantom', filename='players.txt', sortby=1):
        try:
            with open(filename, 'w') as f:
                f.truncate()
            players_bat = dict()
            players_wk = dict()
            players_bowl = dict()
            players_ar = dict()
            self.file_logger.info(
                "********************************************************************************")
            self.driver = self.obj.get_driver_instance(driver_name)
            if driver_name == 'chrome':
                try:
                    time.sleep(5)
                    self.driver.switch_to_window(self.driver.window_handles[1])
                    if self.driver.current_url == \
                        'chrome-extension://cfhdojbkjhnklbpkdaibdccddilifddb/firstRun.html':
                        # Closing Adblock tab
                        self.driver.execute_script('window.close();')
                        self.driver.switch_to_window(self.driver.window_handles[0])
                except IndexError:
                    pass
            self.logger.info("Initialized driver...")
            self.logger.info("Navigating to dream11 homepage...")
            self.driver.get(self.obj.get_xpath("Target_URL"))
            self.logger.info("Entering username")
            self.obj.send_keys(self.driver, self.obj.get_xpath("Username_input"),
                               self.obj.get_xpath(
                                   "Username"))
            self.logger.info("Entering password")
            self.obj.send_keys(self.driver, self.obj.get_xpath("Password_input"), b64decode(
                self.obj.get_xpath("Password")))
            self.logger.info("Clicking on login")
            self.obj.click_element(self.driver, self.obj.get_xpath("Login_btn"))
            time.sleep(10)
            try:
                self.logger.info("Selecting match")
                self.obj.click_element(self.driver, self.obj.get_xpath("Match_selector"))
                time.sleep(3)
                self.logger.info("Clicking on Create Team")
                self.obj.click_element(self.driver, self.obj.get_xpath("Create_team_btn"))
                time.sleep(5)
                # Getting Bats info
                self.logger.info("Clicking on BAT tab")
                self.obj.click_element(self.driver, self.obj.get_xpath("Bat_tab_link"))
                self.logger.info("Getting Batsmen info...")
                total_bats = self.obj.wait_for_elements(self.driver, self.obj.get_xpath(
                    "Players_batsmens"))
                for each_ele in total_bats:
                    player_name = self.obj.get_text_from_element(
                        self.obj.wait_for_element_inside_webelement(each_ele, self.obj.get_xpath(
                        "Player_name_text")))
                    self.logger.info("Clicking on info")
                    time.sleep(3)
                    self.obj.wait_for_element_inside_webelement(each_ele, self.obj.get_xpath(
                        "Info_link")).click()
                    self.logger.info("Getting Info")
                    time.sleep(3)
                    player_percentage = self.obj.get_text_from_element(
                        self.obj.wait_for_element(self.driver, self.obj.get_xpath(
                            "Player_percentage_text")))
                    players_bat[player_name] = float(player_percentage)
                    self.obj.click_element(self.driver, self.obj.get_xpath("Popup_close"))
                # Getting Bowls info
                self.logger.info("Clicking on BOWL tab")
                self.obj.click_element(self.driver, self.obj.get_xpath("Bowl_tab_link"))
                self.logger.info("Getting Bowlers info...")
                total_bowls = self.obj.wait_for_elements(self.driver, self.obj.get_xpath(
                    "Players_bowlers"))
                for each_ele in total_bowls:
                    player_name = self.obj.get_text_from_element(
                        self.obj.wait_for_element_inside_webelement(each_ele, self.obj.get_xpath(
                        "Player_name_text")))
                    self.logger.info("Clicking on info")
                    time.sleep(3)
                    self.obj.wait_for_element_inside_webelement(each_ele, self.obj.get_xpath(
                        "Info_link")).click()
                    self.logger.info("Getting Info")
                    time.sleep(3)
                    player_percentage = self.obj.get_text_from_element(
                        self.obj.wait_for_element(self.driver, self.obj.get_xpath(
                            "Player_percentage_text")))
                    players_bowl[player_name] = float(player_percentage)
                    self.obj.click_element(self.driver, self.obj.get_xpath("Popup_close"))
                # Getting Allrounders info
                self.logger.info("Clicking on AR tab")
                self.obj.click_element(self.driver, self.obj.get_xpath("Ar_tab_link"))
                self.logger.info("Getting AllRounders info...")                
                total_ars = self.obj.wait_for_elements(self.driver, self.obj.get_xpath(
                    "Players_allrounders"))
                for each_ele in total_ars:
                    player_name = self.obj.get_text_from_element(
                        self.obj.wait_for_element_inside_webelement(each_ele, self.obj.get_xpath(
                        "Player_name_text")))
                    self.logger.info("Clicking on info")
                    time.sleep(3)
                    self.obj.wait_for_element_inside_webelement(each_ele, self.obj.get_xpath(
                        "Info_link")).click()
                    self.logger.info("Getting Info")
                    time.sleep(3)
                    player_percentage = self.obj.get_text_from_element(
                        self.obj.wait_for_element(self.driver, self.obj.get_xpath(
                            "Player_percentage_text")))
                    players_ar[player_name] = float(player_percentage)
                    self.obj.click_element(self.driver, self.obj.get_xpath("Popup_close"))
                # Getting Wicket-Keepers info
                self.logger.info("Clicking on WK tab")
                self.obj.click_element(self.driver, self.obj.get_xpath("Wk_tab_link"))
                self.logger.info("Getting Wicket-Keepers info...")                
                total_wks = self.obj.wait_for_elements(self.driver, self.obj.get_xpath(
                    "Players_wicketkeepers"))
                for each_ele in total_wks:
                    player_name = self.obj.get_text_from_element(
                        self.obj.wait_for_element_inside_webelement(each_ele, self.obj.get_xpath(
                        "Player_name_text")))
                    self.logger.info("Clicking on info")
                    time.sleep(3)
                    self.obj.wait_for_element_inside_webelement(each_ele, self.obj.get_xpath(
                        "Info_link")).click()
                    self.logger.info("Getting Info")
                    time.sleep(3)
                    player_percentage = self.obj.get_text_from_element(
                        self.obj.wait_for_element(self.driver, self.obj.get_xpath(
                            "Player_percentage_text")))
                    players_wk[player_name] = float(player_percentage)
                    self.obj.click_element(self.driver, self.obj.get_xpath("Popup_close"))
                sorted_bat = sorted(players_bat.items(), key=operator.itemgetter(1), reverse=True)
                self.write_to_players('BAT', OrderedDict(sorted_bat))
                sorted_wk = sorted(players_wk.items(), key=operator.itemgetter(1), reverse=True)
                self.write_to_players('WK', OrderedDict(sorted_wk))
                sorted_bowl = sorted(players_bowl.items(), key=operator.itemgetter(1), reverse=True)
                self.write_to_players('BOWL', OrderedDict(sorted_bowl))
                sorted_ar = sorted(players_ar.items(), key=operator.itemgetter(1), reverse=True)
                self.write_to_players('AR', OrderedDict(sorted_ar))

            except Exception:
                self.logger.info("Exception Occurred... writing to the log file")
                self.file_logger.debug(traceback.format_exc())
            finally:
                # Logout
                self.driver.get(self.obj.get_xpath("Target_URL"))
                time.sleep(5)
                self.logger.info("Logging out...")
                self.obj.click_element(self.driver, self.obj.get_xpath("Team_dropdown"))
                self.obj.click_element(self.driver, self.obj.get_xpath("Logout_btn"))

        except WebDriverException:
            self.logger.info("Exception Occurred... writing to the log file")
            self.file_logger.debug(traceback.format_exc())
        finally:
            if self.driver:
                self.driver.quit()
            else:
                print("Driver not initialized")

    @staticmethod
    def write_to_players(section_name, data):
        """
        This function takes section_name and data and
        write to the players.txt file.
        @param: section_name: str: section name to be written
        @param: data: OrderedDict: players data to be written
        """
        fp = open('players.txt', 'a')
        config.add_section(section_name)
        for key,value in data.iteritems():
            config.set(section_name, key, str(value))
        config.write(fp)
        fp.close()
Beispiel #2
0
class Dream11(object):
    def __init__(self):
        self.driver = None
        self.obj = Config()
        self.logger = Logger.get_console_logger()
        self.file_logger = Logger.get_file_logger()
        self.espn_list = list()

    def get_data(self, ipl=True, driver_name='phantom'):
        try:
            self.file_logger.info(
                "********************************************************************************"
            )
            result_dict = dict()
            vcap = set()
            cap = set()
            self.logger.info("Initializing driver")
            self.driver = self.obj.get_driver_instance(driver_name)
            self.logger.info("Initialized driver...")
            # Get team data from espn
            if ipl:
                self.get_espn_data()
            self.logger.info("Navigating to dream11 homepage...")
            self.driver.get(self.obj.get_xpath("Target_URL"))
            self.logger.info("Entering username")
            self.obj.send_keys(self.driver,
                               self.obj.get_xpath("Username_input"),
                               self.obj.get_xpath("Username"))
            self.logger.info("Entering password")
            self.obj.send_keys(self.driver,
                               self.obj.get_xpath("Password_input"),
                               b64decode(self.obj.get_xpath("Password")))
            self.logger.info("Clicking on login")
            self.obj.click_element(self.driver,
                                   self.obj.get_xpath("Login_btn"))
            try:
                # Get total teams
                self.logger.info("Selecting match")
                self.obj.click_element(self.driver,
                                       self.obj.get_xpath("Match_selector"))
                time.sleep(3)
                self.logger.info("Getting total teams")
                total_teams = self.obj.wait_for_elements(
                    self.driver, self.obj.get_xpath("Total_teams"))
                for each_team in total_teams:
                    self.logger.info("Clicking on teams")
                    self.obj.click_element(self.driver,
                                           self.obj.get_xpath("Team_select"))
                    each_team.click()
                    time.sleep(3)
                    total_players = self.obj.wait_for_elements(
                        self.driver, self.obj.get_xpath("Total_players"))
                    for each_player in total_players:
                        player_name = each_player.get_attribute('title')
                        try:
                            each_player.find_element_by_xpath(
                                ".//span[@class='vCapIco']")
                            vcap.add(player_name)
                        except (NoSuchElementException,
                                StaleElementReferenceException):
                            pass
                        try:
                            each_player.find_element_by_xpath(
                                ".//span[@class='capIco']")
                            cap.add(player_name)
                        except (NoSuchElementException,
                                StaleElementReferenceException):
                            pass
                        if player_name not in result_dict:
                            result_dict[player_name] = 1
                        else:
                            result_dict[player_name] += 1
            # temp = sorted(result_dict.items(), key=operator.itemgetter(1))
                temp = sorted(result_dict.items(), key=operator.itemgetter(0))
                # temp.reverse()
                temp = OrderedDict(temp)
                for key, value in enumerate(temp.iteritems()):
                    self.logger.info("{0} : {1} - {2}".format(
                        key + 1, value[0], value[1]))
                    self.file_logger.info("{0} : {1} - {2}".format(
                        key + 1, value[0], value[1]))
                self.logger.info("**** Captain ****")
                self.file_logger.info("**** Captain ****")
                for each_cap in cap:
                    x = result_dict[each_cap]
                    if x > 1:
                        self.logger.info(
                            "{0} is a Captain and put {1} times ".format(
                                each_cap, x))
                        self.file_logger.info(
                            "{0} is a Captain and put {1} times ".format(
                                each_cap, x))
                self.logger.info("**** Vice-Captain ****")
                self.file_logger.info("**** Vice-Captain ****")
                for each_vcap in vcap:
                    x = result_dict[each_vcap]
                    if x > 2:
                        self.logger.info(
                            "{0} is a Vice-Captain and put {1} times ".format(
                                each_vcap, x))
                        self.file_logger.info(
                            "{0} is a Vice-Captain and put {1} times ".format(
                                each_vcap, x))
                if ipl:
                    diff = set(self.espn_list) - set(result_dict.keys())
                    self.logger.info(
                        "Players in ESPN List but not in Dream11 {}".format(
                            diff))
                    self.file_logger.info(
                        "Players in ESPN List but not in Dream11 {}".format(
                            diff))
                    diff = set(result_dict.keys()) - set(self.espn_list)
                    self.logger.info(
                        "Players in Dream11 not in ESPN List {}".format(diff))
                    self.file_logger.info(
                        "Players in Dream11 not in ESPN List {}".format(diff))
            except Exception:
                self.logger.info(
                    "Exception Occurred... writing to the log file")
                self.file_logger.debug(traceback.format_exc())
            finally:
                # Logout
                self.logger.info("Logging out...")
                self.obj.click_element(self.driver,
                                       self.obj.get_xpath("Team_section"))
                self.obj.click_element(self.driver,
                                       self.obj.get_xpath("Logout_btn"))

        except WebDriverException:
            self.logger.info("Exception Occurred... writing to the log file")
            self.file_logger.debug(traceback.format_exc())
        finally:
            if self.driver:
                self.driver.quit()
            else:
                print("Driver not initialized")

    def get_espn_data(self):
        try:
            database_obj = Database()
            link = self.obj.get_xpath("Preview_link")
            teams = database_obj.get_teams_from_db(link)
            if teams:
                import json
                self.espn_list.extend(json.loads(teams[0][0]))
                self.espn_list.extend(json.loads(teams[0][1]))
                return
            self.logger.info("Opening espn news page...")
            self.driver.get(link)
            team1 = self.obj.get_text_from_element(
                self.obj.wait_for_element(self.driver,
                                          self.obj.get_xpath("Team1")))
            team2 = self.obj.get_text_from_element(
                self.obj.wait_for_element(self.driver,
                                          self.obj.get_xpath("Team2")))
            self.logger.info("Getting team names...")
            team_name1 = self.obj.get_text_from_element(
                self.obj.wait_for_element(self.driver,
                                          self.obj.get_xpath("Team1") + "/b"))
            team_name2 = self.obj.get_text_from_element(
                self.obj.wait_for_element(self.driver,
                                          self.obj.get_xpath("Team2") + "/b"))
            self.logger.info("Formatting the text...")
            team1 = "".join(team1.split(team_name1)).strip(":").strip()
            team2 = "".join(team2.split(team_name2)).strip(":").strip()

            is_change_needed = False
            if is_change_needed:
                with open('/tmp/dream11.txt', 'w') as f:
                    f.truncate()
                with open('/tmp/dream11.txt', 'a') as f:
                    f.write(team1 + '\n')
                    f.write(team2 + '\n')
                # Since we can't rely upon espn cricnfo, it might have text formatting
                # issues, writing to a txt file, verify it, then continue
                import ipdb
                ipdb.set_trace()
                with open('/tmp/dream11.txt', 'r') as f:
                    teams = f.readlines()
                team1 = teams[0].strip("\n")
                team2 = teams[1].strip("\n")
            pt = re.compile(r'\d+\s+')
            res = re.sub(pt, '', team1)
            self.logger.info("Adding team1 players to espn_list")
            for ele in res.split(', '):
                if ele:
                    if '(wk)' in ele:
                        ele = "".join(ele.split('(wk)')).strip()
                    if '(capt)' in ele:
                        ele = "".join(ele.split('(capt)')).strip()
                    if '/' in ele:
                        for x in ele.split('/'):
                            self.espn_list.append(x.strip().strip('.').strip())
                        continue
                    if 'probable' in ele:
                        ele = ''.join(ele.split('(probable) '))
                    if 'possible' in ele:
                        ele = ''.join(ele.split('(possible) '))
                    self.espn_list.append(ele.strip().strip('.').strip())
            self.logger.info("%s Players are %s" %
                             (team_name1, self.espn_list))
            self.logger.info("Total %s Players are %d" %
                             (team_name1, len(self.espn_list)))
            self.file_logger.info("%s Players are %s" %
                                  (team_name1, self.espn_list))
            self.file_logger.info("Total %s Players are %d" %
                                  (team_name1, len(self.espn_list)))
            self.logger.info("Formatting the text...")
            res = re.sub(pt, '', team2)
            self.logger.info("Adding team2 players to espn_list")
            team1_players = deepcopy(self.espn_list)
            team2_players = []
            for ele in res.split(', '):
                if ele:
                    if '(wk)' in ele:
                        ele = "".join(ele.split('(wk)')).strip()
                    if '(capt)' in ele:
                        ele = "".join(ele.split('(capt)')).strip()
                    if '/' in ele:
                        for x in ele.split('/'):
                            self.espn_list.append(x.strip().strip('.').strip())
                            team2_players.append(x.strip().strip('.').strip())
                        continue
                    if 'probable' in ele:
                        ele = ''.join(ele.split('(probable) '))
                    if 'possible' in ele:
                        ele = ''.join(ele.split('(possible) '))
                    self.espn_list.append(ele.strip().strip('.').strip())
                    team2_players.append(ele.strip().strip('.').strip())
            self.logger.info("%s Players are %s" % (team_name2, team2_players))
            self.logger.info("Total %s Players are %d" %
                             (team_name2, len(team2_players)))
            self.file_logger.info("%s Players are %s" %
                                  (team_name2, team2_players))
            self.file_logger.info("Total %s Players are %d" %
                                  (team_name2, len(team2_players)))
            database_obj.insert_teams_into_db(link, team1_players,
                                              team2_players)

        except WebDriverException:
            self.logger.info("Exception Occurred... writing to the log file")
            self.file_logger.debug(traceback.format_exc())