-
Notifications
You must be signed in to change notification settings - Fork 41
/
Copy pathutils.py
121 lines (82 loc) · 2.9 KB
/
utils.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
113
114
115
116
117
118
119
120
121
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
__author__ = "ipetrash"
import logging
import os.path
import sys
import random
import time
from pathlib import Path
from threading import Thread
# pip install selenium
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.firefox.options import Options
TOKEN = Path(__file__).resolve().parent / "TOKEN"
LOGIN, PASSWORD = TOKEN.read_text().splitlines()
URL = "https://mgn-city.ru/"
def get_logger(name=__file__):
log = logging.getLogger(name)
log.setLevel(logging.DEBUG)
formatter = logging.Formatter("[%(asctime)s] %(message)s")
sh = logging.StreamHandler(stream=sys.stdout)
sh.setFormatter(formatter)
log.addHandler(sh)
return log
log = get_logger()
def get_driver(headless=False) -> webdriver.Firefox:
options = Options()
if headless:
options.add_argument("--headless")
profile_directory = r"%AppData%\Mozilla\Firefox\Profiles\fnlm82kd.default-release"
profile_directory = os.path.expandvars(profile_directory)
driver = webdriver.Firefox(firefox_profile=profile_directory, options=options)
# driver.implicitly_wait(5) # seconds
return driver
def open_web_page_water_meter(value_cold: int, value_hot: int) -> tuple[bool, str]:
value_cold = str(value_cold)
value_hot = str(value_hot)
driver = get_driver()
driver.get(URL)
log.info(f"Title: {driver.title!r}")
while True:
time.sleep(5)
try:
driver.find_element(By.CSS_SELECTOR, ".profile-username")
break
except Exception:
# TODO: delete
# raise Exception('Похоже, нужно авторизоваться!')
print("Похоже, нужно авторизоваться!")
url = "https://mgn-city.ru/SN/YourIndications"
driver.get(url)
log.info(f"Title: {driver.title!r}")
time.sleep(5)
input_cold = driver.find_element(
By.CSS_SELECTOR, 'input[data-service="Холодное водоснабжение"]'
)
input_cold.send_keys(value_cold)
input_hot = driver.find_element(
By.CSS_SELECTOR, 'input[data-service="ГВС (компонент х/в)"]'
)
input_hot.send_keys(value_hot)
return True, ""
def run_auto_ping_logon():
prefix = run_auto_ping_logon.__name__
def run():
while True:
try:
driver = get_driver(headless=True)
driver.get(URL)
log.info(f"[{prefix}] Title: {driver.title!r}")
driver.quit()
except Exception as e:
log.info(f"[{prefix}] Error: {e}")
time.sleep(60)
continue
# Between 3 - 6 hours
time.sleep(random.randint(3 * 3600, 6 * 3600))
thread = Thread(target=run)
thread.start()
if __name__ == "__main__":
open_web_page_water_meter(123, 456)