MsRewards/V4.py

850 lines
29 KiB
Python
Raw Normal View History

2022-03-28 18:31:55 +02:00
#!/usr/bin/python3.10
2022-02-17 12:19:47 +01:00
import asyncio
2022-02-17 12:57:51 +01:00
import configparser
2021-12-22 17:09:18 +01:00
import os
2022-02-17 12:19:47 +01:00
from csv import reader
2021-12-22 14:01:58 +01:00
from os import path, sys, system
2022-02-23 17:51:11 +01:00
from queue import Full
2022-02-17 12:19:47 +01:00
from random import choice, randint, shuffle, uniform
from re import findall, search
2021-12-23 16:34:32 +01:00
from sys import platform
2022-03-28 16:30:11 +02:00
from time import sleep, time
2022-04-10 18:43:33 +02:00
from requests import get
2022-02-17 12:19:47 +01:00
import discord
from discord import ( # Importing discord.Webhook and discord.RequestsWebhookAdapter
Colour, Embed, RequestsWebhookAdapter, Webhook)
2021-12-22 14:01:58 +01:00
from selenium import webdriver
2022-02-17 12:19:47 +01:00
from selenium.common import exceptions
2021-12-22 14:01:58 +01:00
from selenium.webdriver.common.by import By
2022-02-17 12:19:47 +01:00
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.firefox.options import Options
2021-12-22 14:01:58 +01:00
from selenium.webdriver.support import expected_conditions as EC
2022-02-17 12:19:47 +01:00
from selenium.webdriver.support.ui import WebDriverWait
2022-02-19 19:40:52 +01:00
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-o" , "--override", help="override", dest="override", action = "store_true")
2022-02-23 17:33:44 +01:00
parser.add_argument("-l", "--log",dest="log",help="enable logging in terminal", action ="store_true")
parser.add_argument("-fl", "--fulllog",dest="fulllog",help="enable full logging in terminal", action ="store_true")
2022-02-19 19:40:52 +01:00
args = parser.parse_args()
override = args.override
Log = args.log
2022-02-23 17:33:44 +01:00
FullLog = args.fulllog
2021-12-22 14:01:58 +01:00
IsLinux = platform == "linux"
2022-03-28 16:30:11 +02:00
start_time = time()
2022-02-23 18:00:36 +01:00
2022-03-28 16:30:11 +02:00
def Timer(text = "undefined"):
print(f"-- Temps {time() - start_time} fonction : {text} --")
2021-12-22 14:01:58 +01:00
2022-02-23 18:39:53 +01:00
if IsLinux :
import enquiries
2022-03-28 16:30:11 +02:00
Timer()
2022-02-23 18:39:53 +01:00
else :
2022-02-17 13:51:07 +01:00
system("") #enable colors in cmd
2022-02-18 10:57:01 +01:00
config_path = "/home/pi/MsReward/config"
2022-02-17 12:57:51 +01:00
config = configparser.ConfigParser()
config.read(config_path)
2021-12-22 14:01:58 +01:00
2022-02-17 12:57:51 +01:00
MotPath = config["DEFAULT"]["motpath"]
LogPath = config["DEFAULT"]["logpath"]
SuccessLink = config["DEFAULT"]["successlink"]
ErrorLink = config["DEFAULT"]["errorlink"]
2022-04-10 18:43:33 +02:00
fidelity = config["DEFAULT"]["fidelity"]
2022-02-17 12:57:51 +01:00
embeds = config["DEFAULT"]["embeds"] == "True"
Headless = config["DEFAULT"]["headless"] == "True"
2022-02-15 22:40:39 +01:00
g = open(MotPath, "r" , encoding="utf-8")
Liste_de_mot=(list(g.readline().split(',')))
g.close()
2022-02-16 07:06:54 +01:00
webhookSuccess = Webhook.from_url(SuccessLink, adapter=RequestsWebhookAdapter())
webhookFailure = Webhook.from_url(ErrorLink, adapter=RequestsWebhookAdapter())
2022-02-15 22:40:39 +01:00
2022-03-28 16:30:11 +02:00
2022-04-07 13:43:39 +02:00
def resource_path(relative_path): #permet de recuperer l'emplacement de chaque fichier, sur linux et windows
try:
base_path = sys._MEIPASS
except Exception:
base_path = path.dirname(__file__)
return path.join(base_path, relative_path)
2021-12-22 14:01:58 +01:00
2022-02-18 10:57:01 +01:00
def FirefoxMobile(Headless = Headless):
2022-02-18 20:29:13 +01:00
MOBILE_USER_AGENT = ('Mozilla/5.0 (iPhone; CPU iPhone OS 14_8_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1')
2021-12-22 14:01:58 +01:00
options = Options()
options.set_preference("browser.link.open_newwindow", 3)
if Headless :
2021-12-23 17:13:17 +01:00
options.add_argument("-headless")
2021-12-23 16:45:57 +01:00
options.set_preference("general.useragent.override", MOBILE_USER_AGENT)
2021-12-23 17:13:17 +01:00
return(webdriver.Firefox(options=options))
2021-12-22 14:01:58 +01:00
def FirefoxPC(Headless = Headless):
2022-04-07 13:43:39 +02:00
PC_USER_AGENT = ('Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
'AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134')
2021-12-22 14:01:58 +01:00
options = Options()
2022-03-28 18:33:14 +02:00
options.set_preference("general.useragent.override", PC_USER_AGENT)
2022-04-07 13:43:39 +02:00
2021-12-22 14:01:58 +01:00
options.set_preference("browser.link.open_newwindow", 3)
2022-04-07 13:43:39 +02:00
2021-12-22 14:01:58 +01:00
if Headless :
options.add_argument("-headless")
2022-04-07 13:43:39 +02:00
2021-12-23 17:13:17 +01:00
return(webdriver.Firefox(options=options))
2021-12-22 14:01:58 +01:00
2022-04-07 13:48:08 +02:00
driver = ""
2022-04-07 13:43:39 +02:00
def printf(txt, end="", Mobdriver = driver):
2022-02-18 13:10:46 +01:00
if Log :
2022-03-28 16:55:35 +02:00
Timer(txt)
2022-02-23 17:33:44 +01:00
if FullLog :
2022-04-07 13:43:39 +02:00
LogError(txt, Mobdriver=Mobdriver)
2021-12-22 14:01:58 +01:00
def CustomSleep(temps):
if Log or not IsLinux :
c = False
points = [" . ", " . ", " . ", " .", " .", " . ", " . "," . "]
for i in range (int(temps)):
c = True
for i in range (8):
sleep(0.125)
print(points[i], end='\r')
if c:
2022-02-18 13:10:46 +01:00
print('. ', end="\r")
sleep(temps - int(temps))
print("\n")
else :
sleep(temps)
2021-12-22 14:01:58 +01:00
2021-12-29 11:51:08 +01:00
2022-03-28 16:55:35 +02:00
def ListTabs(Mdriver = None):
2021-12-22 14:01:58 +01:00
tabs = []
2021-12-28 11:31:35 +01:00
if Mdriver :
2021-12-29 11:08:15 +01:00
ldriver = Mdriver
else :
ldriver = driver
for i in ldriver.window_handles :
ldriver.switch_to.window(i)
tabs.append(ldriver.current_url)
2021-12-22 14:01:58 +01:00
return(tabs)
2022-02-23 17:51:11 +01:00
def LogError(message,log = FullLog, Mobdriver = None):
2021-12-29 10:54:25 +01:00
if Mobdriver :
gdriver = Mobdriver
else :
gdriver = driver
2022-02-23 17:51:11 +01:00
if not log :
2022-03-28 16:55:35 +02:00
print(f'\n\n\033[93m Erreur : {str(message)} \033[0m\n\n')
2022-02-18 13:17:29 +01:00
if IsLinux :
2021-12-22 14:01:58 +01:00
with open('page.html', 'w') as f:
2021-12-29 10:54:25 +01:00
f.write(gdriver.page_source)
2022-04-07 13:43:39 +02:00
2021-12-29 10:54:25 +01:00
gdriver.save_screenshot("screenshot.png")
2022-02-23 17:51:11 +01:00
if not log :
embed = discord.Embed(
title="An Error has occured",
description=str(message),
url = ListTabs(Mdriver=Mobdriver)[0],
colour = Colour.red()
)
else :
embed = discord.Embed(
title="Full log is enabled",
description=str(message),
url = ListTabs(Mdriver=Mobdriver)[0],
colour = Colour.blue()
)
2022-04-07 13:43:39 +02:00
2022-02-23 17:33:44 +01:00
file = discord.File("screenshot.png")
embed.set_image(url="attachment://screenshot.png")
embed.set_footer(text=_mail)
webhookFailure.send(embed=embed, file=file)
webhookFailure.send(file=discord.File('page.html'))
2021-12-22 14:01:58 +01:00
def progressBar(current, total=30, barLength = 20, name ="Progress"):
percent = float(current+1) * 100 / total
arrow = '-' * int(percent/100 * barLength - 1) + '>'
spaces = ' ' * (barLength - len(arrow))
print(name + ': [%s%s] %d %%' % (arrow, spaces, percent), end='\r')
def Close(fenetre, SwitchTo = 0):
driver.switch_to.window(fenetre)
driver.close()
driver.switch_to.window(driver.window_handles[SwitchTo])
def RGPD():
try :
2021-12-24 10:56:40 +01:00
driver.find_element(By.ID, 'bnp_btn_accept').click()
2021-12-22 14:01:58 +01:00
except :
pass
try :
2021-12-24 10:56:40 +01:00
driver.find_element(By.ID, 'bnp_hfly_cta2').click()
2021-12-22 14:01:58 +01:00
except :
pass
2021-12-23 17:36:53 +01:00
2022-04-04 13:35:36 +02:00
def PlayQuiz2(override= None):
2022-03-28 16:55:35 +02:00
printf("debut de PlayQuiz2")
2022-02-23 18:10:31 +01:00
if not override :
override = 10
2021-12-23 17:36:53 +01:00
for j in range (override):
2022-02-18 13:10:46 +01:00
try :
2021-12-22 14:01:58 +01:00
CustomSleep(uniform(3,5))
txt = driver.page_source
2022-02-23 17:51:11 +01:00
secret = search('IG:\"([^\"]+)\"', txt)[1] #variable dans la page, pour calculer le offset
2021-12-22 14:01:58 +01:00
reponse1 = search("data-option=\"([^\"]+)\"", txt)[1]
2022-02-23 17:51:11 +01:00
offset = int(secret[-2:],16) # la conversion ec decimal des deux dernier caracteres de IG
2021-12-22 14:01:58 +01:00
reponse = search("correctAnswer\":\"([0-9]+)", txt)[1]
somme = 0
for i in reponse1 :
somme += ord(i)
if somme + offset == int(reponse) :
2021-12-24 10:56:40 +01:00
elem = driver.find_element(By.ID, 'rqAnswerOption0')
2021-12-22 14:01:58 +01:00
elem.click()
progressBar(j,10, name="quiz 2")
else :
2021-12-24 10:56:40 +01:00
elem = driver.find_element(By.ID, 'rqAnswerOption1')
2021-12-22 14:01:58 +01:00
elem.click()
progressBar(j,10, name="quiz 2")
except exceptions.ElementNotInteractableException as e :
driver.execute_script("arguments[0].click();", elem)
except Exception as e:
LogError("PlayQuiz2" + str(e))
break
2022-03-28 16:55:35 +02:00
printf("PlayQuiz2 finis")
2021-12-22 14:01:58 +01:00
2022-03-28 17:00:36 +02:00
2022-02-18 13:10:46 +01:00
def PlayQuiz8(override = 3):
2022-03-28 16:55:35 +02:00
printf(f"PlayQuiz8 : start, override : {override}")
2021-12-22 14:01:58 +01:00
try :
c = 0
2021-12-23 17:36:53 +01:00
for i in range(override):
2021-12-22 14:01:58 +01:00
sleep(uniform(3,5))
ListeOfGood =[]
for i in range(1,9):
2021-12-23 17:55:04 +01:00
try :
2021-12-24 10:56:40 +01:00
Card= driver.find_element(By.ID, f'rqAnswerOption{i-1}')
2021-12-23 17:55:04 +01:00
if 'iscorrectoption="True" 'in Card.get_attribute('outerHTML') :
ListeOfGood.append(f'rqAnswerOption{i-1}') #premier div = 3 ?
except Exception as e :
LogError("playquiz8 - 1 - " + e)
2021-12-22 14:01:58 +01:00
shuffle(ListeOfGood)
2022-03-28 19:20:06 +02:00
2021-12-22 14:01:58 +01:00
for i in ListeOfGood :
sleep(uniform(3,5))
c+=1
progressBar(c,16, name="Quiz 8 ")
try :
2021-12-24 10:56:40 +01:00
elem = driver.find_element(By.ID, i)
2021-12-22 14:01:58 +01:00
elem.click()
except exceptions.ElementNotInteractableException as e:
2021-12-25 10:54:47 +01:00
try :
driver.execute_script("arguments[0].click();", elem)
except Exception as e :
LogError("playquizz8 - 2 - " + e)
2021-12-25 10:52:20 +01:00
except Exception as e :
if override :
printf("playquiz8 - 3 -" +e)
2021-12-25 10:52:20 +01:00
else :
LogError("playquizz8 - 3 - " + e)
2021-12-22 14:01:58 +01:00
except Exception as e :
2022-03-28 19:12:54 +02:00
LogError("PlayQuiz8 - 4 - " + str(e))
print(str(ListeOfGood))
2022-03-28 16:55:35 +02:00
printf("PlayQuiz8 : fin ")
2021-12-22 14:01:58 +01:00
2022-03-28 17:00:36 +02:00
2021-12-23 17:36:53 +01:00
def PlayQuiz4(override = None):
2022-03-28 16:55:35 +02:00
printf("PlayQuiz4 : start")
2021-12-23 17:36:53 +01:00
if not override :
try : #permet de gerer les truc de fidélité, qui sont plus long
override = int(findall("rqQuestionState([\d]{1,2})\"", driver.page_source)[-1])
2022-03-28 16:55:35 +02:00
printf(f"Override : {override}")
2021-12-23 17:36:53 +01:00
except :
override = 3
2021-12-22 14:01:58 +01:00
try :
2021-12-23 17:36:53 +01:00
for i in range(override):
2021-12-23 14:06:00 +01:00
CustomSleep(uniform(3,5))
2021-12-22 14:01:58 +01:00
txt = driver.page_source
reponse = search("correctAnswer\":\"([^\"]+)", txt)[1] #je suis pas sur qu'il y ait un espace
2022-02-18 13:10:46 +01:00
reponse = reponse.replace('\\u0027',"'") #il faut cancel l'unicode avec un double \ (on replacer les caracteres en unicode en caracteres utf-8)
printf(f"validation de la reponse " , end="\r")
printf(f"validation de la reponse {i+1}/{override} {reponse}" , end="\r")
2021-12-22 14:01:58 +01:00
try :
2021-12-24 10:56:40 +01:00
elem = driver.find_element(By.CSS_SELECTOR, f'[data-option="{reponse}"]')
2021-12-22 14:01:58 +01:00
elem.click()
except exceptions.ElementNotInteractableException:
driver.execute_script("arguments[0].click();", elem)
except Exception as e :
LogError("PlayQuiz4" + str(e))
raise ValueError(e)
2022-03-28 16:55:35 +02:00
printf("PlayQuiz4 : end")
2021-12-22 14:01:58 +01:00
2022-03-28 17:00:36 +02:00
2021-12-22 14:01:58 +01:00
def PlayPoll():
2022-03-28 16:55:35 +02:00
printf("PlayPoll : start")
2021-12-22 14:01:58 +01:00
try :
try :
2021-12-24 10:56:40 +01:00
elem = driver.find_element(By.ID, f'btoption{choice([0,1])}')
2021-12-22 14:01:58 +01:00
elem.click()
except exceptions.ElementNotInteractableException as e:
driver.execute_script("arguments[0].click();", elem)
CustomSleep(uniform(2,2.5))
except Exception as e :
LogError("PlayPoll" + str(e))
raise ValueError(e)
2022-03-28 16:55:35 +02:00
printf("PlayPoll : end")
2021-12-22 14:01:58 +01:00
2022-03-28 17:00:36 +02:00
2021-12-23 17:36:53 +01:00
def AllCard(): #fonction qui clique sur les cartes
2021-12-22 14:01:58 +01:00
2021-12-23 13:51:07 +01:00
def reset(Partie2=False): #retourne sur la page de depart apres avoir finis
2021-12-22 14:01:58 +01:00
if len(driver.window_handles) == 1 :
driver.get('https://www.bing.com/rewardsapp/flyout')
2021-12-23 13:51:07 +01:00
if Partie2 :
2021-12-24 10:56:40 +01:00
driver.find_element(By.XPATH, '/html/body/div/div/div[3]/div[2]/div[2]/div[2]/div[1]').click()
2021-12-22 14:01:58 +01:00
else :
driver.switch_to.window(driver.window_handles[1])
2022-03-28 16:55:35 +02:00
printf(f"fermeture : {driver.current_url}")
2021-12-22 14:01:58 +01:00
driver.close()
driver.switch_to.window(driver.window_handles[0])
2021-12-23 13:51:07 +01:00
reset(Partie2)
2021-12-22 14:01:58 +01:00
def dailyCards():
try :
for i in range(3):
sleep(1)
2022-02-18 18:33:32 +01:00
try :
2022-03-28 16:30:11 +02:00
titre = "erreur"
2022-02-18 18:33:32 +01:00
driver.find_element(By.XPATH, f'/html/body/div/div/div[3]/div[2]/div[1]/div[2]/div/div[{i+1}]/a/div/div[2]').click()
sleep(1)
titre = driver.title
TryPlay(titre)
sleep(1)
reset()
print(f"DailyCard {titre} ok ")
except Exception as e :
2022-03-28 17:00:36 +02:00
printf(f"Allcard card {titre} error ({e})")
2021-12-22 14:01:58 +01:00
except Exception as e :
2022-02-18 18:33:32 +01:00
LogError(f'Dailycards {e}')
2022-04-07 13:43:39 +02:00
try :
dailyCards()
except :
printf("erreur ici")
2021-12-22 14:01:58 +01:00
try :
try :
2021-12-24 10:56:40 +01:00
driver.find_element(By.XPATH, '/html/body/div/div/div[3]/div[2]/div[2]/div[2]/div[1]').click() #declenche la premiere partie ?
2021-12-22 14:01:58 +01:00
except :
reset()
try :
2021-12-24 10:56:40 +01:00
driver.find_element(By.XPATH, '/html/body/div/div/div[3]/div[2]/div[2]/div[2]/div[1]').click()#declenche la deuxieme partie ?
2021-12-22 14:01:58 +01:00
except :
pass
2022-02-18 13:10:46 +01:00
for i in range(20):
2021-12-23 13:51:07 +01:00
printf("debut de l'une des cartes")
2021-12-24 10:56:40 +01:00
driver.find_element(By.XPATH, '/html/body/div/div/div[3]/div[2]/div[2]/div[3]/div/div[1]/a/div/div[2]').click()
2021-12-23 13:51:07 +01:00
printf("carte cliqué")
2021-12-22 14:01:58 +01:00
driver.switch_to.window(driver.window_handles[len(driver.window_handles) - 1])
2022-02-18 13:10:46 +01:00
sleep(1)
titre = driver.title
print(f"carte {titre} en cours")
2021-12-23 13:51:07 +01:00
TryPlay(titre)
2021-12-22 14:01:58 +01:00
reset(True)
sleep(1)
try :
2021-12-23 16:34:32 +01:00
link = findall('href="([^<]+)" title=""',driver.page_source)[3] #verifie si on a toujours des cartes
2021-12-22 14:01:58 +01:00
except :
break
except Exception as e:
LogError(f'2eme partie de AllCard (weekly card)\n {e}')
def send_keys_wait(element,keys):
for i in keys :
element.send_keys(i)
2022-03-28 16:55:35 +02:00
sleep(uniform(0, 0.2))
2021-12-22 14:01:58 +01:00
def login() :
2022-03-28 16:55:35 +02:00
printf("login : start")
2021-12-22 14:01:58 +01:00
try :
2022-03-28 16:30:11 +02:00
2021-12-22 14:01:58 +01:00
driver.get('https://www.bing.com/rewardsapp/flyout')
2022-03-28 16:55:35 +02:00
2021-12-22 14:01:58 +01:00
try :
2022-02-18 13:10:46 +01:00
driver.find_element(By.CSS_SELECTOR, f'[title="Rejoindre"]').click() #depend of the language of the page
2021-12-22 14:01:58 +01:00
except :
2022-02-18 13:10:46 +01:00
driver.find_element(By.CSS_SELECTOR, f'[title="Join now"]').click() #depend of the language of the page
2021-12-22 14:01:58 +01:00
2021-12-24 10:56:40 +01:00
mail = driver.find_element(By.ID, 'i0116')
2021-12-22 14:01:58 +01:00
send_keys_wait(mail, _mail)
mail.send_keys(Keys.ENTER)
2022-03-28 17:07:57 +02:00
CustomSleep(5
)
2022-03-28 19:32:19 +02:00
""" no issues for now, delete in a few real updates
2021-12-22 14:01:58 +01:00
try :
2021-12-24 10:56:40 +01:00
driver.find_element(By.ID, 'idChkBx_PWD_KMSI0Pwd').click()
2021-12-22 14:01:58 +01:00
except :
2022-03-28 16:55:35 +02:00
printf("a degager")
2021-12-22 14:01:58 +01:00
try :
2021-12-24 10:56:40 +01:00
driver.find_element(By.CSS_SELECTOR, '''[data-bind="text: str['CT_PWD_STR_KeepMeSignedInCB_Text']"]''').click()
2021-12-22 14:01:58 +01:00
except :
2022-03-28 16:55:35 +02:00
printf("a degager 2")
2022-03-28 17:00:36 +02:00
"""
2021-12-24 10:56:40 +01:00
pwd = driver.find_element(By.ID, 'i0118')
2021-12-22 14:01:58 +01:00
send_keys_wait(pwd, _password)
pwd.send_keys(Keys.ENTER)
2021-12-23 13:05:16 +01:00
CustomSleep(5)
2022-03-28 16:55:35 +02:00
printf("pwd envoyé")
2021-12-22 14:01:58 +01:00
try :
2021-12-24 10:56:40 +01:00
driver.find_element(By.ID, 'KmsiCheckboxField').click()
2021-12-22 17:01:00 +01:00
except Exception as e :
printf(f"login - 1 - erreur validation bouton KmsiCheckboxField. pas forcement grave {e}")
2022-03-28 16:55:35 +02:00
2021-12-22 17:01:00 +01:00
try :
2021-12-24 10:56:40 +01:00
driver.find_element(By.ID, 'idSIButton9').click()
2021-12-23 13:30:30 +01:00
except Exception as e :
printf(f"login - 2 - erreur validation bouton idSIButton9. pas forcement grave {e}")
2022-03-28 16:55:35 +02:00
printf("login completed")
2021-12-22 14:01:58 +01:00
RGPD()
driver.get('https://www.bing.com/rewardsapp/flyout')
MainWindows = driver.current_window_handle
return(MainWindows)
except Exception as e:
2022-02-23 17:17:29 +01:00
LogError("login - 3 - " + str(e))
2021-12-22 14:01:58 +01:00
def BingPcSearch(override = randint(35,40)):
2022-02-18 20:47:21 +01:00
driver.get(f'https://www.bing.com/search?q=test')#{choice(Liste_de_mot)}')
2021-12-22 14:01:58 +01:00
CustomSleep(uniform(1,2))
RGPD()
2021-12-24 10:56:40 +01:00
send_keys_wait( driver.find_element(By.ID, 'sb_form_q'),Keys.BACKSPACE+Keys.BACKSPACE+Keys.BACKSPACE+Keys.BACKSPACE+Keys.BACKSPACE+Keys.BACKSPACE)
2021-12-22 14:01:58 +01:00
for i in range(override):
2022-02-18 20:29:13 +01:00
mot = choice(Liste_de_mot)
2021-12-22 14:01:58 +01:00
try :
2021-12-24 10:56:40 +01:00
send_keys_wait( driver.find_element(By.ID, 'sb_form_q'),mot)
driver.find_element(By.ID, 'sb_form_q').send_keys(Keys.ENTER)
2021-12-22 14:01:58 +01:00
except :
sleep(10)
driver.refresh()
sleep(10)
2021-12-24 10:56:40 +01:00
send_keys_wait( driver.find_element(By.ID, 'sb_form_q'),mot)
driver.find_element(By.ID, 'sb_form_q').send_keys(Keys.ENTER)
2021-12-22 14:01:58 +01:00
progressBar(i,override, name="PC")
sleep(uniform(5,20))
try :
2021-12-24 10:56:40 +01:00
driver.find_element(By.ID, 'sb_form_q').clear()
2021-12-22 14:01:58 +01:00
except :
2021-12-23 13:05:16 +01:00
try :
driver.refresh()
2021-12-24 10:56:40 +01:00
driver.find_element(By.ID, 'sb_form_q').clear()
2021-12-23 13:05:16 +01:00
except Exception as e:
LogError(f"BingPcSearch - clear la barre de recherche - {e}")
2021-12-22 14:01:58 +01:00
print('\n\n')
def BingMobileSearch(override = randint(22,25)):
2022-02-18 13:10:46 +01:00
MobileDriver = "si il y a ca dans les logs, c'est que Mobiledriver n'a pas demarrer "
2021-12-22 14:01:58 +01:00
try :
try :
2022-02-18 10:57:01 +01:00
MobileDriver = FirefoxMobile()
except Exception as e :
sleep(30)
LogError('BingMobileSearch - 1 - echec de la creation du driver mobile')
MobileDriver = FirefoxMobile()
2021-12-22 14:01:58 +01:00
echec = 0
def Mlogin(echec):
try :
2022-03-06 16:58:58 +01:00
MobileDriver.get('https://www.bing.com/search?q=test+speed&qs=LS&pq=test+s&sk=PRES1&sc=8-6&cvid=19&FORM=QBRE&sp=1')
2021-12-22 14:01:58 +01:00
CustomSleep(uniform(3,5))
2022-03-06 16:38:18 +01:00
printf("debut du login", Mobdriver=MobileDriver)
2021-12-24 10:56:40 +01:00
MobileDriver.find_element(By.ID, 'mHamburger').click()
2021-12-22 14:01:58 +01:00
CustomSleep(uniform(1,2))
2022-03-06 16:38:18 +01:00
printf("login - 1", Mobdriver=MobileDriver)
2021-12-24 10:56:40 +01:00
MobileDriver.find_element(By.ID, 'hb_s').click()
2021-12-22 14:01:58 +01:00
CustomSleep(uniform(1,2))
2022-03-06 16:38:18 +01:00
printf("login - 2", Mobdriver=MobileDriver)
2021-12-24 10:56:40 +01:00
mail = MobileDriver.find_element(By.ID, 'i0116')
2021-12-22 14:01:58 +01:00
send_keys_wait(mail, _mail)
2022-03-06 16:38:18 +01:00
printf("login - 3", Mobdriver=MobileDriver)
2021-12-22 14:01:58 +01:00
mail.send_keys( Keys.ENTER)
CustomSleep(uniform(1,2))
2022-03-06 16:38:18 +01:00
printf("login - 4", Mobdriver=MobileDriver)
2021-12-24 10:56:40 +01:00
pwd = MobileDriver.find_element(By.ID, 'i0118')
2022-03-06 16:38:18 +01:00
printf("login - 5", Mobdriver=MobileDriver)
2021-12-22 14:01:58 +01:00
send_keys_wait(pwd, _password)
2022-03-06 16:38:18 +01:00
printf("login - 6", Mobdriver=MobileDriver)
2021-12-22 14:01:58 +01:00
pwd.send_keys( Keys.ENTER)
2022-03-06 16:38:18 +01:00
CustomSleep(uniform(1,2))
printf("fin du login", Mobdriver=MobileDriver)
2021-12-22 17:01:00 +01:00
except Exception as e :
2021-12-22 14:01:58 +01:00
echec += 1
if echec <= 3 :
2022-02-18 18:33:32 +01:00
print(f'echec du login sur la version mobile. on reesaye ({echec}/3), {e}')
2021-12-22 14:01:58 +01:00
CustomSleep(uniform(5,10))
Mlogin(echec)
else :
2021-12-29 11:51:08 +01:00
LogError(f"login impossible 3 fois de suite. {e}",Mobdriver=MobileDriver)
2021-12-22 14:01:58 +01:00
MobileDriver.quit()
2021-12-22 17:01:00 +01:00
return(True)
2021-12-22 14:01:58 +01:00
def MRGPD():
try :
2021-12-24 10:56:40 +01:00
MobileDriver.find_element(By.ID, 'bnp_btn_accept').click()
2021-12-22 14:01:58 +01:00
except :
pass
try :
2021-12-24 10:56:40 +01:00
MobileDriver.find_element(By.ID, 'bnp_hfly_cta2').click()
2021-12-22 14:01:58 +01:00
except :
pass
def Alerte():
try:
alert = MobileDriver.switch_to.alert
alert.dismiss()
except exceptions.NoAlertPresentException as e :
pass
2021-12-23 13:05:16 +01:00
except Exception as e:
2021-12-29 11:51:08 +01:00
LogError(f"error sur une alerte dans le driver mobile. {e}",Mobdriver=MobileDriver)
2021-12-22 14:01:58 +01:00
if not Mlogin(echec) :
CustomSleep(uniform(1,2))
MRGPD()
CustomSleep(uniform(1,1.5))
2021-12-24 10:56:40 +01:00
send_keys_wait( MobileDriver.find_element(By.ID, 'sb_form_q'),Keys.BACKSPACE+Keys.BACKSPACE+Keys.BACKSPACE+Keys.BACKSPACE+Keys.BACKSPACE+Keys.BACKSPACE)
2021-12-22 14:01:58 +01:00
for i in range(override): #20
2022-02-18 20:29:13 +01:00
mot = choice(Liste_de_mot)
2021-12-24 10:56:40 +01:00
send_keys_wait( MobileDriver.find_element(By.ID, 'sb_form_q'),mot)
MobileDriver.find_element(By.ID, 'sb_form_q').send_keys(Keys.ENTER)
2021-12-22 14:01:58 +01:00
progressBar(i,override,name="Mobile")
2022-03-06 16:44:09 +01:00
printf(MobileDriver.current_url, Mobdriver=MobileDriver)
2021-12-22 14:01:58 +01:00
sleep(uniform(5,20))
2021-12-23 13:05:16 +01:00
Alerte() # verifie si il y a des alertes (demande de positions ....)
2021-12-22 14:01:58 +01:00
for i in range (len(mot)):
2021-12-24 10:56:40 +01:00
MobileDriver.find_element(By.ID, 'sb_form_q').clear()
2021-12-23 13:05:16 +01:00
2021-12-22 14:01:58 +01:00
MobileDriver.quit()
except Exception as e:
2021-12-29 11:51:08 +01:00
LogError("BingMobileSearch" + str(e),Mobdriver=MobileDriver)
2021-12-23 10:53:53 +01:00
try :
MobileDriver.quit()
2021-12-23 13:05:16 +01:00
except Exception as e:
LogError(f"can't close mobile driveer . {e}")
2021-12-22 14:01:58 +01:00
2021-12-23 13:51:07 +01:00
2021-12-22 14:01:58 +01:00
def TryPlay(nom ="inconnu"):
RGPD()
2022-03-02 10:33:43 +01:00
printf("TryPlay en cours")
2021-12-23 17:36:53 +01:00
def play(number, override = None) :
2022-02-17 10:39:21 +01:00
if number == 8 or number == 9 :
try :
2022-03-28 19:32:19 +02:00
printf(f'\033[96m Quiz 8 détécté sur la page {nom} \033[0m')
2022-03-28 19:20:06 +02:00
PlayQuiz8()
2022-03-28 19:32:19 +02:00
printf(f'\033[92m Quiz 8 reussit sur {nom} \033[0m')
2022-02-17 10:39:21 +01:00
except Exception as e :
2022-03-28 19:32:19 +02:00
printf(f'echec de PlayQuiz 8. Aborted {e} \033[0m')
2022-02-18 13:15:48 +01:00
2022-02-17 10:39:21 +01:00
elif number == 5 or number == 4 :
try :
2022-03-28 19:32:19 +02:00
printf(f'\033[96m Quiz 4 détécté sur la page {nom} \033[0m')
2022-03-28 19:20:06 +02:00
PlayQuiz4()
2022-03-28 19:32:19 +02:00
print(f'\033[92m Quiz 4 reussit sur {nom} \033[0m')
2022-02-17 10:39:21 +01:00
except Exception as e :
2022-03-28 19:32:19 +02:00
printf(f'echec de PlayQuiz 4. Aborted {e} \033[0m')
2022-02-18 13:15:48 +01:00
2022-02-17 10:39:21 +01:00
elif number == 3 or number == 2 :
try :
2022-03-28 19:32:19 +02:00
printf(f'\033[96m Quiz 2 détécté sur la page {nom}\033[0m')
2022-03-28 19:20:06 +02:00
PlayQuiz2()
2022-03-28 19:32:19 +02:00
print(f'\033[92m Quiz 2 reussit sur la page {nom}\033[0m')
2022-02-17 10:39:21 +01:00
except Exception as e :
printf(f'echec de PlayQuiz 2. Aborted {e}')
else :
LogError('probleme dans la carte : il y a un bouton play et aucun quiz detecté')
2021-12-22 14:01:58 +01:00
try :
2021-12-24 10:56:40 +01:00
driver.find_element(By.ID, 'rqStartQuiz').click() #start the quiz
2021-12-22 14:01:58 +01:00
number = driver.page_source.count('rqAnswerOption')
2021-12-23 16:34:32 +01:00
play(number)
2022-03-28 17:20:59 +02:00
except Exception as e :
2022-03-29 21:33:14 +02:00
#printf(e) normal erreor here
2021-12-22 14:01:58 +01:00
if "bt_PollRadio" in driver.page_source :
try :
print('Poll détected', end ="\r")
RGPD()
PlayPoll()
print('Poll reussit ')
2021-12-23 13:05:16 +01:00
except Exception as e :
printf(f'TryPlay - 1 - Poll aborted {e}')
2021-12-23 17:36:53 +01:00
2021-12-23 16:34:32 +01:00
elif "rqQuestionState" in driver.page_source :
2021-12-23 17:55:04 +01:00
try :
number = driver.page_source.count('rqAnswerOption')
restant = len(findall("\"rqQuestionState.?.\" class=", driver.page_source)) - len(findall("\"rqQuestionState.?.\" class=\"filledCircle\"", driver.page_source))
printf(f"recovery détécté. quiz : {number}, restant : {restant +1}")
play(number, override=restant + 1 )
except Exception as e :
printf("TryPlay - 2 - " + e)
2021-12-22 14:01:58 +01:00
elif search("([0-9]) de ([0-9]) finalisée",driver.page_source) :
print('fidélité')
RGPD()
2022-04-10 18:43:33 +02:00
Fidelite()
2021-12-22 14:01:58 +01:00
else :
print(f'rien a faire sur la page {nom}')
RGPD()
CustomSleep(uniform(3,5))
2021-12-23 13:51:07 +01:00
def LogPoint(account="unknown"): #log des points sur discord
2021-12-23 13:28:14 +01:00
driver.get('https://www.bing.com/rewardsapp/flyout')
2021-12-22 14:01:58 +01:00
if not IsLinux :
asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
else :
asyncio.set_event_loop(asyncio.new_event_loop())
2022-02-08 09:45:53 +01:00
regex1 = "<a href=\"https://rewards\.bing\.com/\" title=\"((.{1,3}),(.{1,3})) points\" target=\"_blank\""
try :
2022-02-09 11:43:53 +01:00
point = search(regex1, driver.page_source)[1].replace(',', '')
2022-02-08 09:45:53 +01:00
2021-12-27 14:22:44 +01:00
except Exception as e :
2022-02-08 09:45:53 +01:00
elem = driver.find_element(By.CSS_SELECTOR, '[title="Microsoft Rewards"]')
elem.click()
CustomSleep(5)
driver.switch_to.window(driver.window_handles[len(driver.window_handles) - 1])
CustomSleep(uniform(10,20))
try :
point = search("availablePoints\":([\d]+)",driver.page_source)[1]
except Exception as e :
LogError(f"LogPoint - 2 - {e}")
2022-02-08 09:45:53 +01:00
point = "erreur"
2021-12-22 14:01:58 +01:00
CustomSleep(uniform(3,20))
account = account.split('@')[0]
2022-02-17 13:40:37 +01:00
2022-02-17 12:57:51 +01:00
if embeds:
embed = discord.Embed(
title=f"{account} actuellement à {str(point)} points",
colour = Colour.green()
)
2022-02-17 13:40:37 +01:00
embed.set_footer(text=account)
2022-02-17 12:57:51 +01:00
webhookSuccess.send(embed=embed)
else :
webhookSuccess.send(f'{account} actuellement à {str(point)} points')
2021-12-22 14:01:58 +01:00
2022-04-10 18:43:33 +02:00
def Fidelite(lien):
2021-12-22 14:01:58 +01:00
try :
2022-04-10 18:43:33 +02:00
driver.get(lien)
sleep(2)
choix = driver.find_element(By.CSS_SELECTOR,'div[class="pull-left spacer-48-bottom punchcard-row"]') #pull-left spacer-48-bottom punchcard-row
nb = search("([0-9]) of ([0-9]) completed",driver.page_source)
if not nb :
nb = search("([0-9]) de ([0-9]) finalisé",driver.page_source)
print(choix, nb)
2021-12-22 14:01:58 +01:00
for i in range(int(nb[2])-int(nb[1])):
2021-12-24 10:56:40 +01:00
choix = driver.find_element(By.CLASS_NAME,'spacer-48-bottom')
2021-12-22 14:01:58 +01:00
ButtonText = search('<span class=\"pull-left margin-right-15\">([^<^>]+)</span>',choix.get_attribute("innerHTML"))[1]
2021-12-24 10:56:40 +01:00
bouton = driver.find_element(By.XPATH, f'//span[text()="{ButtonText}"]')
2021-12-22 14:01:58 +01:00
bouton.click()
CustomSleep(uniform(3,5))
2022-04-10 18:43:33 +02:00
driver.switch_to.window(driver.window_handles[0])
2021-12-23 13:05:16 +01:00
TryPlay(driver.title)
2022-04-10 18:43:33 +02:00
driver.get(lien)
2021-12-22 14:01:58 +01:00
CustomSleep(uniform(3,5))
Close(driver.window_handles[1])
2021-12-23 13:05:16 +01:00
printf('on a passer la partie fidélité')
2021-12-22 14:01:58 +01:00
except Exception as e :
LogError("Fidélité" + str(e))
2022-03-28 16:55:35 +02:00
def CheckPoint():# a fix, ne marche pas dans 80% des cas, pas appelé aujourd'hui
2021-12-22 14:01:58 +01:00
driver.get("https://rewards.microsoft.com/pointsbreakdown")
txt = driver.page_source
pc = search('([0-9][0-9]|[0-9])</b> / 90',txt)
mobile = search('([0-9][0-9]|[0-9])</b> / 60',txt)
if mobile :
if mobile[1] != 60:
BingMobileSearch(22-(int(mobile[1])/3))
if pc :
if pc[1] != 90:
BingPcSearch(32-(int(pc[1])/3))
def DailyRoutine():
MainWindows = login()
try :
AllCard()
except Exception as e :
LogError(f'pas normal sauf si relancer a la main, juste pour les recherches bing (DalyRoutine -> AllCard) \n {e}')
try :
BingPcSearch()
except Exception as e :
LogError(f"il y a eu une erreur dans BingPcSearch, {e}")
CustomSleep(uniform(3,20))
try :
BingMobileSearch()
2021-12-22 17:01:00 +01:00
except Exception as e:
LogError(f'BingMobileSearch - {e}')
2021-12-22 14:01:58 +01:00
print('\n')
CustomSleep(uniform(3,20))
2021-12-22 17:01:00 +01:00
try :
LogPoint(_mail)
2021-12-23 13:51:07 +01:00
except Exception as e:
LogError(f'LogPoint : {e}')
2021-12-22 14:01:58 +01:00
2021-12-23 13:05:16 +01:00
def close():
driver.quit()
quit()
2021-12-22 14:01:58 +01:00
2022-04-10 18:43:33 +02:00
def dev():
try :
result = get(fidelity)
lien = result.content.decode("UTF-8")
print(lien)
Fidelite(lien)
except Exception as e :
print(f"erreur dans la partie dev : {e}")
2021-12-22 14:01:58 +01:00
2022-02-14 16:48:57 +01:00
def CustomStart(Credentials):
global driver
2022-02-14 16:55:07 +01:00
global _mail
global _password
2022-02-14 16:48:57 +01:00
ids = [x[0] for x in Credentials] #list of all email adresses
2022-04-10 18:43:33 +02:00
actions=["tout", "daily", "pc", "mobile", "LogPoint", "dev"]
2022-02-14 16:48:57 +01:00
system("clear") #clear from previous command to allow a clean choice
2022-02-23 18:39:53 +01:00
Comptes = enquiries.choose('quels comptes ?', ids, multi=True)
Actions = enquiries.choose('quels Actions ?', actions, multi=True)
2022-02-14 16:48:57 +01:00
for i in Comptes :
_mail =Credentials[ids.index(i)][0]
_password = Credentials[ids.index(i)][1]
2022-02-18 20:29:13 +01:00
driver = FirefoxPC()
2022-03-28 17:24:21 +02:00
driver.implicitly_wait(10)
2022-02-18 20:29:13 +01:00
login()
if "tout" in Actions :
DailyRoutine()
if "daily" in Actions :
try :
AllCard()
except Exception as e :
LogError(f'pas normal sauf si relancer a la main, juste pour les recherches bing (DalyRoutine -> AllCard) \n {str(e)}. -- override')
if "pc" in Actions:
try :
BingPcSearch()
except Exception as e :
LogError(f"il y a eu une erreur dans BingPcSearch, {e} -- override")
if "mobile" in Actions:
try :
BingMobileSearch()
except Exception as e:
LogError(f'BingMobileSearch - {e} -- override')
2022-04-10 18:43:33 +02:00
if "dev" in Actions:
try :
dev()
except Exception as e :
printf(e)
break
try :
LogPoint(_mail)
except Exception as e :
print("CustomStart " + str(e))
2022-02-23 19:02:24 +01:00
driver.close()
2021-12-22 14:01:58 +01:00
with open(LogPath) as f:
reader = reader(f)
2022-02-23 19:02:24 +01:00
Credentials = list(reader)
2021-12-22 14:01:58 +01:00
shuffle(Credentials)
2022-02-19 19:40:52 +01:00
if override :
2022-02-14 16:48:57 +01:00
CustomStart(Credentials)
else :
for i in Credentials :
2022-02-16 07:06:54 +01:00
2022-02-14 16:48:57 +01:00
_mail =i[0]
_password = i[1]
2021-12-29 11:51:08 +01:00
2022-02-14 16:48:57 +01:00
print('\n\n')
print(_mail)
CustomSleep(1)
2022-03-28 16:55:35 +02:00
printf("debut du driver")
2021-12-22 17:01:00 +01:00
driver = FirefoxPC()
2022-03-28 16:55:35 +02:00
printf("driver demarré")
2022-03-28 17:24:21 +02:00
driver.implicitly_wait(10)
2021-12-22 14:01:58 +01:00
2021-12-22 17:01:00 +01:00
try :
DailyRoutine()
driver.quit()
timer = uniform(1200,3600)
print(f"finis. attente de {round(timer/60)}min")
2021-12-23 16:34:32 +01:00
CustomSleep(timer)
2022-02-23 17:33:44 +01:00
2021-12-22 17:01:00 +01:00
except KeyboardInterrupt :
print('canceled')
2021-12-23 13:05:16 +01:00
close()
2021-12-22 14:01:58 +01:00
2022-02-23 18:28:59 +01:00
if IsLinux :
system("pkill -9 firefox")