-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathkeep-mega-active.py
112 lines (85 loc) · 3.26 KB
/
keep-mega-active.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
# pip install playwright
# playwright install firefox
# pip install python-dotenv
"""
Ensure that Home page is set to "Recents" in Settings
before executing this script
"""
import sys
sys.dont_write_bytecode = True
import os
from playwright.sync_api import sync_playwright, TimeoutError
from logging_formatter import Year
from login_logger import LoginLogger
from log_concat import update_logs
from dotenv import load_dotenv
import json
load_dotenv()
# ----------------------------------- #
# Pulling Mega.NZ login credentials from GitHub secrets
# {user1: password1, user2: password2, user3: password3}
# Converting JSON string to python dictionary,
# will be looped through
cred_dict = json.loads(os.getenv("MEGA"))
mega = "https://mega.nz"
mega_signin = mega + "/login"
mega_usr_sel = "input#login-name2"
mega_pwd_sel = "input#login-password2"
mega_homepage = "https://mega.nz/fm/recents"
def mkfilename(a):
filename = f"[{Year}] {a} log.csv"
return filename
#
# ----------------------------------- #
# =================================== #
# Optional scraper script
#
def query_mega_storage(instance):
page = instance.tab
logger = instance.logger
page.wait_for_selector("div.account.left-pane.info-block.backup-button")
# page.wait_for_load_state("networkidle")
name = page.query_selector("div.membership-big-txt.name").inner_text()
page.wait_for_selector("div.account.membership-plan")
email = page.query_selector("div.membership-big-txt.email").inner_text()
plan = page.query_selector("div.account.membership-plan").inner_text()
logger.info(f"Getting storage details from '{instance.dashboard_url}'")
logger.debug(f"Profile name: {name}")
logger.debug(f"Email: {email}")
logger.debug(f"Plan: {plan}")
storage_categories = page.query_selector_all("div.account.item-wrapper")
for category in storage_categories:
name = category.query_selector("div.account.progress-title > span").inner_text()
num = category.query_selector("div.account.progress-size.small").inner_text()
logger.debug(f"{name}: {num}")
#
# =================================== #
def mega_login(instance):
# Browser session to generate new csv log file
with sync_playwright() as pw:
logger = instance.logger
instance.one_step_login(pw, "#login_form > button")
instance.redirect(button_sel="div[name*=dashboard][aria-role=button]")
query_mega_storage(instance)
logger.info("Tasks complete. Closing browser")
# Remove FileHandlder to prevent reopening the previous instance's file in the next instance
# due to the Class Variable getting recreated during "self.logger.addHandler(self.DuoHandler)"
logger.removeHandler(instance.DuoHandler)
# Close csv file in current instance when done with writing logs
instance.formatter.csvfile.close()
if __name__ == "__main__":
i = 1
for user in cred_dict:
instance = LoginLogger(
base_url=mega,
login_url=mega_signin,
usr_sel=mega_usr_sel,
usr=user,
pwd_sel=mega_pwd_sel,
pwd=cred_dict[user],
homepage=mega_homepage,
filename=mkfilename(f"mega_{i}"),
)
mega_login(instance)
update_logs(instance)
i += 1