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
2022-02-17 12:19:47 +01:00
from csv import reader
2022-06-23 13:26:31 +02:00
from os import sys , system , path
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-04-18 09:37:47 +02:00
from datetime import timedelta
2022-02-17 12:19:47 +01:00
import discord
from discord import ( # Importing discord.Webhook and discord.RequestsWebhookAdapter
2022-04-14 23:03:16 +02:00
Colour ,
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
2022-02-19 19:40:52 +01:00
import argparse
2022-09-30 16:09:11 +02:00
from modules . db import add_to_database
2022-02-19 19:40:52 +01:00
2022-06-17 07:05:46 +02:00
"""
Setup for option , like - - override or - - fulllog
"""
2022-02-19 19:40:52 +01:00
parser = argparse . ArgumentParser ( )
2022-04-14 23:03:16 +02:00
parser . add_argument (
" -o " , " --override " , help = " override " , dest = " override " , action = " store_true "
)
parser . add_argument (
" -l " , " --log " , dest = " log " , help = " enable logging in terminal " , action = " store_true "
)
parser . add_argument (
" -fl " ,
" --fulllog " ,
dest = " fulllog " ,
2022-06-06 12:32:37 +02:00
help = " enable full logging in discord " ,
2022-04-14 23:03:16 +02:00
action = " store_true " ,
)
2022-09-30 14:34:50 +02:00
parser . add_argument (
" -r " , " --risky " , help = " make the program faster, probably better risk of ban " , dest = " fast " , action = " store_true "
)
2022-02-19 19:40:52 +01:00
args = parser . parse_args ( )
2022-09-23 15:13:14 +02:00
CUSTOM_START = args . override
LOG = args . log
FULL_LOG = args . fulllog
2022-09-30 14:34:50 +02:00
FAST = args . fast
2022-09-23 15:13:14 +02:00
if CUSTOM_START :
LOG = True
2022-10-11 21:40:41 +02:00
#SOON (maybe) (no)
2022-09-23 15:13:14 +02:00
#logpath = ("/".join(__file__.split("/")[:-1])+"/LogFile.out")
#logfile = open(logpath, "w")
2022-06-06 12:32:37 +02:00
2022-06-17 07:05:46 +02:00
2022-10-09 13:36:08 +02:00
# gloabal variables used later in the code
LINUX_HOST = platform == " linux " # if the computer running this programm is linux, it allow more things
2022-09-23 15:13:14 +02:00
START_TIME = time ( )
2022-04-18 09:22:00 +02:00
global driver
2022-04-18 09:25:51 +02:00
driver = None
2022-04-18 09:22:00 +02:00
2022-04-14 23:03:16 +02:00
2022-09-23 15:13:14 +02:00
if LINUX_HOST :
2022-02-23 18:39:53 +01:00
import enquiries
2022-04-14 23:03:16 +02:00
else :
2022-10-09 13:33:13 +02:00
system ( " " ) # enable colors in windows cmd
2022-02-17 13:51:07 +01:00
2022-10-09 13:33:13 +02:00
#reading configuration
2022-10-16 14:11:06 +02:00
config_path = f " { path . abspath ( path . dirname ( __file__ ) ) } /config.cfg "
2022-02-17 12:57:51 +01:00
config = configparser . ConfigParser ( )
config . read ( config_path )
2022-10-09 13:33:13 +02:00
2022-10-09 13:36:08 +02:00
# path configurations
2022-05-18 18:50:04 +02:00
MotPath = config [ " PATH " ] [ " motpath " ]
2022-09-23 15:13:14 +02:00
CREDENTIALS_PATH = config [ " PATH " ] [ " logpath " ]
2022-06-17 07:05:46 +02:00
2022-06-17 07:10:32 +02:00
2022-10-09 13:33:13 +02:00
# discord configuration
DISCORD_SUCCESS_LINK = config [ " DISCORD " ] [ " successlink " ]
DISCORD_ERROR_LINK = config [ " DISCORD " ] [ " errorlink " ]
2022-10-12 14:50:38 +02:00
DISCORD_ENABLED_ERROR = config [ " DISCORD " ] [ " DiscordErrorEnabled " ] == " True "
DISCORD_ENABLED_SUCCESS = config [ " DISCORD " ] [ " DiscordSuccessEnabled " ] == " True "
2022-06-17 07:05:46 +02:00
2022-10-11 21:45:47 +02:00
if DISCORD_ENABLED_ERROR :
2022-10-09 13:33:13 +02:00
webhookFailure = Webhook . from_url ( DISCORD_ERROR_LINK , adapter = RequestsWebhookAdapter ( ) )
2022-10-11 21:45:47 +02:00
if DISCORD_ENABLED_SUCCESS :
2022-10-09 13:33:13 +02:00
webhookSuccess = Webhook . from_url ( DISCORD_SUCCESS_LINK , adapter = RequestsWebhookAdapter ( ) )
2022-06-17 07:05:46 +02:00
2022-10-09 13:33:13 +02:00
# base settings
2022-05-18 18:50:04 +02:00
FidelityLink = config [ " SETTINGS " ] [ " FidelityLink " ]
2022-10-11 21:40:41 +02:00
DISCORD_EMBED = config [ " SETTINGS " ] [ " embeds " ] == " True " #print new point value in an embed
2022-05-18 18:50:04 +02:00
Headless = config [ " SETTINGS " ] [ " headless " ] == " True "
2022-10-09 13:33:13 +02:00
# proxy settings
2022-10-11 21:40:41 +02:00
proxy_enabled = config [ " PROXY " ] [ " proxy_enabled " ] == " True "
2022-05-26 07:47:29 +02:00
proxy_address = config [ " PROXY " ] [ " url " ]
proxy_port = config [ " PROXY " ] [ " port " ]
2022-10-09 13:33:13 +02:00
# MySQL settings
2022-10-11 21:40:41 +02:00
sql_enabled = config [ " SQL " ] [ " sql_enabled " ] == " True "
2022-05-24 18:24:16 +02:00
sql_usr = config [ " SQL " ] [ " usr " ]
sql_pwd = config [ " SQL " ] [ " pwd " ]
sql_host = config [ " SQL " ] [ " host " ]
sql_database = config [ " SQL " ] [ " database " ]
2022-02-15 22:40:39 +01:00
2022-10-09 13:33:13 +02:00
# Other seetings
IPV6_CHECKED = config [ " OTHER " ] [ " ipv6 " ]
CLAIM_AMAZON = config [ " OTHER " ] [ " claim_amazon " ]
2022-04-14 23:03:16 +02:00
g = open ( MotPath , " r " , encoding = " utf-8 " )
2022-05-26 08:20:02 +02:00
lines = g . readlines ( )
if len ( lines ) < 3 :
Liste_de_mot = list ( lines [ 0 ] . split ( " , " ) )
else :
Liste_de_mot = [ x . replace ( ' \n ' , " " ) for x in lines ]
2022-02-15 22:40:39 +01:00
g . close ( )
2022-05-18 18:50:04 +02:00
2022-05-24 22:38:23 +02:00
2022-06-17 07:05:46 +02:00
def Timer ( text = " undefined " ) :
2022-09-28 15:04:07 +02:00
return ( f " [ { _mail } - { timedelta ( seconds = round ( float ( time ( ) - START_TIME ) ) ) } ] " + str ( text ) )
2022-06-17 07:05:46 +02:00
2022-05-24 22:39:18 +02:00
2022-06-17 07:10:32 +02:00
def check_ipv4 ( ) :
driver . get ( " https://api64.ipify.org " )
2022-06-17 07:22:37 +02:00
elm = driver . find_element ( By . TAG_NAME , " body " )
if len ( elm . text . split ( ' . ' ) ) == 4 :
2022-06-17 07:10:32 +02:00
return True
return False
2022-02-15 22:40:39 +01:00
2022-10-11 21:14:53 +02:00
def claim_amazon ( ) :
2022-10-09 13:33:13 +02:00
try :
driver . get ( " https://rewards.microsoft.com/redeem/000803000031 " )
2022-10-11 13:00:44 +02:00
try :
driver . find_element ( By . XPATH , " //span[contains( text( ), ' ÉCHANGER UNE RÉCOMPENSE ' )] " ) . click ( )
except :
driver . find_element ( By . XPATH , " //span[contains( text( ), ' REDEEM REWARD ' )] " ) . click ( )
2022-10-09 13:33:13 +02:00
sleep ( 5 )
2022-10-11 13:00:44 +02:00
try :
driver . find_element ( By . XPATH , " //span[contains( text( ), ' CONFIRMER LA RÉCOMPENSE ' )] " ) . click ( )
except :
2022-10-11 21:14:53 +02:00
driver . find_element ( By . XPATH , " //span[contains( text( ), ' CONFIRM REWARD ' )] " ) . click ( )
2022-10-11 13:00:44 +02:00
2022-10-09 13:33:13 +02:00
sleep ( 5 )
if ( " /rewards/redeem/orderhistory " in driver . page_source ) :
driver . get ( " https://rewards.microsoft.com/redeem/orderhistory " )
2022-10-11 13:00:44 +02:00
try :
driver . find_element ( By . XPATH , " //span[contains( text( ), ' Détails de la commande ' )] " ) . click ( )
except :
driver . find_element ( By . XPATH , " //span[contains( text( ), ' Get code ' )] " ) . click ( )
2022-10-09 13:33:13 +02:00
sleep ( 5 )
code = driver . find_element ( By . CLASS_NAME , " tango-credential-value " ) . get_attribute ( ' innerHTML ' )
lien = driver . find_elements ( By . CLASS_NAME , " tango-credential-key " ) [ 1 ] . get_attribute ( ' innerHTML ' )
lien = search ( ' \" ([^ \" ]+) \" ' , lien ) [ 1 ]
driver . get ( lien )
sleep ( 10 )
box = driver . find_element ( By . ID , " input-45 " )
box . click ( )
box . send_keys ( code )
driver . find_element ( By . XPATH , " //span[contains( text( ), ' Déverrouillez votre récompense ' )] " ) . click ( )
sleep ( 5 )
2022-10-15 16:17:21 +02:00
fcode = driver . find_element ( By . XPATH , " /html/body/div[1]/div[1]/main/div/div/div/div/div[1]/div/div[1]/div[2]/div[2]/div/div/div/div/div/div[2]/span " ) . get_attribute ( " innerHTML " )
#amazon = search("> ([^ ]+) <", fcode)[1]
webhookSuccess . send ( _mail + " - " + fcode )
2022-10-09 13:33:13 +02:00
else :
LogError ( " la recuperation ne peux pas être automatique " )
except Exception as e :
2022-10-11 21:45:47 +02:00
LogError ( ' problème dans la recuperation ' + e )
2022-10-09 13:33:13 +02:00
2022-05-18 18:50:04 +02:00
def setup_proxy ( ip , port ) :
PROXY = f " { ip } : { port } "
webdriver . DesiredCapabilities . FIREFOX [ ' proxy ' ] = {
2022-05-24 22:39:18 +02:00
" httpProxy " : PROXY ,
" sslProxy " : PROXY ,
" proxyType " : " MANUAL " ,
2022-05-18 18:50:04 +02:00
}
2022-03-28 16:30:11 +02:00
2022-04-22 12:41:05 +02:00
def FirefoxDriver ( mobile = False , Headless = Headless ) :
2022-05-18 18:50:04 +02:00
if proxy_enabled :
2022-05-24 22:18:22 +02:00
setup_proxy ( proxy_address , proxy_port )
2022-04-14 23:03:16 +02:00
PC_USER_AGENT = (
2022-06-28 12:27:22 +02:00
" Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
" AppleWebKit/537.36 (KHTML, like Gecko) "
2022-08-30 12:00:30 +02:00
" Chrome/104.0.5112.102 Safari/537.36 Edg/104.0.1293.70 "
2022-04-14 23:03:16 +02:00
)
2022-04-22 12:41:05 +02:00
MOBILE_USER_AGENT = (
2022-06-28 12:27:22 +02:00
" Mozilla/5.0 (iPhone; CPU iPhone OS 15_5 like Mac OS X) "
" AppleWebKit/605.1.15 (KHTML, like Gecko) "
" CriOS/103.0.5060.63 Mobile/15E148 Safari/604.1 "
2022-04-22 12:41:05 +02:00
)
2022-08-22 11:03:20 +02:00
2022-04-22 12:41:05 +02:00
options = Options ( )
2021-12-22 14:01:58 +01:00
options . set_preference ( " browser.link.open_newwindow " , 3 )
2022-04-14 23:03:16 +02:00
if Headless :
2021-12-22 14:01:58 +01:00
options . add_argument ( " -headless " )
2022-04-22 12:41:05 +02:00
if mobile :
options . set_preference ( " general.useragent.override " , MOBILE_USER_AGENT )
else :
options . set_preference ( " general.useragent.override " , PC_USER_AGENT )
2022-08-30 12:00:30 +02:00
driver = webdriver . Firefox ( options = options )
driver . set_window_size ( 1900 + hash ( _mail ) % 20 , 1070 + hash ( _password + " salt " ) % 10 )
return driver
2022-04-14 23:03:16 +02:00
2021-12-22 14:01:58 +01:00
2022-04-14 23:03:16 +02:00
def printf ( txt , end = " " , Mobdriver = driver ) :
2022-09-25 15:32:34 +02:00
if LOG :
2022-04-18 09:25:51 +02:00
print ( Timer ( txt ) )
2022-09-23 15:13:14 +02:00
if FULL_LOG :
2022-05-26 07:47:29 +02:00
try :
2022-04-18 09:29:45 +02:00
LogError ( Timer ( txt ) , Mobdriver = Mobdriver )
except Exception as e :
2022-08-29 10:44:57 +02:00
print ( " \n " + Timer ( e ) + " \n " + Timer ( txt ) + " \n " )
2022-04-18 09:25:51 +02:00
2021-12-22 14:01:58 +01:00
def CustomSleep ( temps ) :
2022-06-21 17:22:44 +02:00
try :
2022-10-13 07:18:08 +02:00
if FAST and temps > 50 :
2022-09-30 14:34:50 +02:00
sleep ( temps / 10 )
return ( )
2022-09-25 15:32:34 +02:00
if LOG or not LINUX_HOST : #only print sleep when user see it
2022-10-09 13:33:13 +02:00
points = [ " ⢿ " , " ⣻ " , " ⣽ " , " ⣾ " , " ⣷ " , " ⣯ " , " ⣟ " , " ⡿ " ]
2022-06-21 17:22:44 +02:00
passe = 0
for i in range ( int ( temps ) ) :
for i in range ( 8 ) :
sleep ( 0.125 )
passe + = 0.125
print ( f " { points [ i ] } - { round ( float ( temps ) - passe , 3 ) } " , end = " \r " )
print ( " " , end = " \r " )
2021-12-22 14:01:58 +01:00
2022-06-21 17:22:44 +02:00
else :
sleep ( temps )
except KeyboardInterrupt :
printf ( " attente annulée " )
2021-12-29 11:51:08 +01:00
2022-08-29 10:44:57 +02:00
2022-04-14 23:03:16 +02:00
def ListTabs ( Mdriver = None ) :
2021-12-22 14:01:58 +01:00
tabs = [ ]
2022-04-14 23:03:16 +02:00
if Mdriver :
2021-12-29 11:08:15 +01:00
ldriver = Mdriver
2022-04-14 23:03:16 +02:00
else :
2021-12-29 11:08:15 +01:00
ldriver = driver
2022-04-14 23:03:16 +02:00
for i in ldriver . window_handles :
2021-12-29 11:08:15 +01:00
ldriver . switch_to . window ( i )
tabs . append ( ldriver . current_url )
2022-04-14 23:03:16 +02:00
return tabs
2021-12-22 14:01:58 +01:00
2022-06-02 12:29:17 +02:00
2022-09-23 15:13:14 +02:00
def LogError ( message , log = FULL_LOG , Mobdriver = None ) :
2022-08-29 11:36:08 +02:00
print ( f " \n \n \033 [93m Erreur : { str ( message ) } \033 [0m \n \n " )
2022-04-14 23:03:16 +02:00
if Mobdriver :
2021-12-29 10:54:25 +01:00
gdriver = Mobdriver
2022-04-14 23:03:16 +02:00
else :
2021-12-29 10:54:25 +01:00
gdriver = driver
2022-08-29 11:36:08 +02:00
2022-10-11 21:40:41 +02:00
if LINUX_HOST and DISCORD_ENABLED_ERROR :
2022-04-14 23:03:16 +02: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-04-14 23:03:16 +02:00
if not log :
2022-02-23 17:51:11 +01:00
embed = discord . Embed (
title = " An Error has occured " ,
description = str ( message ) ,
2022-04-14 23:03:16 +02:00
colour = Colour . red ( ) ,
2022-02-23 17:51:11 +01:00
)
2022-04-14 23:03:16 +02:00
else :
2022-02-23 17:51:11 +01:00
embed = discord . Embed (
title = " Full log is enabled " ,
description = str ( message ) ,
2022-04-14 23:03:16 +02:00
colour = Colour . blue ( ) ,
2022-02-23 17:51:11 +01:00
)
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 )
2022-04-14 23:03:16 +02:00
webhookFailure . send ( file = discord . File ( " page.html " ) )
2022-02-23 17:33:44 +01:00
2021-12-22 14:01:58 +01:00
2022-04-14 23:03:16 +02: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 " )
2021-12-22 14:01:58 +01:00
2022-04-14 23:03:16 +02:00
def Close ( fenetre , SwitchTo = 0 ) :
2021-12-22 14:01:58 +01:00
driver . switch_to . window ( fenetre )
driver . close ( )
driver . switch_to . window ( driver . window_handles [ SwitchTo ] )
2022-05-27 09:28:31 +02:00
#Deal with RGPD popup as well as some random popup like 'are you satisfied' one
2021-12-22 14:01:58 +01:00
def RGPD ( ) :
2022-04-14 23:03:16 +02:00
try :
driver . find_element ( By . ID , " bnp_btn_accept " ) . click ( )
except :
2021-12-22 14:01:58 +01:00
pass
2022-04-14 23:03:16 +02:00
try :
driver . find_element ( By . ID , " bnp_hfly_cta2 " ) . click ( )
except :
2021-12-22 14:01:58 +01:00
pass
2022-05-26 07:47:29 +02:00
try :
driver . find_element ( By . id , " bnp_hfly_close " ) . click ( ) #are you satisfied popup
except :
pass
2021-12-22 14:01:58 +01:00
2021-12-23 17:36:53 +01:00
2022-05-26 07:47:29 +02:00
"""
2022-06-20 18:16:15 +02:00
PlayQuiz [ N ] ( [ int : override ] ) make the quizz with N choice each time . They usually have between 4 and 10 questions .
override is the number of question , by default , it ' s the number of question in this specific quizz. Can be usefull in some case, where the programm crashes before finishing the quizz
2022-05-26 07:47:29 +02:00
"""
def PlayQuiz2 ( override = 10 ) :
2022-09-28 15:04:07 +02:00
printf ( " début de PlayQuiz2 " )
2022-04-14 23:03:16 +02:00
for j in range ( override ) :
try :
2022-04-11 12:36:03 +02:00
RGPD ( )
2022-04-14 23:03:16 +02:00
CustomSleep ( uniform ( 3 , 5 ) )
2021-12-22 14:01:58 +01:00
txt = driver . page_source
2022-04-14 23:03:16 +02:00
secret = search ( ' IG: " ([^ " ]+) " ' , txt ) [ 1 ] # variable dans la page, pour calculer le offset
reponse1 = search ( ' data-option= " ([^ " ]+) " ' , txt ) [ 1 ]
offset = int ( secret [ - 2 : ] , 16 ) # la conversion ec decimal des deux dernier caracteres de IG
reponse = search ( ' correctAnswer " : " ([0-9]+) ' , txt ) [ 1 ]
somme = 0
2021-12-22 14:01:58 +01:00
2022-04-14 23:03:16 +02:00
for i in reponse1 :
2021-12-22 14:01:58 +01:00
somme + = ord ( i )
2022-04-14 23:03:16 +02:00
if somme + offset == int ( reponse ) :
elem = driver . find_element ( By . ID , " rqAnswerOption0 " )
2021-12-22 14:01:58 +01:00
elem . click ( )
2022-04-14 23:03:16 +02:00
progressBar ( j , 10 , name = " quiz 2 " )
else :
elem = driver . find_element ( By . ID , " rqAnswerOption1 " )
2021-12-22 14:01:58 +01:00
elem . click ( )
2022-04-14 23:03:16 +02:00
progressBar ( j , 10 , name = " quiz 2 " )
2021-12-22 14:01:58 +01:00
2022-04-14 23:03:16 +02:00
except exceptions . ElementNotInteractableException as e :
driver . execute_script ( " arguments[0].click(); " , elem )
2021-12-22 14:01:58 +01:00
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-04-14 23:03:16 +02:00
def PlayQuiz8 ( override = 3 ) :
2022-03-28 16:55:35 +02:00
printf ( f " PlayQuiz8 : start, override : { override } " )
2022-04-14 23:03:16 +02:00
try :
2021-12-22 14:01:58 +01:00
c = 0
2021-12-23 17:36:53 +01:00
for i in range ( override ) :
2022-04-11 12:36:03 +02:00
RGPD ( )
2022-09-30 14:34:50 +02:00
CustomSleep ( uniform ( 3 , 5 ) )
2022-04-14 23:03:16 +02:00
ListeOfGood = [ ]
for i in range ( 1 , 9 ) :
try :
Card = driver . find_element ( By . ID , f " rqAnswerOption { i - 1 } " )
if ' iscorrectoption= " True " ' in Card . get_attribute ( " outerHTML " ) :
ListeOfGood . append ( f " rqAnswerOption { i - 1 } " ) # premier div = 3 ?
except Exception as e :
2022-08-29 10:44:57 +02:00
LogError ( f " playquiz8 - 1 - { e } " )
2021-12-22 14:01:58 +01:00
shuffle ( ListeOfGood )
2022-04-14 23:03:16 +02:00
for i in ListeOfGood :
2022-09-30 14:34:50 +02:00
CustomSleep ( uniform ( 3 , 5 ) )
2022-04-14 23:03:16 +02:00
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 :
2022-04-14 23:03:16 +02:00
try :
driver . execute_script ( " arguments[0].click(); " , elem )
except Exception as e :
2022-06-21 17:36:18 +02:00
LogError ( f " playquizz8 - 2 - { e } " )
except exceptions . NoSuchElementException as e :
try :
driver . refresh ( )
CustomSleep ( 10 )
elem = driver . find_element ( By . ID , i )
elem . click ( )
except Exception as e :
LogError ( f " playquizz8 - 5 - { e } " )
2022-04-14 23:03:16 +02:00
except Exception as e :
2022-09-23 15:13:14 +02:00
if CUSTOM_START :
2022-06-21 17:36:18 +02:00
printf ( f " playquiz8 - 3 - { e } " ) # may append during
2022-04-14 23:03:16 +02:00
else :
2022-06-21 17:36:18 +02:00
LogError ( f " playquizz8 - 3 - { e } " )
2022-04-14 23:03:16 +02:00
except Exception as e :
2022-06-09 14:19:34 +02:00
LogError ( f " PlayQuiz8 - 4 - { e } \n ListOfGood : { 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
2022-04-14 23:03:16 +02:00
def PlayQuiz4 ( override = None ) :
2022-03-28 16:55:35 +02:00
printf ( " PlayQuiz4 : start " )
2022-04-14 23:03:16 +02: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 } " )
2022-04-14 23:03:16 +02:00
except :
override = 3
try :
2021-12-23 17:36:53 +01:00
for i in range ( override ) :
2022-04-14 23:03:16 +02:00
CustomSleep ( uniform ( 3 , 5 ) )
2021-12-22 14:01:58 +01:00
txt = driver . page_source
2022-04-11 12:36:03 +02:00
RGPD ( )
2022-04-14 23:03:16 +02:00
reponse = search ( ' correctAnswer " : " ([^ " ]+) ' , txt ) [ 1 ] # je suis pas sur qu'il y ait un espace
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 " )
try :
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 )
2022-04-14 23:03:16 +02:00
except Exception as e :
2022-08-29 10:44:57 +02:00
LogError ( f " PlayQuiz4 { str ( e ) } " )
2021-12-22 14:01:58 +01:00
raise ValueError ( e )
2022-03-28 16:55:35 +02:00
printf ( " PlayQuiz4 : end " )
2021-12-22 14:01:58 +01:00
2022-08-29 10:44:57 +02:00
2022-06-21 17:22:44 +02:00
"""
2022-08-29 10:44:57 +02:00
PlayPoll ( ) reply a random thing to poll , on of daily activities
2022-06-21 17:22:44 +02:00
"""
2021-12-22 14:01:58 +01:00
def PlayPoll ( ) :
2022-03-28 16:55:35 +02:00
printf ( " PlayPoll : start " )
2022-04-14 23:03:16 +02:00
try :
try :
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 )
2022-04-14 23:03:16 +02:00
CustomSleep ( uniform ( 2 , 2.5 ) )
except Exception as e :
LogError ( " PlayPoll " + str ( e ) )
2021-12-22 14:01:58 +01:00
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
2022-04-14 23:03:16 +02:00
def AllCard ( ) : # fonction qui clique sur les cartes
def reset ( Partie2 = False ) : # retourne sur la page de depart apres avoir finis
if len ( driver . window_handles ) == 1 :
driver . get ( " https://www.bing.com/rewardsapp/flyout " )
if Partie2 :
driver . find_element (
By . XPATH , " /html/body/div/div/div[3]/div[2]/div[2]/div[2]/div[1] "
) . click ( )
else :
2021-12-22 14:01:58 +01:00
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 ( ) :
2022-04-14 23:03:16 +02:00
try :
2021-12-22 14:01:58 +01:00
for i in range ( 3 ) :
2022-09-30 14:34:50 +02:00
CustomSleep ( uniform ( 3 , 5 ) )
2022-04-14 23:03:16 +02:00
try :
2022-08-30 11:17:56 +02:00
printf ( " dailycards - show pannels " )
2022-03-28 16:30:11 +02:00
titre = " erreur "
2022-04-14 23:03:16 +02: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 ( )
2022-02-18 18:33:32 +01:00
sleep ( 1 )
titre = driver . title
TryPlay ( titre )
sleep ( 1 )
reset ( )
2022-06-21 17:36:18 +02:00
printf ( f " DailyCard { titre } ok " )
2022-04-14 23:03:16 +02:00
except Exception as e :
2022-03-28 17:00:36 +02:00
printf ( f " Allcard card { titre } error ( { e } ) " )
2022-04-14 23:03:16 +02:00
except Exception as e :
LogError ( f " Dailycards { e } " )
try :
2022-04-07 13:43:39 +02:00
dailyCards ( )
2022-06-21 17:36:18 +02:00
except Exception as e :
printf ( f " erreur dans les quetes de la semaine { e } " )
2022-05-18 19:07:25 +02:00
2022-05-26 07:47:29 +02:00
def weekly_cards ( ) :
2022-04-14 23:03:16 +02:00
try :
driver . find_element (
By . XPATH , " /html/body/div/div/div[3]/div[2]/div[2]/div[2]/div[1] "
) . click ( ) # declenche la premiere partie ?
except :
2021-12-22 14:01:58 +01:00
reset ( )
2022-04-14 23:03:16 +02:00
try :
driver . find_element (
By . XPATH , " /html/body/div/div/div[3]/div[2]/div[2]/div[2]/div[1] "
) . click ( ) # declenche la deuxieme partie ?
except :
2021-12-22 14:01:58 +01:00
pass
2022-04-14 23:03:16 +02:00
2022-02-18 13:10:46 +01:00
for i in range ( 20 ) :
2022-09-28 15:04:07 +02:00
printf ( " début de l ' une des cartes " )
2022-04-14 23:03:16 +02: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 ( )
2022-09-28 15:04:07 +02:00
printf ( " carte cliquée " )
2021-12-22 14:01:58 +01:00
driver . switch_to . window ( driver . window_handles [ len ( driver . window_handles ) - 1 ] )
2022-04-14 23:03:16 +02:00
sleep ( 1 )
2022-02-18 13:10:46 +01:00
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 )
2022-04-14 23:03:16 +02:00
try :
link = findall ( ' href= " ([^<]+) " title= " " ' , driver . page_source ) [
3
] # verifie si on a toujours des cartes
except :
2021-12-22 14:01:58 +01:00
break
2022-06-02 12:39:30 +02:00
for i in range ( 2 ) : # don't seem useful for fixing error
2022-05-26 07:47:29 +02:00
try :
2022-05-18 19:07:25 +02:00
weekly_cards ( )
2022-05-19 10:40:50 +02:00
break
2022-05-18 19:07:25 +02:00
except Exception as e :
2022-05-19 10:40:50 +02:00
LogError ( f " weekly_cards, try n° { i + 1 } \n { e } " )
2022-05-18 19:07:25 +02:00
if i == 0 :
driver . refresh ( )
2022-05-26 07:47:29 +02:00
else :
2022-06-06 12:32:37 +02:00
CustomSleep ( 1800 )
2022-05-18 19:07:25 +02:00
driver . refresh ( )
2021-12-22 14:01:58 +01:00
2022-06-21 17:22:44 +02:00
"""
send_keys_wait ( [ selenium element : element , str : keys ] ) send the different keys to the field element , with a random time between each press to simulate human action .
keys can be an string , but alos selenium keys
"""
2022-04-14 23:03:16 +02:00
def send_keys_wait ( element , keys ) :
for i in keys :
2021-12-22 14:01:58 +01:00
element . send_keys ( i )
2022-09-30 14:34:50 +02:00
if FAST :
pass
else :
sleep ( uniform ( 0.1 , 0.3 ) )
2021-12-22 14:01:58 +01:00
2022-10-09 13:33:13 +02:00
2022-06-21 17:22:44 +02:00
"""
login ( ) tries to login to your micrososft account .
it uses global variable _mail and _password to login
"""
2022-04-14 23:03:16 +02:00
def login ( ) :
2022-06-09 14:19:34 +02:00
global driver
def sub_login ( ) :
2022-08-29 11:36:08 +02:00
printf ( " sublogin : start " )
2022-04-14 23:03:16 +02:00
driver . get ( " https://www.bing.com/rewardsapp/flyout " )
try :
2022-05-15 10:36:26 +02:00
driver . find_element ( By . CSS_SELECTOR , f ' [title= " Rejoindre " ] ' ) . click ( ) # depend of the language of the page
2022-04-14 23:03:16 +02:00
except :
2022-08-29 11:36:08 +02:00
try :
driver . find_element ( By . CSS_SELECTOR , f ' [title= " Join now " ] ' ) . click ( ) # depend of the language of the page
except :
raise ValueError ( ' already logged in ' )
2022-06-09 14:19:34 +02:00
2022-05-28 11:50:45 +02:00
CustomSleep ( 10 )
2022-04-14 23:03:16 +02: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-05-28 08:18:21 +02:00
CustomSleep ( 10 )
2022-04-14 23:03:16 +02: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-04-14 23:03:16 +02:00
try :
driver . find_element ( By . ID , " KmsiCheckboxField " ) . click ( )
except Exception as e :
2022-06-10 14:15:42 +02:00
pass
2022-06-20 18:16:15 +02:00
#printf(f"login - 2.1 - erreur validation bouton KmsiCheckboxField. pas forcement grave {e}")
2022-04-14 23:03:16 +02:00
2022-05-15 11:13:18 +02:00
try :
driver . find_element ( By . ID , " iLooksGood " ) . click ( )
except Exception as e :
2022-06-10 14:15:42 +02:00
pass
2022-06-20 18:16:15 +02:00
#printf(f"login - 2.2 - erreur validation bouton iLooksGood. pas forcement grave {e}")
2022-05-15 11:13:18 +02:00
2022-04-14 23:03:16 +02:00
try :
driver . find_element ( By . ID , " idSIButton9 " ) . click ( )
except Exception as e :
2022-06-10 14:15:42 +02:00
pass
2022-06-20 18:16:15 +02:00
#printf(f"login - 2.3 - erreur validation bouton idSIButton9. pas forcement grave {e}")
2022-03-28 16:55:35 +02:00
2022-05-15 11:13:18 +02:00
try :
driver . find_element ( By . ID , " iCancel " ) . click ( )
except Exception as e :
2022-06-10 14:15:42 +02:00
pass
2022-06-20 18:16:15 +02:00
#printf(f"login - 2.4 - erreur validation bouton iCancel. pas forcement grave {e}")
2022-08-22 11:03:20 +02:00
try :
elm = driver . find_element ( By . TAG_NAME , " body " )
elm . send_keys ( Keys . ENTER )
except :
pass
2022-03-28 16:55:35 +02:00
printf ( " login completed " )
2021-12-22 14:01:58 +01:00
RGPD ( )
2022-08-30 11:28:02 +02:00
CustomSleep ( uniform ( 3 , 5 ) )
2022-04-14 23:03:16 +02:00
driver . get ( " https://www.bing.com/rewardsapp/flyout " )
2022-08-30 11:28:02 +02:00
CustomSleep ( uniform ( 3 , 5 ) )
2021-12-22 14:01:58 +01:00
2022-06-09 14:19:34 +02:00
for i in range ( 3 ) :
try :
sub_login ( )
2022-06-22 12:26:50 +02:00
return ( driver . current_window_handle )
2022-06-09 14:19:34 +02:00
except Exception as e :
LogError ( " login - 3 - " + str ( e ) )
2022-06-09 14:34:02 +02:00
driver . close ( )
2022-06-09 14:19:34 +02:00
CustomSleep ( 1200 )
driver = FirefoxDriver ( )
2022-06-09 14:34:02 +02:00
return ( " STOP " )
2021-12-22 14:01:58 +01:00
2022-04-14 23:03:16 +02:00
def BingPcSearch ( override = randint ( 35 , 40 ) ) :
driver . get ( f " https://www.bing.com/search?q=test " ) # {choice(Liste_de_mot)}')
CustomSleep ( uniform ( 1 , 2 ) )
2021-12-22 14:01:58 +01:00
RGPD ( )
2022-04-14 23:03:16 +02: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 )
2022-04-14 23:03:16 +02:00
try :
send_keys_wait ( driver . find_element ( By . ID , " sb_form_q " ) , mot )
driver . find_element ( By . ID , " sb_form_q " ) . send_keys ( Keys . ENTER )
2022-04-22 12:41:05 +02:00
except Exception as e :
printf ( e )
2021-12-22 14:01:58 +01:00
sleep ( 10 )
2022-08-29 10:44:57 +02:00
driver . get ( ' https://www.bing.com/search?q=pls ' )
2022-04-22 12:41:05 +02:00
sleep ( 3 )
2022-04-14 23:03:16 +02: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
2022-04-14 23:03:16 +02:00
progressBar ( i , override , name = " PC " )
2022-09-30 14:34:50 +02:00
CustomSleep ( uniform ( 5 , 20 ) )
2021-12-22 14:01:58 +01:00
2022-04-14 23:03:16 +02:00
try :
driver . find_element ( By . ID , " sb_form_q " ) . clear ( )
2022-04-22 12:41:05 +02:00
except Exception as e :
printf ( e )
2022-04-14 23:03:16 +02:00
try :
2022-08-29 10:44:57 +02:00
driver . get ( ' https://www.bing.com/search?q=pls ' )
2022-04-14 23:03:16 +02: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
2022-04-14 23:03:16 +02:00
print ( " \n \n " )
2021-12-22 14:01:58 +01:00
2022-04-14 23:03:16 +02:00
def BingMobileSearch ( override = randint ( 22 , 25 ) ) :
2022-06-21 17:36:18 +02:00
MobileDriver = " unable to start "
2022-04-14 23:03:16 +02:00
try :
try :
2022-04-22 12:41:05 +02:00
MobileDriver = FirefoxDriver ( mobile = True )
2022-05-27 15:26:16 +02:00
MobileDriver . implicitly_wait ( 15 )
2022-04-14 23:03:16 +02:00
except Exception as e :
2021-12-29 13:32:16 +01:00
sleep ( 30 )
2022-04-14 23:03:16 +02:00
LogError ( " BingMobileSearch - 1 - echec de la creation du driver mobile " )
2022-04-22 12:41:05 +02:00
MobileDriver = FirefoxDriver ( mobile = True )
2022-05-27 15:26:16 +02:00
MobileDriver . implicitly_wait ( 15 )
2021-12-22 14:01:58 +01:00
echec = 0
2022-04-14 23:03:16 +02:00
2021-12-22 14:01:58 +01:00
def Mlogin ( echec ) :
2022-04-14 23:03:16 +02:00
try :
MobileDriver . get (
2022-05-27 14:54:21 +02:00
" https://www.bing.com/search?q=test+speed "
2022-04-14 23:03:16 +02:00
)
2022-05-27 14:54:21 +02:00
MRGPD ( )
2022-04-14 23:03:16 +02:00
CustomSleep ( uniform ( 3 , 5 ) )
2022-09-28 15:04:07 +02:00
printf ( " début du login " , Mobdriver = MobileDriver )
2022-04-14 23:03:16 +02:00
MobileDriver . find_element ( By . ID , " mHamburger " ) . click ( )
CustomSleep ( uniform ( 1 , 2 ) )
2022-06-10 12:39:18 +02:00
printf ( " Mlogin - 1 " , Mobdriver = MobileDriver )
2022-04-14 23:03:16 +02:00
MobileDriver . find_element ( By . ID , " hb_s " ) . click ( )
CustomSleep ( uniform ( 1 , 2 ) )
2022-06-10 12:39:18 +02:00
printf ( " Mlogin - 2 " , Mobdriver = MobileDriver )
2022-04-14 23:03:16 +02:00
mail = MobileDriver . find_element ( By . ID , " i0116 " )
2021-12-22 14:01:58 +01:00
send_keys_wait ( mail , _mail )
2022-06-10 12:39:18 +02:00
printf ( " Mlogin - 3 " , Mobdriver = MobileDriver )
2022-04-14 23:03:16 +02:00
mail . send_keys ( Keys . ENTER )
2022-05-27 14:46:23 +02:00
CustomSleep ( uniform ( 7 , 9 ) )
2022-06-10 12:39:18 +02:00
printf ( " Mlogin - 4 " , Mobdriver = MobileDriver )
2022-04-14 23:03:16 +02:00
pwd = MobileDriver . find_element ( By . ID , " i0118 " )
2022-06-10 12:39:18 +02:00
printf ( " Mlogin - 5 " , Mobdriver = MobileDriver )
2021-12-22 14:01:58 +01:00
send_keys_wait ( pwd , _password )
2022-06-10 12:39:18 +02:00
printf ( " Mlogin - 6 " , Mobdriver = MobileDriver )
2022-04-14 23:03:16 +02:00
pwd . send_keys ( Keys . ENTER )
CustomSleep ( uniform ( 1 , 2 ) )
2022-05-27 14:42:28 +02:00
try :
MobileDriver . find_element ( By . ID , " KmsiCheckboxField " ) . click ( )
except Exception as e :
2022-06-10 12:39:18 +02:00
printf ( f " Mlogin - 2.1 - erreur validation bouton KmsiCheckboxField. pas forcement grave { e } " )
2022-05-27 14:42:28 +02:00
try :
MobileDriver . find_element ( By . ID , " iLooksGood " ) . click ( )
except Exception as e :
2022-06-10 12:39:18 +02:00
printf ( f " Mlogin - 2.2 - erreur validation bouton iLooksGood. pas forcement grave { e } " )
2022-05-27 14:42:28 +02:00
try :
MobileDriver . find_element ( By . ID , " idSIButton9 " ) . click ( )
except Exception as e :
2022-06-10 12:39:18 +02:00
printf ( f " Mlogin - 2.3 - erreur validation bouton idSIButton9. pas forcement grave { e } " )
2022-05-27 14:42:28 +02:00
2022-06-10 12:39:18 +02:00
printf ( " fin du Mlogin " , Mobdriver = MobileDriver )
2022-03-06 16:38:18 +01:00
2022-04-14 23:03:16 +02:00
except Exception as e :
2021-12-22 14:01:58 +01:00
echec + = 1
2022-04-14 23:03:16 +02:00
if echec < = 3 :
printf (
f " echec du login sur la version mobile. on reesaye ( { echec } /3), { e } "
)
CustomSleep ( uniform ( 5 , 10 ) )
2021-12-22 14:01:58 +01:00
Mlogin ( echec )
2022-04-14 23:03:16 +02:00
else :
LogError (
f " login impossible 3 fois de suite. { e } " , Mobdriver = MobileDriver
)
2021-12-22 14:01:58 +01:00
MobileDriver . quit ( )
2022-04-14 23:03:16 +02:00
return True
2021-12-22 14:01:58 +01:00
def MRGPD ( ) :
2022-04-14 23:03:16 +02:00
try :
MobileDriver . find_element ( By . ID , " bnp_btn_accept " ) . click ( )
2022-04-22 12:41:05 +02:00
except Exception as e :
2022-06-10 12:39:18 +02:00
pass
2022-04-22 12:41:05 +02:00
printf ( e )
2022-04-14 23:03:16 +02:00
try :
MobileDriver . find_element ( By . ID , " bnp_hfly_cta2 " ) . click ( )
2022-04-22 12:41:05 +02:00
except Exception as e :
2022-06-10 12:39:18 +02:00
pass
printf ( f " MRGPD : e " )
2022-04-14 23:03:16 +02:00
2021-12-22 14:01:58 +01:00
def Alerte ( ) :
try :
alert = MobileDriver . switch_to . alert
alert . dismiss ( )
2022-04-14 23:03:16 +02:00
except exceptions . NoAlertPresentException as e :
2021-12-22 14:01:58 +01:00
pass
2021-12-23 13:05:16 +01:00
except Exception as e :
2022-04-14 23:03:16 +02:00
LogError (
f " error sur une alerte dans le driver mobile. { e } " ,
Mobdriver = MobileDriver ,
)
2021-12-22 14:01:58 +01:00
2022-04-14 23:03:16 +02:00
if not Mlogin ( echec ) :
2021-12-22 14:01:58 +01:00
2022-04-14 23:03:16 +02:00
CustomSleep ( uniform ( 1 , 2 ) )
2021-12-22 14:01:58 +01:00
MRGPD ( )
2022-04-14 23:03:16 +02:00
CustomSleep ( uniform ( 1 , 1.5 ) )
2022-06-09 14:34:02 +02:00
2022-04-14 23:03:16 +02:00
for i in range ( override ) : # 20
2022-06-09 14:34:02 +02:00
try :
mot = choice ( Liste_de_mot )
send_keys_wait ( MobileDriver . find_element ( By . ID , " sb_form_q " ) , mot )
MobileDriver . find_element ( By . ID , " sb_form_q " ) . send_keys ( Keys . ENTER )
progressBar ( i , override , name = " Mobile " )
printf ( MobileDriver . current_url , Mobdriver = MobileDriver )
2022-09-30 14:34:50 +02:00
CustomSleep ( uniform ( 5 , 20 ) )
2021-12-22 14:01:58 +01:00
2022-06-09 14:34:02 +02:00
Alerte ( ) # verifie si il y a des alertes (demande de positions ....)
2021-12-23 13:05:16 +01:00
2022-04-14 23:03:16 +02:00
MobileDriver . find_element ( By . ID , " sb_form_q " ) . clear ( )
2022-06-09 14:34:02 +02:00
except :
driver . refresh ( )
CustomSleep ( 30 )
i - = 1
2021-12-22 14:01:58 +01:00
MobileDriver . quit ( )
except Exception as e :
2022-06-10 12:39:18 +02:00
LogError ( " BingMobileSearch - 4 - " + str ( e ) , Mobdriver = MobileDriver )
2022-04-14 23:03:16 +02:00
try :
2021-12-23 10:53:53 +01:00
MobileDriver . quit ( )
2022-04-14 23:03:16 +02:00
except Exception as e :
2022-02-17 14:20:44 +01:00
LogError ( f " can ' t close mobile driveer . { e } " )
2021-12-22 14:01:58 +01:00
2021-12-23 13:51:07 +01:00
2022-04-14 23:03:16 +02:00
def TryPlay ( nom = " inconnu " ) :
2021-12-22 14:01:58 +01:00
RGPD ( )
2022-03-02 10:33:43 +01:00
printf ( " TryPlay en cours " )
2022-04-14 23:03:16 +02:00
def play ( number , override = None ) :
if number == 8 or number == 9 :
try :
2022-09-28 15:04:07 +02:00
printf ( f " \033 [96m Quiz 8 détecté sur la page { nom } \033 [0m " )
2022-03-28 19:20:06 +02:00
PlayQuiz8 ( )
2022-04-14 23:03:16 +02:00
printf ( f " \033 [92m Quiz 8 reussit sur { nom } \033 [0m " )
except Exception as e :
printf ( f " echec de PlayQuiz 8. Aborted { e } \033 [0m " )
2022-02-18 13:15:48 +01:00
2022-04-14 23:03:16 +02:00
elif number == 5 or number == 4 :
try :
2022-09-28 15:04:07 +02:00
printf ( f " \033 [96m Quiz 4 détecté sur la page { nom } \033 [0m " )
2022-03-28 19:20:06 +02:00
PlayQuiz4 ( )
2022-06-02 12:39:30 +02:00
printf ( f " \033 [92m Quiz 4 reussit sur { nom } \033 [0m " )
2022-04-14 23:03:16 +02:00
except Exception as e :
printf ( f " echec de PlayQuiz 4. Aborted { e } \033 [0m " )
2022-02-18 13:15:48 +01:00
2022-04-14 23:03:16 +02:00
elif number == 3 or number == 2 :
try :
2022-09-28 15:04:07 +02:00
printf ( f " \033 [96m Quiz 2 détecté sur la page { nom } \033 [0m " )
2022-03-28 19:20:06 +02:00
PlayQuiz2 ( )
2022-06-02 12:39:30 +02:00
printf ( f " \033 [92m Quiz 2 reussit sur la page { nom } \033 [0m " )
2022-04-14 23:03:16 +02: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é "
)
try :
driver . find_element ( By . ID , " rqStartQuiz " ) . click ( ) # start the quiz
number = driver . page_source . count ( " rqAnswerOption " )
2021-12-23 16:34:32 +01:00
play ( number )
2022-04-14 23:03:16 +02:00
except Exception as e :
2022-04-22 12:41:05 +02:00
# printf(e) normal error here
2022-04-14 23:03:16 +02:00
if " bt_PollRadio " in driver . page_source :
try :
2022-06-02 12:39:30 +02:00
printf ( " Poll détected " , end = " \r " )
2021-12-22 14:01:58 +01:00
RGPD ( )
PlayPoll ( )
2022-06-02 12:39:30 +02:00
printf ( " Poll reussit " )
2022-04-14 23:03:16 +02:00
except Exception as e :
printf ( f " TryPlay - 1 - Poll aborted { e } " )
elif " rqQuestionState " in driver . page_source :
try :
number = driver . page_source . count ( " rqAnswerOption " )
restant = len (
findall ( ' " rqQuestionState.?. " class= ' , driver . page_source )
) - len (
findall (
' " rqQuestionState.?. " class= " filledCircle " ' , driver . page_source
)
)
2022-09-28 15:04:07 +02:00
printf ( f " recovery détecté. quiz : { number } , restant : { restant + 1 } " )
2022-06-09 14:19:34 +02:00
play ( number - 1 , override = restant + 1 )
2022-04-14 23:03:16 +02:00
except Exception as e :
2022-02-17 14:20:44 +01:00
printf ( " TryPlay - 2 - " + e )
2021-12-22 14:01:58 +01:00
2022-04-14 23:03:16 +02:00
elif search ( " ([0-9]) de ([0-9]) finalisée " , driver . page_source ) :
print ( " fidélité " )
2021-12-22 14:01:58 +01:00
RGPD ( )
2022-04-10 18:43:33 +02:00
Fidelite ( )
2022-04-14 23:03:16 +02:00
else :
2022-09-28 15:04:07 +02:00
printf ( f " rien à faire sur la page { nom } " )
2021-12-22 14:01:58 +01:00
RGPD ( )
2022-04-14 23:03:16 +02:00
CustomSleep ( uniform ( 3 , 5 ) )
2021-12-22 14:01:58 +01:00
2022-04-14 23:03:16 +02:00
def LogPoint ( account = " unknown " ) : # log des points sur discord
2022-05-24 18:24:16 +02:00
def get_points ( ) :
driver . get ( " https://www.bing.com/rewardsapp/flyout " )
2022-09-23 15:13:14 +02:00
if not LINUX_HOST :
2022-05-24 18:24:16 +02:00
asyncio . set_event_loop_policy ( asyncio . WindowsSelectorEventLoopPolicy ( ) )
else :
asyncio . set_event_loop ( asyncio . new_event_loop ( ) )
2022-04-14 23:03:16 +02:00
2022-05-24 18:24:16 +02:00
regex1 = ' <a href= " https://rewards \ .bing \ .com/ " title= " ((. { 1,3}),(. { 1,3})) points " target= " _blank " '
2022-04-14 23:03:16 +02:00
try :
2022-05-24 18:24:16 +02:00
point = search ( regex1 , driver . page_source ) [ 1 ] . replace ( " , " , " " )
2022-04-14 23:03:16 +02:00
except Exception as e :
2022-05-24 18:24:16 +02: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 ] )
2022-10-13 07:18:08 +02:00
CustomSleep ( uniform ( 5 , 7 ) )
2022-06-09 14:34:02 +02:00
2022-04-14 23:03:16 +02:00
point = search ( ' availablePoints " :([ \ d]+) ' , driver . page_source ) [ 1 ]
2022-05-24 22:32:38 +02:00
return ( point )
2022-06-09 14:34:02 +02:00
for i in range ( 3 ) :
try :
points = get_points ( )
break
2022-04-14 23:03:16 +02:00
except Exception as e :
2022-06-09 14:34:02 +02:00
CustomSleep ( 300 )
if not points :
LogError ( f " impossible d ' avoir les points : { e } " )
2022-04-14 23:03:16 +02:00
CustomSleep ( uniform ( 3 , 20 ) )
account = account . split ( " @ " ) [ 0 ]
2022-02-17 13:40:37 +01:00
2022-10-11 21:40:41 +02:00
if DISCORD_ENABLED_SUCCESS :
2022-05-24 22:32:38 +02:00
2022-10-11 21:40:41 +02:00
if DISCORD_EMBED :
2022-05-24 22:32:38 +02:00
embed = discord . Embed (
2022-05-24 22:43:01 +02:00
title = f " { account } actuellement à { str ( points ) } points " , colour = Colour . green ( )
2022-05-24 22:32:38 +02:00
)
embed . set_footer ( text = account )
webhookSuccess . send ( embed = embed )
else :
2022-05-24 22:43:01 +02:00
webhookSuccess . send ( f " { account } actuellement à { str ( points ) } points " )
2021-12-22 14:01:58 +01:00
2022-05-24 22:32:38 +02:00
if sql_enabled :
2022-09-30 14:59:54 +02:00
add_to_database ( account , points , sql_host , sql_usr , sql_pwd , sql_database )
2021-12-22 14:01:58 +01:00
2022-10-10 16:27:14 +02:00
if CLAIM_AMAZON and int ( points ) > = 7500 :
2022-10-09 13:33:13 +02:00
claim_amazon ( )
2021-12-22 14:01:58 +01:00
2022-05-15 10:56:29 +02:00
def Fidelite ( ) :
2022-04-14 23:03:16 +02:00
try :
2022-05-15 10:36:26 +02:00
while 1 : #close all tabs
2022-04-14 23:03:16 +02:00
try :
2022-04-11 12:27:58 +02:00
Close ( 1 )
2022-04-14 23:03:16 +02:00
except :
2022-04-11 12:27:58 +02:00
break
2022-05-27 14:07:52 +02:00
try :
result = get ( FidelityLink ) #get the url of fidelity page
except Exception as e :
printf ( e )
2022-05-28 08:18:21 +02:00
result = False
2022-05-15 10:56:29 +02:00
2022-05-27 14:07:52 +02:00
if result :
lien = result . content . decode ( " UTF-8 " )
printf ( lien )
2022-05-15 10:56:29 +02:00
2022-05-27 14:07:52 +02:00
if ( lien . split ( " : " ) [ 0 ] == " https " ) or ( lien . split ( " : " ) [ 0 ] == " http " ) :
2022-05-15 10:36:26 +02:00
driver . get ( lien )
2022-06-09 14:36:51 +02:00
CustomSleep ( 5 )
try :
choix = driver . find_element ( By . CSS_SELECTOR , ' div[class= " pull-left spacer-48-bottom punchcard-row " ] ' ) # pull-left spacer-48-bottom punchcard-row? USELESS ?
except :
CustomSleep ( 300 )
choix = driver . find_element ( By . CSS_SELECTOR , ' div[class= " pull-left spacer-48-bottom punchcard-row " ] ' ) # pull-left spacer-48-bottom punchcard-row? USELESS ?
2022-05-27 14:07:52 +02:00
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 )
for i in range ( int ( nb [ 2 ] ) - int ( nb [ 1 ] ) ) :
driver . refresh ( )
CustomSleep ( 2 )
choix = driver . find_element ( By . CLASS_NAME , " spacer-48-bottom " )
2022-06-06 12:32:37 +02:00
try :
ButtonText = search ( ' <span class= " pull-left margin-right-15 " >([^<^>]+)</span> ' , choix . get_attribute ( " innerHTML " ) ) [ 1 ]
bouton = driver . find_element ( By . XPATH , f ' //span[text()= " { ButtonText } " ] ' )
bouton . click ( )
except Exception as e1 :
try :
t = driver . find_element ( By . XPATH , ' /html/body/div[1]/div[2]/main/div[2]/div[2]/div[7]/div[3]/div[1] ' )
t . click ( )
except Exception as e2 :
LogError ( f " fidélité - double erreur - e1 : { e1 } - e2 { e2 } " )
break
2022-05-27 14:07:52 +02:00
CustomSleep ( uniform ( 3 , 5 ) )
driver . switch_to . window ( driver . window_handles [ 1 ] )
TryPlay ( driver . title )
2022-06-06 12:32:37 +02:00
driver . get ( lien ) # USELESS ?
2022-05-27 14:07:52 +02:00
CustomSleep ( uniform ( 3 , 5 ) )
try :
Close ( driver . window_handles [ 1 ] )
except Exception as e :
printf ( e )
2022-09-30 14:45:53 +02:00
printf ( " fidelité - done " )
2022-05-27 14:07:52 +02:00
else :
printf ( " lien invalide " )
2022-04-14 23:03:16 +02:00
except Exception as e :
2021-12-22 14:01:58 +01:00
LogError ( " Fidélité " + str ( e ) )
2022-08-29 11:44:35 +02:00
def DailyRoutine ( custom = False ) :
if not custom :
MainWindows = login ( )
2022-08-29 11:48:05 +02:00
else :
MainWindows = " "
2022-06-09 14:34:02 +02:00
if MainWindows != " STOP " :
try :
AllCard ( )
except Exception as e :
2022-09-28 15:04:07 +02:00
LogError ( f " DailyRoutine - AllCard - \n { e } " )
2022-04-14 23:03:16 +02:00
2022-06-09 14:34:02 +02:00
try :
BingPcSearch ( )
except Exception as e :
2022-09-28 15:04:07 +02:00
LogError ( f " DailyRoutine - BingPcSearch - \n { e } " )
2022-06-09 14:34:02 +02:00
CustomSleep ( uniform ( 3 , 20 ) )
2022-05-18 19:07:25 +02:00
2022-06-02 12:29:17 +02:00
try :
2022-06-09 14:34:02 +02:00
Fidelite ( )
2022-06-02 12:29:17 +02:00
except Exception as e :
2022-06-10 07:07:46 +02:00
LogError ( f " DailyRoutine - Fidelité - \n { e } " )
try :
BingMobileSearch ( )
except Exception as e :
2022-09-28 15:04:07 +02:00
LogError ( f " DailyRoutine - BingMobileSearch - \n { e } " )
2022-06-09 14:34:02 +02:00
CustomSleep ( uniform ( 3 , 20 ) )
2022-04-14 23:03:16 +02:00
2022-06-09 14:34:02 +02:00
try :
LogPoint ( _mail )
except Exception as e :
2022-09-28 15:04:07 +02:00
LogError ( f " DailyRoutine - LogPoint - \n { e } " )
2022-06-09 14:34:02 +02:00
else :
2022-06-10 07:07:46 +02:00
LogError ( f " probleme de login sur le comte { _mail } " )
2021-12-22 14:01:58 +01:00
2021-12-29 13:32:16 +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-14 23:03:16 +02:00
2022-04-11 12:30:45 +02:00
def dev ( ) :
2022-06-17 07:10:32 +02:00
print ( check_ipv4 ( ) )
2021-12-22 14:01:58 +01:00
2022-04-14 23:03:16 +02:00
2022-02-14 16:48:57 +01:00
def CustomStart ( Credentials ) :
2022-09-23 15:13:14 +02:00
if not LINUX_HOST :
2022-08-29 11:44:35 +02:00
raise NameError ( ' You need to be on linux to do that, due to the utilisation of a module named enquieries, sorry. ' )
2022-02-14 16:48:57 +01:00
global driver
2022-02-14 16:55:07 +01:00
global _mail
global _password
2022-02-14 16:48:57 +01:00
2022-04-14 23:03:16 +02:00
ids = [ x [ 0 ] for x in Credentials ] # list of all email adresses
2022-05-15 10:56:29 +02:00
actions = [ " tout " , " daily " , " pc " , " mobile " , " LogPoint " , " Fidelite " , " dev " ]
2022-02-14 16:48:57 +01:00
2022-04-14 23:03:16 +02:00
system ( " clear " ) # clear from previous command to allow a clean choice
Comptes = enquiries . choose ( " quels comptes ? " , ids , multi = True )
Actions = enquiries . choose ( " quels Actions ? " , actions , multi = True )
2022-02-23 18:50:41 +01:00
2022-04-14 23:03:16 +02:00
for i in Comptes :
2022-02-23 18:50:41 +01:00
2022-04-14 23:03:16 +02:00
_mail = Credentials [ ids . index ( i ) ] [ 0 ]
2022-02-23 18:50:41 +01:00
_password = Credentials [ ids . index ( i ) ] [ 1 ]
2022-04-22 12:41:05 +02:00
driver = FirefoxDriver ( )
2022-06-09 14:19:34 +02:00
driver . implicitly_wait ( 10 )
2022-04-14 23:03:16 +02:00
2022-06-09 14:34:02 +02:00
if login ( ) != " STOP " :
if " tout " in Actions :
2022-08-29 11:44:35 +02:00
DailyRoutine ( True )
2022-02-23 18:50:41 +01:00
2022-06-09 14:34:02 +02:00
if " daily " in Actions :
try :
AllCard ( )
except Exception as e :
LogError ( f " AllCards - { e } -- override " )
2022-02-23 18:50:41 +01:00
2022-06-09 14:34:02 +02:00
if " pc " in Actions :
try :
BingPcSearch ( )
except Exception as e :
LogError ( f " il y a eu une erreur dans BingPcSearch, { e } -- override " )
2022-02-23 18:50:41 +01:00
2022-06-09 14:34:02 +02:00
if " mobile " in Actions :
try :
BingMobileSearch ( )
except Exception as e :
LogError ( f " BingMobileSearch - { e } -- override " )
2022-02-23 18:50:41 +01:00
2022-06-09 14:34:02 +02:00
if " Fidelite " in Actions :
try :
Fidelite ( )
except Exception as e :
LogError ( f " Fidelite - { e } -- override " )
2022-02-23 18:50:41 +01:00
2022-06-09 14:34:02 +02:00
if " dev " in Actions :
try :
dev ( )
except Exception as e :
printf ( e )
break
2022-09-30 15:05:58 +02:00
2022-09-30 15:07:34 +02:00
if not " tout " in Actions :
2022-09-30 15:05:18 +02:00
try :
LogPoint ( _mail )
except Exception as e :
print ( " CustomStart " + str ( e ) )
2022-02-23 19:02:24 +01:00
driver . close ( )
2022-02-23 18:50:41 +01:00
2022-04-14 23:03:16 +02:00
2022-09-23 15:13:14 +02:00
with open ( CREDENTIALS_PATH ) as f :
2021-12-22 14:01:58 +01:00
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-09-23 15:13:14 +02:00
if CUSTOM_START :
2022-02-14 16:48:57 +01:00
CustomStart ( Credentials )
2022-04-14 23:03:16 +02:00
else :
2022-10-09 13:33:13 +02:00
for _mail , _password in Credentials :
2022-05-18 18:50:04 +02:00
system ( " pkill -9 firefox " )
2022-04-14 23:03:16 +02:00
print ( " \n \n " )
2022-02-14 16:48:57 +01:00
print ( _mail )
CustomSleep ( 1 )
2022-09-28 15:04:07 +02:00
printf ( " début du driver " )
2022-04-22 12:41:05 +02:00
driver = FirefoxDriver ( )
2022-03-28 16:55:35 +02:00
printf ( " driver demarré " )
2022-04-11 12:48:22 +02:00
driver . implicitly_wait ( 7 )
2021-12-22 14:01:58 +01:00
2022-04-14 23:03:16 +02:00
try :
2021-12-22 17:01:00 +01:00
DailyRoutine ( )
driver . quit ( )
2022-04-18 09:25:51 +02:00
attente = uniform ( 1200 , 3600 )
2022-09-30 14:34:50 +02:00
printf ( f " finis. attente de { round ( attente / 60 ) } min " )
2022-04-18 09:25:51 +02:00
CustomSleep ( attente )
2022-02-23 17:33:44 +01:00
2022-04-14 23:03:16 +02:00
except KeyboardInterrupt :
print ( " canceled " )
2021-12-23 13:05:16 +01:00
close ( )