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()
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())