OMG I tested before commiting. (btw cookies login is now implemented)

This commit is contained in:
piair 2023-03-25 18:14:41 +01:00
parent 6fefaca00a
commit db4ab3bf90
1 changed files with 96 additions and 98 deletions

194
V5.py
View File

@ -18,7 +18,7 @@ from selenium.webdriver.support.ui import Select
from pyotp import TOTP
from pyvirtualdisplay import Display
from pyvirtualdisplay.smartdisplay import SmartDisplay
import pickle
from modules.db import add_to_database
from modules.config import *
@ -37,10 +37,17 @@ def printf(e, f = ""):
# TODO
# handle "panda"'s error: error while logging in preventing some task to be done
# check that each card worked (lot of misses lately) -- test that -- don't crash at least
# add date and account before print
custom_sleep = CustomSleep
def save_cookies():
pickle.dump(driver.get_cookies(), open(f"{'/'.join(__file__.split('/')[:-1])}/user_data/cookies/{_mail}.pkl", "wb"))
def load_cookies(driver):
cookies = pickle.load(open(f"{'/'.join(__file__.split('/')[:-1])}/user_data/cookies/{_mail}.pkl", "rb"))
for cookie in cookies:
driver.add_cookie(cookie)
def log_error(error, ldriver=driver, log=FULL_LOG):
global driver
@ -73,6 +80,7 @@ def log_error(error, ldriver=driver, log=FULL_LOG):
webhookFailure.send(embed=embed, file=file)
webhookFailure.send(file=discord.File("page.html"))
# Wait for the presence of the element identifier or [timeout]s
def wait_until_visible(search_by: str, identifier: str, timeout = 20, browser = driver) -> None:
try :
@ -123,11 +131,9 @@ def firefox_driver(mobile=False, Headless=False):
options.set_preference("general.useragent.override", PC_USER_AGENT)
driver = webdriver.Firefox(options=options)
driver.set_window_size(1900 + hash(_mail)%20 , 1070 + hash(_password + "salt")%10)
return(driver)
# close the tab currently on and go back to the one first, or the one specified
def close_tab(tab, SwitchTo=0) -> None:
driver.switch_to.window(tab)
@ -136,7 +142,7 @@ def close_tab(tab, SwitchTo=0) -> None:
#Deal with rgpd popup as well as some random popup like 'are you satisfied' one
def rgpd_popup() -> None:
def rgpd_popup(driver) -> None:
for i in ["bnp_btn_accept", "bnp_hfly_cta2", "bnp_hfly_close"] :
try:
driver.find_element(By.ID, i).click()
@ -150,7 +156,7 @@ def play_quiz2(override=10) -> None:
printf("starting play_quiz2")
for j in range(override):
try:
rgpd_popup()
rgpd_popup(driver)
custom_sleep(uniform(3, 5))
page_html = driver.page_source
secret_answer = search('IG:"([^"]+)"', page_html)[1] # variable used to calculate offset
@ -184,7 +190,7 @@ def play_quiz8():
printf(f"play_quiz8 : start, override : {override}")
try:
counter = 0
rgpd_popup()
rgpd_popup(driver)
for _ in range(override):
custom_sleep(uniform(3, 5))
correct_answers = []
@ -210,7 +216,7 @@ def play_quiz8():
answer_elem = driver.find_element(By.ID, answer_id)
answer_elem.click()
except ElementClickInterceptedException :
rgpd_popup()
rgpd_popup(driver)
correct_answers.append(answer_id)
except Exception as e:
@ -231,7 +237,7 @@ def play_quiz4(override=None):
for i in range(override):
custom_sleep(uniform(3, 5))
txt = driver.page_source
rgpd_popup()
rgpd_popup(driver)
answer_option = search('correctAnswer":"([^"]+)', txt)[1]
answer_option = answer_option.replace("\\u0027", "'") # replace Unicode weird symbols
try:
@ -309,7 +315,6 @@ def all_cards():
except Exception as e:
log_error(e)
def weekly_cards():
try:
driver.find_element(
@ -342,7 +347,6 @@ def all_cards():
except:
break
def top_cards():
for _ in range(10):
try :
@ -370,7 +374,7 @@ def all_cards():
# Find out which type of action to do
def try_play(nom="inconnu"):
rgpd_popup()
rgpd_popup(driver)
printf("try_play en cours")
def play(number):
@ -411,7 +415,7 @@ def try_play(nom="inconnu"):
if "bt_PollRadio" in driver.page_source:
try:
printf("Poll detected")
rgpd_popup()
rgpd_popup(driver)
do_poll()
printf("Poll succeeded")
except Exception as e:
@ -427,92 +431,104 @@ def try_play(nom="inconnu"):
elif search("([0-9]) de ([0-9]) finalisée", driver.page_source):
print("fidélité")
rgpd_popup()
rgpd_popup(driver)
fidelity()
else:
printf(f"rien à faire sur la page {nom}")
rgpd_popup()
rgpd_popup(driver)
custom_sleep(uniform(3, 5))
# login() tries to login to your Microsoft account.
# it uses global variable _mail and _password to login
def login():
global driver
def sub_login():
printf("sub_login : start")
driver.get("https://login.live.com")
def login(ldriver):
def pwd_login():
printf("pwd_login : start")
ldriver.get("https://login.live.com")
custom_sleep(2)
wait_until_visible(By.ID, "i0116", browser = driver)
mail_elem = driver.find_element(By.ID, "i0116")
wait_until_visible(By.ID, "i0116", browser = ldriver)
mail_elem = ldriver.find_element(By.ID, "i0116")
send_keys_wait(mail_elem, _mail)
mail_elem.send_keys(Keys.ENTER)
custom_sleep(2)
wait_until_visible(By.ID, "i0118", browser = driver)
pwd_elem = driver.find_element(By.ID, "i0118")
wait_until_visible(By.ID, "i0118", browser = ldriver)
pwd_elem = ldriver.find_element(By.ID, "i0118")
send_keys_wait(pwd_elem, _password)
pwd_elem.send_keys(Keys.ENTER)
custom_sleep(2)
if "Entrez le code de sécurité" in driver.page_source :
if "Entrez le code de sécurité" in ldriver.page_source :
try :
a2f_elem = driver.find_element(By.ID, "idTxtBx_SAOTCC_OTC")
a2f_elem = ldriver.find_element(By.ID, "idTxtBx_SAOTCC_OTC")
a2f_elem.send_keys(_otp.now())
a2f_elem.send_keys(Keys.ENTER)
except Exception as e :
log_error(e)
custom_sleep(5)
if ('Abuse' in driver.current_url) :
if ('Abuse' in ldriver.current_url) :
log_error("account suspended")
raise Banned()
save_cookies()
for id in ["KmsiCheckboxField","iLooksGood", "idSIButton9", "iCancel"]:
try:
driver.find_element(By.ID, id).click()
ldriver.find_element(By.ID, id).click()
restart = True
except Exception as e:
pass
try :
body_elem = driver.find_element(By.TAG_NAME, "body") # in case of any random popup
body_elem = ldriver.find_element(By.TAG_NAME, "body") # in case of any random popup
body_elem.send_keys(Keys.ENTER)
except :
pass
printf("login completed - going to MsRewards")
custom_sleep(uniform(3,5))
driver.get("https://www.bing.com/rewardsapp/flyout")
ldriver.get("https://www.bing.com/rewardsapp/flyout")
custom_sleep(uniform(3,5))
for i in [f'[title="Rejoindre maintenant"]', f'[title="Rejoindre"]', f'[title="Join now"]'] :
try:
driver.find_element(By.CSS_SELECTOR, i).click() # depend of the language of the page
ldriver.find_element(By.CSS_SELECTOR, i).click() # depend of the language of the page
except:
print(f"element {i} not found")
rgpd_popup()
rgpd_popup(ldriver)
custom_sleep(uniform(3,5))
driver.get("https://www.bing.com/rewardsapp/flyout")
ldriver.get("https://www.bing.com/rewardsapp/flyout")
try:
driver.find_element(By.CSS_SELECTOR, '[title="Rejoindre maintenant"]').click() # depend of the language of the page
ldriver.find_element(By.CSS_SELECTOR, '[title="Rejoindre maintenant"]').click() # depend of the language of the page
except:
print(f"unlock test: fail, probably normal")
print('on MsRewards')
for _ in range(3) :
def cookie_login():
ldriver.get("https://login.live.com")
try :
sub_login()
return (driver.current_window_handle)
except Banned:
raise Banned()
except Exception as e:
log_error(e)
driver.quit()
custom_sleep(1200)
driver = firefox_driver()
return("STOP")
load_cookies(ldriver)
except FileNotFoundError :
print("Creating cookies file")
ldriver.refresh()
CustomSleep(10)
if ("account.microsoft.com" in ldriver.current_url) :
ldriver.get("https://bing.com")
rgpd_popup(ldriver)
ldriver.get("https://www.bing.com/rewardsapp/flyout")
return(True)
return(False)
try :
if cookie_login():
return (ldriver.current_window_handle)
pwd_login()
return(ldriver.current_window_handle)
except Banned:
raise Banned()
except Exception as e:
log_error(e)
ldriver.quit()
# Makes 30 search as PC Edge
@ -520,7 +536,7 @@ def bing_pc_search(override=randint(35, 40)):
mot = choice(Liste_de_mot).replace(" ","+")
driver.get(f"https://www.bing.com/search?q={mot}") # {choice(Liste_de_mot)}')
custom_sleep(uniform(1, 2))
rgpd_popup()
rgpd_popup(driver)
send_keys_wait(
driver.find_element(By.ID, "sb_form_q"),
Keys.BACKSPACE + Keys.BACKSPACE + Keys.BACKSPACE + Keys.BACKSPACE + Keys.BACKSPACE + Keys.BACKSPACE
@ -695,13 +711,13 @@ def fidelity():
log_error(e)
def mobile_login(error):
def mobile_login_pwd(error):
try:
# TODO
# seems fine, check if there are no issues
# seems fine, check if there are no issues NO
mot = choice(Liste_de_mot).replace(" ","+")
mobile_driver.get(f"https://www.bing.com/search?q={mot}")
mobile_rgpd()
rgpd_popup(mobile_driver)
printf("start of Mobile login")
try :
mobile_driver.find_element(By.ID, "mHamburger").click()
@ -742,21 +758,13 @@ def mobile_login(error):
if error <= 3:
printf(f"failure on mobile_login. Retrying({error}/3), {e}")
custom_sleep(uniform(5, 10))
mobile_login(error)
mobile_login_pwd(error)
else:
log_error(f"login impossible 3 fois de suite. {e}", mobile_driver)
mobile_driver.quit()
return(True)
def mobile_rgpd():
for id in ["bnp_btn_accept", "bnp_hfly_cta2"]:
try:
mobile_driver.find_element(By.ID, id).click()
except Exception:
pass
def mobile_alert_popup():
try:
alert = mobile_driver.switch_to.alert
@ -768,27 +776,30 @@ def mobile_alert_popup():
def bing_mobile_search(override=randint(22, 25)):
print(1)
global mobile_driver
mobile_driver = firefox_driver(mobile=True)
try:
if not mobile_login(0):
custom_sleep(uniform(1, 2))
mobile_rgpd()
custom_sleep(uniform(1, 1.5))
for i in range(override): # 20
try :
mot = choice(Liste_de_mot)
send_keys_wait(mobile_driver.find_element(By.ID, "sb_form_q"), mot)
mobile_driver.find_element(By.ID, "sb_form_q").send_keys(Keys.ENTER)
custom_sleep(uniform(5, 20))
mobile_alert_popup() # check for alert (asking for position or for allowing notifications)
mobile_driver.find_element(By.ID, "sb_form_q").clear()
except :
driver.refresh()
custom_sleep(30)
i -= 1
mobile_driver.quit()
login(mobile_driver)
mot = choice(Liste_de_mot).replace(" ","+")
mobile_driver.get(f"https://www.bing.com/search?q={mot}")
custom_sleep(uniform(1, 2))
rgpd_popup(mobile_driver)
custom_sleep(uniform(1, 1.5))
for i in range(override): # 20
try :
mot = choice(Liste_de_mot)
send_keys_wait(mobile_driver.find_element(By.ID, "sb_form_q"), mot)
mobile_driver.find_element(By.ID, "sb_form_q").send_keys(Keys.ENTER)
custom_sleep(uniform(5, 20))
mobile_alert_popup() # check for alert (asking for position or for allowing notifications)
mobile_driver.find_element(By.ID, "sb_form_q").clear()
except Exception as e:
print(e)
mobile_driver.refresh()
custom_sleep(30)
i -= 1
mobile_driver.quit()
except Exception as e:
log_error(e, mobile_driver)
@ -798,7 +809,7 @@ def bing_mobile_search(override=randint(22, 25)):
def daily_routine(custom = False):
try :
if not custom: # custom already login
login()
login(driver)
except Banned :
log_error("THIS ACCOUNT IS BANNED. FIX THIS ISSUE WITH -U")
return()
@ -854,41 +865,35 @@ def CustomStart(Credentials):
driver = firefox_driver()
driver.implicitly_wait(3)
if login() != "STOP":
if login(driver) != "STOP":
if "tout" in Actions:
daily_routine(True)
if "daily" in Actions:
try:
all_cards()
except Exception as e:
log_error(e)
if "pc" in Actions:
try:
bing_pc_search()
except Exception as e:
log_error(e)
if "mobile" in Actions:
try:
bing_mobile_search()
except Exception as e:
log_error(e)
if "fidelity" in Actions:
try :
fidelity()
except Exception as e :
log_error(e)
if "dev" in Actions:
try:
dev()
except Exception as e:
printf(e)
break
if not "tout" in Actions:
try:
log_points(_mail)
@ -912,13 +917,11 @@ def SavePointsFromFile(file):
for item in points_list:
compte, points = item[0], item[1]
add_to_database(compte, points, sql_host,sql_usr,sql_pwd,sql_database, save_if_fail=False)
with open(file, "w") as f:
f.write("")
if VNC_ENABLED :
display = SmartDisplay(backend="xvnc", size=(2160, 2160), rfbport=VNC_PORT, color_depth=24)
else :
@ -932,12 +935,11 @@ elif UNBAN:
_mail, _password = select_accounts(False)[0]
driver = firefox_driver()
try :
login()
login(driver)
except Banned:
unban()
driver.quit()
elif POINTS_FILE != "":
SavePointsFromFile(POINTS_FILE)
else:
@ -946,7 +948,6 @@ else:
_password = cred[1]
if len(cred) == 3:
_otp = TOTP(cred[2])
print("\n\n")
print(_mail)
custom_sleep(1)
@ -954,14 +955,12 @@ else:
driver = firefox_driver()
printf("driver demarré")
driver.implicitly_wait(3)
try:
daily_routine()
driver.quit()
attente = uniform(1200, 3600)
printf(f"finis. attente de {round(attente/60)}min")
custom_sleep(attente)
except KeyboardInterrupt:
print("canceled. Closing driver and display.")
driver.quit()
@ -970,5 +969,4 @@ else:
print(f"error not catch. skipping this account. {e}")
driver.quit()
display.stop()