xync-client 0.0.43.dev35__tar.gz → 0.0.43.dev41__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {xync_client-0.0.43.dev35/xync_client.egg-info → xync_client-0.0.43.dev41}/PKG-INFO +1 -1
- xync_client-0.0.43.dev41/xync_client/Pms/Alfa/__init__.py +102 -0
- xync_client-0.0.43.dev41/xync_client/Pms/Alfa/state.json +1 -0
- xync_client-0.0.43.dev41/xync_client/Pms/Sber/__init__.py +79 -0
- xync_client-0.0.43.dev41/xync_client/Pms/Tinkoff/__init__.py +88 -0
- xync_client-0.0.43.dev41/xync_client/Pms/Tinkoff/state.json +1 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/Pms/Volet/__init__.py +28 -43
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41/xync_client.egg-info}/PKG-INFO +1 -1
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client.egg-info/SOURCES.txt +3 -3
- xync_client-0.0.43.dev35/xync_client/Pms/Tinkoff/__init__.py +0 -89
- xync_client-0.0.43.dev35/xync_client/Pms/Tinkoff/state.json +0 -1
- xync_client-0.0.43.dev35/xync_client/Pms/Tinkoff/storage.json +0 -0
- xync_client-0.0.43.dev35/xync_client/pg_storage.py +0 -276
- xync_client-0.0.43.dev35/xync_client/pyro.py +0 -121
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/.env.sample +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/.gitignore +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/.pre-commit-config.yaml +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/README.md +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/makefile +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/pyproject.toml +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/setup.cfg +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/tests/TestAgent.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/tests/TestAsset.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/tests/TestEx.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/tests/TestOrder.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/tests/_todo_refact/Binance/test_binance.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/tests/_todo_refact/Bybit/test_bybit.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/tests/_todo_refact/Bybit/test_bybit_p2p.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/tests/_todo_refact/Gate/test_gate.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/tests/_todo_refact/Htx/test_htx_p2p.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/tests/_todo_refact/Wallet/test_agent.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/tests/_todo_refact/Wallet/test_ex.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/tests/_todo_refact/__init__.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/tests/_todo_refact/_test_ex.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/Abc/Agent.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/Abc/Asset.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/Abc/AuthTrait.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/Abc/Base.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/Abc/BaseTest.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/Abc/Ex.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/Abc/InAgent.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/Abc/Order.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/Abc/types.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/Binance/__init__.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/Binance/binance_async.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/Binance/earn_api.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/Binance/etype/ad.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/Binance/etype/pm.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/Binance/ex.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/Binance/exceptions.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/Binance/sapi.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/Binance/web_c2c.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/BingX/__init__.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/BingX/agent.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/BingX/base.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/BingX/etype/ad.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/BingX/etype/pm.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/BingX/ex.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/BingX/req.mjs +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/BingX/sign.js +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/BitGet/__init__.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/BitGet/agent.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/BitGet/etype/ad.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/BitGet/ex.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/BitGet/req.mjs +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/BitPapa/ex.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/Bybit/InAgent.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/Bybit/agent.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/Bybit/etype/ad.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/Bybit/etype/cred.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/Bybit/etype/order.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/Bybit/ex.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/Bybit/web_earn.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/Bybit/web_p2p.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/Bybit/ws.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/Gate/etype/ad.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/Gate/ex.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/Gate/premarket.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/Htx/agent.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/Htx/earn.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/Htx/etype/__init__.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/Htx/etype/ad.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/Htx/etype/cred.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/Htx/etype/pm.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/Htx/etype/test.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/Htx/ex.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/KuCoin/etype/ad.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/KuCoin/etype/pm.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/KuCoin/ex.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/KuCoin/web.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/Mexc/etype/ad.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/Mexc/etype/pm.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/Mexc/ex.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/Okx/etype/ad.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/Okx/etype/pm.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/Okx/ex.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/Pms/Volet/_todo_req/req.mjs +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/Pms/Volet/_todo_req/req.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/Pms/Volet/api.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/TgWallet/agent.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/TgWallet/asset.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/TgWallet/auth.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/TgWallet/ex.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/TgWallet/inAgent.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/TgWallet/order.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/TgWallet/pyd.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/TgWallet/pyro.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/TgWallet/web.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/__init__.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/loader.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client/pm_unifier.py +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client.egg-info/dependency_links.txt +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client.egg-info/requires.txt +0 -0
- {xync_client-0.0.43.dev35 → xync_client-0.0.43.dev41}/xync_client.egg-info/top_level.txt +0 -0
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
|
|
3
|
+
from playwright.async_api import async_playwright
|
|
4
|
+
from playwright._impl._errors import TimeoutError
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
async def main():
|
|
8
|
+
async with async_playwright() as p:
|
|
9
|
+
browser = await p.chromium.launch(
|
|
10
|
+
channel="chrome",
|
|
11
|
+
headless=False,
|
|
12
|
+
timeout=5000,
|
|
13
|
+
args=[
|
|
14
|
+
"--disable-blink-features=AutomationControlled",
|
|
15
|
+
"--no-sandbox",
|
|
16
|
+
"--disable-web-security",
|
|
17
|
+
"--disable-infobars",
|
|
18
|
+
"--disable-extensions",
|
|
19
|
+
"--start-maximized",
|
|
20
|
+
],
|
|
21
|
+
)
|
|
22
|
+
context = await browser.new_context(storage_state="state.json")
|
|
23
|
+
page = await context.new_page()
|
|
24
|
+
await page.goto("https://web.alfabank.ru/dashboard")
|
|
25
|
+
await page.wait_for_timeout(1000)
|
|
26
|
+
try:
|
|
27
|
+
await page.wait_for_url("https://web.alfabank.ru/dashboard")
|
|
28
|
+
await page.wait_for_timeout(1000)
|
|
29
|
+
# Новый пользователь
|
|
30
|
+
except TimeoutError:
|
|
31
|
+
await page.locator('[data-test-id="phoneInput-form-control-inner"] [data-test-id="phoneInput"]').fill(
|
|
32
|
+
"79680252000"
|
|
33
|
+
)
|
|
34
|
+
await page.wait_for_timeout(1000)
|
|
35
|
+
await page.locator("span", has_text="Вперёд").click(delay=500)
|
|
36
|
+
await page.locator('[data-test-id="card-account-input"]').fill("2200150913416522")
|
|
37
|
+
await page.locator('[data-test-id="card-account-continue-button"]').click()
|
|
38
|
+
await page.locator(
|
|
39
|
+
'[class*=confirmation__component] [class*=code-input] [autocomplete="one-time-code"]'
|
|
40
|
+
).fill(input("Введите код"))
|
|
41
|
+
await page.wait_for_timeout(500)
|
|
42
|
+
if await page.locator('[data-test-id="trust-device-page-submit-btn"]').is_visible():
|
|
43
|
+
await page.locator('[data-test-id="trust-device-page-submit-btn"]').click()
|
|
44
|
+
await page.locator('[data-test-id="new-password"]').click()
|
|
45
|
+
await page.locator('[data-test-id="new-password"]').fill("0909")
|
|
46
|
+
await page.locator('[data-test-id="new-password-again"]').click()
|
|
47
|
+
await page.locator('[data-test-id="new-password-again"]').fill("0909")
|
|
48
|
+
await page.locator('[data-test-id="submit-button"]').click()
|
|
49
|
+
await page.context.storage_state(path="state.json")
|
|
50
|
+
|
|
51
|
+
# Переходим на сбп и вводим данные получателя
|
|
52
|
+
# await page.locator(
|
|
53
|
+
# '[data-qa-type="desktop-ib-pay-buttons"] [data-qa-type="atomPanel pay-card-0"]',
|
|
54
|
+
# has_text="Перевести по телефону",
|
|
55
|
+
# ).click()
|
|
56
|
+
# await page.locator('[data-qa-type="recipient-input.value.placeholder"]').click()
|
|
57
|
+
# await page.wait_for_timeout(300)
|
|
58
|
+
# await page.locator('[data-qa-type="recipient-input.value.input"]').fill("9992259898")
|
|
59
|
+
# await page.locator('[data-qa-type="amount-from.placeholder"]').click()
|
|
60
|
+
# await page.locator('[data-qa-type="amount-from.input"]').fill("100")
|
|
61
|
+
# await page.wait_for_timeout(300)
|
|
62
|
+
# await page.locator('[data-qa-type="bank-plate-other-bank click-area"]').click()
|
|
63
|
+
# await page.locator('[data-qa-type*="inputAutocomplete.value.input"]').click()
|
|
64
|
+
# await page.locator('[data-qa-type*="inputAutocomplete.value.input"]').fill("Озон")
|
|
65
|
+
# await page.wait_for_timeout(300)
|
|
66
|
+
# await page.locator('[data-qa-type="banks-popup-list"]').click()
|
|
67
|
+
# await page.locator('[data-qa-type="transfer-button"]').click()
|
|
68
|
+
|
|
69
|
+
# Проверка последнего платежа
|
|
70
|
+
# try:
|
|
71
|
+
# await page.goto("https://www.tbank.ru/events/feed")
|
|
72
|
+
# except Error:
|
|
73
|
+
# await page.wait_for_timeout(1000)
|
|
74
|
+
# await page.goto("https://www.tbank.ru/events/feed")
|
|
75
|
+
# await page.wait_for_timeout(2000)
|
|
76
|
+
# await page.locator('[data-qa-type = "timeline-operations-list"]:last-child').scroll_into_view_if_needed()
|
|
77
|
+
# transactions = await page.locator(
|
|
78
|
+
# '[data-qa-type="timeline-operations-list"] [data-qa-type="operation-money"]'
|
|
79
|
+
# ).all_text_contents()
|
|
80
|
+
# result = recursion_payments(100, transactions)
|
|
81
|
+
# if result == 100:
|
|
82
|
+
# print("Платеж", result, "получен")
|
|
83
|
+
# else:
|
|
84
|
+
# print("Ничегошеньки нет")
|
|
85
|
+
# await page.wait_for_timeout(3000)
|
|
86
|
+
await context.close()
|
|
87
|
+
# await page.video.path()
|
|
88
|
+
# BufferedInputFile(pth, 'tbank')
|
|
89
|
+
# await bot.send_video('mixartemev')
|
|
90
|
+
...
|
|
91
|
+
await browser.close()
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def recursion_payments(amount: int, transactions: list):
|
|
95
|
+
tran = transactions.pop(0)
|
|
96
|
+
normalized_tran = tran.replace("−", "-").replace(",", ".")
|
|
97
|
+
if 0 > int(float(normalized_tran)) != amount:
|
|
98
|
+
return recursion_payments(amount, transactions)
|
|
99
|
+
return int(float(tran.replace("−", "-").replace(",", ".")))
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
asyncio.run(main())
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"cookies": [{"name": "capsLockPushed", "value": "false", "domain": "private.auth.alfabank.ru", "path": "/passport/cerberus-mini-blue/dashboard-blue", "expires": 1778487847, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "access_token", "value": "eyJhbGciOiJIUzI1NiJ9.eyJzZXNzaW9uX3Rva2VuIjoiYWMxYjAyYzctYThmNC0zZWI0LTg1MzUtMjM3YzBmNjU4YmRmIiwiaXNzIjoiY2VyYmVydXMtbWluaSIsInNlc3Npb25fY2xpZW50IjoibmV3Y2xpY2std2ViIiwic3ViIjoiYWMxYjAyYzctYThmNC0zZWI0LTg1MzUtMjM3YzBmNjU4YmRmIiwianRpIjoiNmM5ZDc4ZTllNmZkNDBkNThjYjUwNTAxNDVkYTQ5YWQifQ.zFmw9TGaq4-tFNyRude0fycVHHqjgygEBkQkNjdi4Hs", "domain": "private.auth.alfabank.ru", "path": "/passport", "expires": 1767687997.168728, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "cross_auth_token", "value": "eyJhbGciOiJIUzI1NiJ9.eyJzZXNzaW9uX3Rva2VuIjoiYWMxYjAyYzctYThmNC0zZWI0LTg1MzUtMjM3YzBmNjU4YmRmIiwiaXNzIjoiY2VyYmVydXMtbWluaSIsInNlc3Npb25fY2xpZW50IjoibmV3Y2xpY2std2ViIiwic3ViIjoiYWMxYjAyYzctYThmNC0zZWI0LTg1MzUtMjM3YzBmNjU4YmRmIiwianRpIjoiNmM5ZDc4ZTllNmZkNDBkNThjYjUwNTAxNDVkYTQ5YWQifQ.zFmw9TGaq4-tFNyRude0fycVHHqjgygEBkQkNjdi4Hs", "domain": ".auth.alfabank.ru", "path": "/passport", "expires": 1767687997.168805, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "XSRF-TOKEN", "value": "dd7ce66e-0b13-4bdb-9e10-67c70520e4ef", "domain": "web.alfabank.ru", "path": "/", "expires": -1, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "__zzatw-alfabank-retail", "value": "MDA0dBA=Fz2+aQ==", "domain": ".private.auth.alfabank.ru", "path": "/", "expires": 1778487995, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "__zzatw-alfabank-retail", "value": "MDA0dBA=Fz2+aQ==", "domain": ".auth.alfabank.ru", "path": "/", "expires": 1778487995, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "_sp_ses.3c2b", "value": "*", "domain": ".alfabank.ru", "path": "/", "expires": 1746953842, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "__alfa_uid", "value": "215a0cbd-166f-4b34-889d-cfb41432459c", "domain": "metrics.alfabank.ru", "path": "/", "expires": 1778488042.869225, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "passport_session_id", "value": "a6a13b54-78fe-4146-b0c0-9033f4efc269", "domain": ".alfabank.ru", "path": "/", "expires": -1, "httpOnly": false, "secure": true, "sameSite": "Lax"}, {"name": "cfidsw-alfabank-retail", "value": "gByg8Td5MgEvwzJDwItXuU78OzWRBFa1CPNKrHpfFEsp5jsJ4ecdrYV46AboZL+kj7bv7sKMciLs6KT/j7Mq10XF680HdwuYXe4t0MPloEUa5wFlVvTyX8uM3QoRgN6pNUh2mV4AFaZMfOjRqVXFSxzJkfcUaNVnNlYzuw==", "domain": ".private.auth.alfabank.ru", "path": "/", "expires": 1778487995, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "cfidsw-alfabank-retail", "value": "gByg8Td5MgEvwzJDwItXuU78OzWRBFa1CPNKrHpfFEsp5jsJ4ecdrYV46AboZL+kj7bv7sKMciLs6KT/j7Mq10XF680HdwuYXe4t0MPloEUa5wFlVvTyX8uM3QoRgN6pNUh2mV4AFaZMfOjRqVXFSxzJkfcUaNVnNlYzuw==", "domain": ".auth.alfabank.ru", "path": "/", "expires": 1778487995, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "gsscw-alfabank-retail", "value": "hnGFKIFZ7D1OvofAoh5gpWzMgC2N9UK/amM1Mq/otZ9clk1l88cZPwNdQQgBTAUDjgxr/NV9SEh8i2zR/Jrs5oxzXEvjKM12rMQp4TL5qUSO/njPC8gnOc2QI4Yj1L1ktLuVNc7ockAd05brO2aeBpRN8WCXyoh2AYZONHvLNAkU593acMGrtNvLuF3VJPQKlNcwrSCfiNre5fM5IQOUPPTk6icKyhKxMQUjUgQZNa9k/ROVt1dnEbIGlaqgP00Z22+REFkO", "domain": ".private.auth.alfabank.ru", "path": "/", "expires": 1778487997, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "gsscw-alfabank-retail", "value": "hnGFKIFZ7D1OvofAoh5gpWzMgC2N9UK/amM1Mq/otZ9clk1l88cZPwNdQQgBTAUDjgxr/NV9SEh8i2zR/Jrs5oxzXEvjKM12rMQp4TL5qUSO/njPC8gnOc2QI4Yj1L1ktLuVNc7ockAd05brO2aeBpRN8WCXyoh2AYZONHvLNAkU593acMGrtNvLuF3VJPQKlNcwrSCfiNre5fM5IQOUPPTk6icKyhKxMQUjUgQZNa9k/ROVt1dnEbIGlaqgP00Z22+REFkO", "domain": ".auth.alfabank.ru", "path": "/", "expires": 1778487997, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "browserId", "value": "68205f3adc69f01d00012ee4", "domain": "private.auth.alfabank.ru", "path": "/", "expires": 1778487995.512104, "httpOnly": false, "secure": true, "sameSite": "Strict"}, {"name": "passport-session", "value": "true", "domain": ".alfabank.ru", "path": "/", "expires": 1746952897.168841, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "SUCHASH", "value": "E6DE996481A14BCB59887DEF111E195A", "domain": ".alfabank.ru", "path": "/", "expires": -1, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "GW_SESSION_NEWCLICK", "value": "72b4dc05-cc93-4be8-bad4-f23ce09d1faa", "domain": ".alfabank.ru", "path": "/", "expires": -1, "httpOnly": true, "secure": true, "sameSite": "Lax"}, {"name": "DEVICE_APP_ID", "value": "3082d7e4-b8fc-4feb-9aa3-71c5d1748d9e", "domain": ".alfabank.ru", "path": "/", "expires": 1781511997.04382, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "DEVICE_SECRET", "value": "1f1d6529-2e74-4102-b25f-09bf87063d07daf99c91-8e21-453b-85ff-23471dcb799c", "domain": "web.alfabank.ru", "path": "/", "expires": 1781511997.043926, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "DEVICE_PUBLIC_KEY_ID", "value": "1324b1de-39df-4b08-b852-eac65192fb44", "domain": "web.alfabank.ru", "path": "/", "expires": 1781511997.04396, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "STARTED_PASS_CODE_LOGIC_TIME", "value": "1746951996673", "domain": "web.alfabank.ru", "path": "/", "expires": 1781511997.043985, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "auth_type_pincode", "value": "true", "domain": ".alfabank.ru", "path": "/", "expires": 1781511997.044055, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "f36b39c34hj", "value": "8e99fba30096bdfcdfde6187d1fb2edc8c1bbc24eb53bf064b7bea1f0a33ad274939d9367bed4deb794147ea2708f306SSz3uoOrR0dcrfrZf40iFw%3D%3D", "domain": ".alfabank.ru", "path": "/", "expires": 1781511997.044074, "httpOnly": false, "secure": true, "sameSite": "Lax"}, {"name": "5c24xow7n6w", "value": "0", "domain": ".alfabank.ru", "path": "/", "expires": 1781511997.044098, "httpOnly": false, "secure": true, "sameSite": "Lax"}, {"name": "newclick-sticky-cookie", "value": "\"7ac27a834001e010\"", "domain": "web.alfabank.ru", "path": "/", "expires": -1, "httpOnly": true, "secure": false, "sameSite": "Lax"}, {"name": "fgsscw-alfabank-retail", "value": "xNH5563df983ef073795951fdfdc4d8d41c19cc2", "domain": ".private.auth.alfabank.ru", "path": "/", "expires": 1778487997, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "fgsscw-alfabank-retail", "value": "xNH5563df983ef073795951fdfdc4d8d41c19cc2", "domain": ".auth.alfabank.ru", "path": "/", "expires": 1778487997, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "__zzatw-alfabank-retail", "value": "MDA0dC0cTHtmcDhhDHEWTT17CT4VHThHKHIzd2U6VGs7CmhLGzUdCkNoUlRDXS1BSk8if3IsMBs3V2EgDBYRTVZUfSsiFnh0LFYLD1s5MzlEaXBXJ1EPHVB8Gxk2bV17TGcVfjYucGBkDhpHan4xUVEsEREOEUZaCxtpJCkICA4VQkVqejFxIhpjSF0lQA9NNCUWGnduJg0LQBlwQ3N8GzdXXRwRJFgOIT8LF1xVPjVUDjx1Vy8NLjheLW8eZktfKEhWVgosHRV3ZxUbUEsYL0tfO2VsJlsrfCljNSoi9Ku4jw==", "domain": ".web.alfabank.ru", "path": "/", "expires": 1778487997, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "__zzatw-alfabank-retail", "value": "MDA0dC0cTHtmcDhhDHEWTT17CT4VHThHKHIzd2U6VGs7CmhLGzUdCkNoUlRDXS1BSk8if3IsMBs3V2EgDBYRTVZUfSsiFnh0LFYLD1s5MzlEaXBXJ1EPHVB8Gxk2bV17TGcVfjYucGBkDhpHan4xUVEsEREOEUZaCxtpJCkICA4VQkVqejFxIhpjSF0lQA9NNCUWGnduJg0LQBlwQ3N8GzdXXRwRJFgOIT8LF1xVPjVUDjx1Vy8NLjheLW8eZktfKEhWVgosHRV3ZxUbUEsYL0tfO2VsJlsrfCljNSoi9Ku4jw==", "domain": ".alfabank.ru", "path": "/", "expires": 1778487997, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "mpid", "value": "NjgyMDVmM2QwMTFmNTMzZQ==", "domain": "sync.otm-r.ru", "path": "/", "expires": 1749630397.66852, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "gsscw-alfabank-retail", "value": "8Dkk6uzysnsnxoExz0WaH/74J0a5GKKxYCrScmcW5I7FZvs1Y2dqutsTzQMfP/OYnI9vknBlu/6OCbGFK9gdqw6Z5bmLQC6EBIHLHm//ReH77I0/R0/oUqf8fP/AsqEWlC1wNXUb509RHQwqkGopEwT7ZYV4ELnusN421HIw0s/J5Bs5g1jvTZIv9ViJv0ESzRZZgc8NHAzU9C+fPPZpADxuhiH0EdFH62RtHdk/hM1EBFQhge2MMhiMDgkP3gbxNdChAPKvHDAEGTxlkSTqB00V9T8ywuaiXXjE+j8=", "domain": "groupib-ac.alfabank.ru", "path": "/", "expires": 1778488030.688616, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "cfidsw-alfabank-retail", "value": "VzxbLNDV5NBTFTMgCqaAepzKZSg2AuI87mh7OY+aH+d0zV12npNKzhdZthsdf70GHeiIjbaKzPlAI1n89AXzkzoDkh2/iTHLNFfAJIF1zG6Np2/XsWZW59m3yW/G3fPUJyrx7k4W32CwtW5owKudkDIkyCwWJpIELvar4A==", "domain": "groupib-ac.alfabank.ru", "path": "/", "expires": 1778488030.688772, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "cfidsw-alfabank-retail", "value": "VzxbLNDV5NBTFTMgCqaAepzKZSg2AuI87mh7OY+aH+d0zV12npNKzhdZthsdf70GHeiIjbaKzPlAI1n89AXzkzoDkh2/iTHLNFfAJIF1zG6Np2/XsWZW59m3yW/G3fPUJyrx7k4W32CwtW5owKudkDIkyCwWJpIELvar4A==", "domain": ".web.alfabank.ru", "path": "/", "expires": 1778488030, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "cfidsw-alfabank-retail", "value": "VzxbLNDV5NBTFTMgCqaAepzKZSg2AuI87mh7OY+aH+d0zV12npNKzhdZthsdf70GHeiIjbaKzPlAI1n89AXzkzoDkh2/iTHLNFfAJIF1zG6Np2/XsWZW59m3yW/G3fPUJyrx7k4W32CwtW5owKudkDIkyCwWJpIELvar4A==", "domain": ".alfabank.ru", "path": "/", "expires": 1778488030, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "gsscw-alfabank-retail", "value": "8Dkk6uzysnsnxoExz0WaH/74J0a5GKKxYCrScmcW5I7FZvs1Y2dqutsTzQMfP/OYnI9vknBlu/6OCbGFK9gdqw6Z5bmLQC6EBIHLHm//ReH77I0/R0/oUqf8fP/AsqEWlC1wNXUb509RHQwqkGopEwT7ZYV4ELnusN421HIw0s/J5Bs5g1jvTZIv9ViJv0ESzRZZgc8NHAzU9C+fPPZpADxuhiH0EdFH62RtHdk/hM1EBFQhge2MMhiMDgkP3gbxNdChAPKvHDAEGTxlkSTqB00V9T8ywuaiXXjE+j8=", "domain": ".web.alfabank.ru", "path": "/", "expires": 1778488042, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "gsscw-alfabank-retail", "value": "8Dkk6uzysnsnxoExz0WaH/74J0a5GKKxYCrScmcW5I7FZvs1Y2dqutsTzQMfP/OYnI9vknBlu/6OCbGFK9gdqw6Z5bmLQC6EBIHLHm//ReH77I0/R0/oUqf8fP/AsqEWlC1wNXUb509RHQwqkGopEwT7ZYV4ELnusN421HIw0s/J5Bs5g1jvTZIv9ViJv0ESzRZZgc8NHAzU9C+fPPZpADxuhiH0EdFH62RtHdk/hM1EBFQhge2MMhiMDgkP3gbxNdChAPKvHDAEGTxlkSTqB00V9T8ywuaiXXjE+j8=", "domain": ".alfabank.ru", "path": "/", "expires": 1778488042, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "lipcookeid", "value": "!YZ/d4aBTxoAHVkuJIm0005mk4pPY5HqlSSHRy/VkDVs+4/8LothKya7gJUOnLr7q9jzUl/X242NyZ3YUhuTgsLp3fjUWhS6qx9bjUEQ=", "domain": "online.alfabank.ru", "path": "/", "expires": -1, "httpOnly": true, "secure": true, "sameSite": "Lax"}, {"name": "_sp_id.3c2b", "value": "aa98c4ba-a78c-4359-a368-143a639e7331.1746951746.1.1746952042.1746951746.2b2ae3d8-acf8-4069-97eb-a88c70e28187", "domain": ".alfabank.ru", "path": "/", "expires": 1781512042.460605, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "fgsscw-alfabank-retail", "value": "62yx8d793b86d100949677fb86684909bf1070a3", "domain": ".web.alfabank.ru", "path": "/", "expires": 1778488042, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "fgsscw-alfabank-retail", "value": "62yx8d793b86d100949677fb86684909bf1070a3", "domain": ".alfabank.ru", "path": "/", "expires": 1778488042, "httpOnly": false, "secure": false, "sameSite": "Lax"}], "origins": [{"origin": "https://web.alfabank.ru", "localStorage": [{"name": "snowplowOutQueue_sp_newclick-host-ui_get", "value": "[]"}, {"name": "DEVICE_APP_ID", "value": "3082d7e4-b8fc-4feb-9aa3-71c5d1748d9e"}, {"name": "user-last-activity-date", "value": "1746952038742"}, {"name": "snowplowOutQueue_sp_newclick-dashboard-ui_get", "value": "[\"?e=se&se_ca=Carousel%20for%20you&se_ac=View&se_la=Banner&tv=js-2.8.2&tna=newclick-dashboard-ui&aid=newclick_dashboard_ui&p=web&tz=Europe%2FMinsk&lang=ru-RU&cs=UTF-8&f_pdf=1&f_qt=0&f_realp=0&f_wma=0&f_dir=0&f_fla=0&f_java=0&f_gears=0&f_ag=0&res=1280x720&cd=30&cookie=1&eid=4b5328ee-efa7-4dd5-a2bb-8e3cc576558a&dtm=1746952042460&vp=1280x720&ds=1280x3549&vid=1&sid=2b2ae3d8-acf8-4069-97eb-a88c70e28187&duid=aa98c4ba-a78c-4359-a368-143a639e7331&fp=477354862&uid=AI6NSQ&refr=https%3A%2F%2Fprivate.auth.alfabank.ru%2F&url=https%3A%2F%2Fweb.alfabank.ru%2Fdashboard&cx=eyJzY2hlbWEiOiJpZ2x1OmNvbS5zbm93cGxvd2FuYWx5dGljcy5zbm93cGxvdy9jb250ZXh0cy9qc29uc2NoZW1hLzEtMC0wIiwiZGF0YSI6W3sic2NoZW1hIjoiaWdsdTpjb20uYWxmYWJhbmsvY3VzdG9tX2RpbWVuc2lvbi9qc29uc2NoZW1hLzEtMC0wIiwiZGF0YSI6eyIxIjoiU0FTXzE5MjUxNDA5NTIxIiwiMiI6IkRDX0lOU1RfQ09NTU9OX0FPXzAzMjAyNSIsIjMiOiJCSVBEQyIsIjQiOiJkYXNoYm9hcmQiLCI2Ijoi0JTQtdC90YzQs9C4INCywqDRgNCw0YHRgdGA0L7Rh9C60YNcbtCx0LXQtyDQv9GA0L7RhtC10L3RgtC-0LIiLCI3IjoiaHR0cHM6Ly93ZWIuYWxmYWJhbmsucnUvbXVsdGlzdGVwdWk_ZnJvbU1vZHVsZT1GT1JNJmFsaWFzPWRjLWluc3RhbGxtZW50LWxvYW4mc291cmNlPUxFTlRBX0ZPUl9ZT1VfQU9fTkVXIiwiOCI6MiwiNDAiOiI0NTIzOSIsIjQxIjpudWxsLCI0OCI6ImNsaWVudCIsIjQ5IjoiQURVTFQiLCI1MCI6InVuZGVmaW5lZCJ9fV19\"]"}, {"name": "logout-reason", "value": ""}, {"name": "AlfaOnlineOpenedTabs", "value": "1"}, {"name": "__gitd", "value": "MDA0dC0iD2k5IVB2GApFSE5PMyhXQXt1Fy9LICglLS8PaTleJktWU3orHhN4cChYfw5hLxY=69EuPg=="}, {"name": "PRIVATE_KEY_ENC", "value": "eyJpdiI6IkVPOEVtMzBxZWp4Ym9CTC9zaGZvVkE9PSIsInYiOjEsIml0ZXIiOjEwMDAsImtzIjoyNTYsInRzIjoxMjgsIm1vZGUiOiJjY20iLCJhZGF0YSI6IiIsImNpcGhlciI6ImFlcyIsInNhbHQiOiJSb3V1Z05WdnBtbldXRUZRanQreStZSWtEcWZPcGVwYiIsImN0IjoiejhHaERSVGxpQU5JWHJ3SXFKYzRkSkhnWVU4RnZDaU9iNlFDYjQ3dkU1Q2FSQ2hVdWJpVTJqUWpuZWNoOXhjNENEZ0xUbmI5VU1DWDljUzA4NlJvMjRCT3dmNjk4a0tzbE1TNmhDdXdkaUFYWWcvOEtXMHV1M2ZJWE9XQmJ3VCsxVVptR1FMNEZFeGdHSVpjOWYyRnlCNElNS01KcWVoK0ljZmpTcHFKWWR1UmExOGZaZE1aUXVFRXRsQm9sUUVZc2tzMkJ4UTFiaGMwUmNEa28wTFo3cG5UREhWYzQzVGtKdDVjTWZhQWQ3ZW5OVUlsdktQOXhmRTlMdUlRQkErNy9ReFFxc1ZhZWhDbklrZTRCQVRaSVhSc2JhR3ZWQXlzY2dJRDNWQ0xGQzRnYy9vRHBQQVd1T0ZDUmd4cUZVOG9NcWtvNVBOVmh6SnRMSWduNUJSQ043QnpML3BUb3pNN1FZYXZER1I0U1hWL1VQWWVBb0RUN2I0YjRMYUJhR29wSnIrWTlUSUxlZkZnZnZoWnpaVFFUT0poc2JIcDVtV3NuelBlTnZlRDh1SVpESjUzMkhUNFRVaWY4d1oyOGtybGZablFXb2szWFpoam9DMkJsYVRwWmEzaHN5ZzBHY2ZaUUJ2Y05YVzhyRlNjaGRocVRWT3lpOVJZbW5USEhnL2dZZnFhM1dTY00zc1o1dHNsWEEvVElvSU04UlNCSzVOV2luQ1dna25yc0lCQzN0VUFSNEJBbXJuYzA0eGk3aWpPRjBwT0xpN3VnSThGS2ZTQ2RPWWpoeTBRYzZmWUYwWmwzQUZUQVFDZjUrR0U1M0hZTkNoZGR1clp5bHh3L1NVbk5zTkdqQ3hFcFNLTkhoZE9ITVdwOVlmWWJqU2tMVmpUM2t0MVQva0ZzMG13b0dKcGpVYkFmYVhBNFhSbGUrTWpmR3h4NnRiOGNzbkxyNkJEREVDcGlVc3ZTTXlpelNRNHhNMk94QnhFbXNjdkJndzVDeSs1WFRkTWp3d3VOcW12VGJTQiswMU1QWXM5VVpGcUJWTzhtQ3VHOUZadDFGVW1icXlFbFRsa0Z5K3VSSUJsbFh3c3NZME0rOW53bzJ1V1ZxcVo1RlNHaTBZWkV5ZHV4R0pHZ01VNHpIeTE0d3ZyUHBia0QrNzlKLy9HcGtNcFpzUFhzY3d0MHIwTlhIU1VOQmU1OUo4NGo3WjJ6UjM1Q1dTYTNFNlp2WkY3Mk5sMDl5RVJRc1JiMW8wVmpham9WbjRkYXRlajZzbUxMK3VhdTZ1L2RVS1Y2RThFc2hVZFdHZWxwUW9ydnpxNi9paSt5SHJzT2hvSE9KVU9sQXJYZS9sTlg1NWRSRFlyMXpuRnY5VlZTZ1VZNXczK3BYSXBvd0tSYW05dk9VUnVYQ1lWK0RKYjNqUjNYbHVCTEJHcWFsZUwyQlZFcHMwYlZKS2crRldEMk4raUQvczg5anJTWVJtTEF6bmErNy9XbUJvZUxRL0IvWkVzdHFtcHorTDJveVpvMjIya1dBU0NvdXRIUTFCb1U2YXlGNHNFK2FVeHkrRkdiZStldGdTUitnRFptU3BGNWlMSEo5ZFFIWkl6dlltTHZ2TkN0ajUySDkvNXQrVHN1R0RUT3gzWENHZVRSaVFmZVBJUDRFbUJobnZNempkbzBwMDlHTFduTTluTks2QUJDWmp5UGJpSmJ2SjJmZzJqd0w1QWdzdnVad010OVZVckYzR2ZNcmNEQkl1ald4c2pJd0M4M2UyNnRuNitvbVlYVUFhY0VhdW1LTDFrbHViMjdUNStjbFZsNmkxTzJBY3FBZmZxc2tQTWdZTFdBNGFvcVlvTHhWeGo5aHRDK2ZxblI3TW9sSEszSmZXOGFKS0N5NUdYRXZtSjBKQU1tWUlydms2cWcxQU05M0hhZjhhT0pGTDVUdzlZOXBMa0trZExPeGZZK0QyOTJJZlFYcjNUd3RLTUJPYmxWTjducjNMZGpnQnN0Vm82c3RTaTVIaG00WUx5Uzg1SDVER3g0NjlkR05TL3VScmwycVZ1Q0t5dkowdTg1U21zckdaMWUxNTJxZDdTQWNwUDY2OTB0Z21ySiswSWFZSENnOHRPdC9Ld2RnN0x6L3o1eHdZZUxqaWxNMXBGUUtndUtSMXNuY2l0d1VOVHBVL0dCc2lPUTBWZS9aa1cvR2JrK1FHVVZPdDR0UVRYUGIyU2RpLzg5eTZTZFIrbi9QaGJwMU5DT0FGdFhGL1JUN1FqeEdTYVVTZEN5M2FOQzFBTytRZWEwQ0xNSzExN1lTLzNSK0xDWU8rMUFYNjJhK0VWMUcwZStpZUlML3Z1aHliUDNFMnBWZ1lOYllQaGVwVXNvNXl1ekJQZEtUekcrQ0s1T2dqSnhFTW41QU5xb2RDOXZmWTVXNG9taitIeGxhcFdnN3crZEpuOFRhYmcwbm1sWndLb09UN2dhV3RuT1pSR1QwaUJTQmVZV1lXK0Fhc1V1Y2g3RDZpc3gxZEM0ZUlmb2krTVdDOUhiOEYwRXZFT3FmQXdlRCtJWWU3MkhuQlphUnFCb2tzOVZyQ3pObFZPZys1LzMwZmEydTFhQi9pMG9kdWR6dUk3OFdwTnI5WEhvc0haTXppS3JVbFMyY3ZDa040Um5hbHpVMzJOWFdJTUxVYUJlTHBEeFBlR2U4SGsvWDVNTzIrVFl3UTUxYzhzdWZPRllLS3QvZlhDbWpZVUx5YzV5bWlyZ3ErbXh4YnJxeExrakxqQlBaKzJ1TnI2YVVtTmNWaXRHN3V4c1R5WG5oRStEbFpXOUNZTkQyMGY5VStCRkFjVWhPYkJoakF4T2pWWHdKSmxtSmRPMXJxNHBTQTMifQ=="}, {"name": "identificationType", "value": "undefined"}, {"name": "userRole", "value": "client"}, {"name": "snowplowOutQueue_sp_newclick-deeplink-ui_get", "value": "[]"}, {"name": "SECURED_DEVICE_SECRET", "value": "bca6f1e6-ce22-4b06-871e-da2915343883d9f600ee-e463-49f8-b4ea-7c55331ba731"}, {"name": "__zzatw-alfabank-retail", "value": "MDA0dC0cTHtmcDhhDHEWTT17CT4VHThHKHIzd2U6VGs7CmhLGzUdCkNoUlRDXS1BSk8if3IsMBs3V2EgDBYRTVZUfSsiFnh0LFYLD1s5MzlEaXBXJ1EPHVB8Gxk2bV17TGcVfjYucGBkDhpHan4xUVEsEREOEUZaCxtpJCkICA4VQkVqejFxIhpjSF0lQA9NNCUWGnduJg0LQBlwQ3N8GzdXXRwRJFgOIT8LF1xVPjVUDjx1Vy8NLjheLW8eZktfKEhWVgosHRV3ZxUbUEsYL0tfO2VsJlsrfCljNSoi9Ku4jw=="}, {"name": "userAgeRange", "value": "ADULT"}, {"name": "otm_save_flag", "value": "{\"otm_id\":\"7503101694815720254\",\"exp_date\":1747038397670}"}, {"name": "DEVICE_PUBLIC_KEY_ID", "value": "1324b1de-39df-4b08-b852-eac65192fb44"}]}, {"origin": "https://private.auth.alfabank.ru", "localStorage": [{"name": "__gitd", "value": "MDA0dC0iD2k5IVB2GApFSE5PMyhXQXt1Fy9LICglLS8PaTlaJExaVHsmIBd8biVRCQ5hQzNC+4S3OA=="}, {"name": "snowplowOutQueue_sp_ab_get", "value": "[]"}, {"name": "browser_secret_date", "value": "1746951995518"}, {"name": "__zzatw-alfabank-retail", "value": "MDA0dBA=Fz2+aQ=="}, {"name": "x-user-info", "value": "eyJuYW1lIjogItCc0LjRhdCw0LjQuyJ9"}, {"name": "browser_secret", "value": "76698639-09ad-4ea2-b4da-77ab753960363da43dba-6e20-45b4-b336-62b184b22427"}]}]}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
import os
|
|
3
|
+
from playwright.async_api import async_playwright
|
|
4
|
+
from playwright._impl._errors import TimeoutError
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
async def main():
|
|
8
|
+
from x_model import init_db
|
|
9
|
+
from xync_schema import models
|
|
10
|
+
from xync_client.loader import PG_DSN
|
|
11
|
+
|
|
12
|
+
_ = await init_db(PG_DSN, models, True)
|
|
13
|
+
agent = await models.PmAgent.filter(pm__norm="sber", auth__isnull=False).first()
|
|
14
|
+
|
|
15
|
+
async with async_playwright() as p:
|
|
16
|
+
storage_state = "state.json" if os.path.exists("state.json") else None
|
|
17
|
+
browser = await p.chromium.launch(headless=False)
|
|
18
|
+
context = await browser.new_context(storage_state=storage_state, record_video_dir="videos")
|
|
19
|
+
page = await context.new_page()
|
|
20
|
+
|
|
21
|
+
await page.goto("https://online.sberbank.ru/CSAFront/index.do")
|
|
22
|
+
try:
|
|
23
|
+
await page.wait_for_url("https://online.sberbank.ru/CSAFront/index.do", timeout=3000)
|
|
24
|
+
except TimeoutError:
|
|
25
|
+
if card := agent.auth.get("card"):
|
|
26
|
+
await page.locator('button[aria-controls="tabpanel-card"]').is_visible()
|
|
27
|
+
await page.locator('button[aria-controls="tabpanel-card"]').click()
|
|
28
|
+
await page.wait_for_selector('input[placeholder="Введите номер карты"]', timeout=10000)
|
|
29
|
+
await page.locator('input[placeholder="Введите номер карты"]').fill(card)
|
|
30
|
+
await page.locator('button[type="submit"]').click()
|
|
31
|
+
|
|
32
|
+
sms_code = input("Введите код из SMS: ")
|
|
33
|
+
for i in range(5):
|
|
34
|
+
await page.locator(f'input[name="confirmPassword-{i}"]').fill(sms_code[i])
|
|
35
|
+
|
|
36
|
+
password = input("Введите 5-значный код: ")
|
|
37
|
+
await page.wait_for_selector(".FWAhBZHPePsATLTVFeTT", timeout=10000)
|
|
38
|
+
otp_fields = page.locator('[class="BjsSl7Uv2es5tUtwB03r"]')
|
|
39
|
+
for i in range(await otp_fields.count() + 1):
|
|
40
|
+
await page.keyboard.press(password[i])
|
|
41
|
+
|
|
42
|
+
await page.wait_for_timeout(1000)
|
|
43
|
+
|
|
44
|
+
await page.wait_for_selector(".Re_Wg4Drqw9QjVM43vJ_", timeout=10000)
|
|
45
|
+
fields = page.locator('[class="BjsSl7Uv2es5tUtwB03r"]')
|
|
46
|
+
for i in range(await fields.count() + 1):
|
|
47
|
+
await page.keyboard.press(password[i])
|
|
48
|
+
await page.wait_for_timeout(100000)
|
|
49
|
+
elif login := agent.auth.get("login"):
|
|
50
|
+
await page.locator('input[autocomplete="login"]').fill(login)
|
|
51
|
+
password = input("Введите пароль: ")
|
|
52
|
+
await page.locator('input[autocomplete="password"]').fill(password)
|
|
53
|
+
await page.locator('button[data-testid="button-continue"]').click()
|
|
54
|
+
sms_code = input("Введите код из SMS: ")
|
|
55
|
+
for i in range(5):
|
|
56
|
+
await page.locator(f'input[name="confirmPassword-{i}"]').fill(sms_code[i])
|
|
57
|
+
|
|
58
|
+
password = input("Введите 5-значный код: ")
|
|
59
|
+
await page.wait_for_selector(".FWAhBZHPePsATLTVFeTT", timeout=10000)
|
|
60
|
+
otp_fields = page.locator('[class="BjsSl7Uv2es5tUtwB03r"]')
|
|
61
|
+
for i in range(await otp_fields.count() + 1):
|
|
62
|
+
await page.keyboard.press(password[i])
|
|
63
|
+
|
|
64
|
+
await page.wait_for_timeout(1000)
|
|
65
|
+
|
|
66
|
+
await page.wait_for_selector(".Re_Wg4Drqw9QjVM43vJ_", timeout=10000)
|
|
67
|
+
fields = page.locator('[class="BjsSl7Uv2es5tUtwB03r"]')
|
|
68
|
+
for i in range(await fields.count() + 1):
|
|
69
|
+
await page.keyboard.press(password[i])
|
|
70
|
+
|
|
71
|
+
await page.wait_for_timeout(100000)
|
|
72
|
+
await context.storage_state(path="state.json")
|
|
73
|
+
|
|
74
|
+
await context.close()
|
|
75
|
+
await browser.close()
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
if __name__ == "__main__":
|
|
79
|
+
asyncio.run(main())
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
|
|
3
|
+
from playwright.async_api import async_playwright
|
|
4
|
+
from playwright._impl._errors import TimeoutError, Error
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
async def main():
|
|
8
|
+
async with async_playwright() as p:
|
|
9
|
+
browser = await p.chromium.launch(headless=False)
|
|
10
|
+
context = await browser.new_context(storage_state="state.json", record_video_dir="videos")
|
|
11
|
+
page = await context.new_page()
|
|
12
|
+
await page.goto("https://www.tbank.ru/mybank/")
|
|
13
|
+
await page.wait_for_timeout(1000)
|
|
14
|
+
try:
|
|
15
|
+
await page.wait_for_url("https://www.tbank.ru/mybank/", timeout=3000)
|
|
16
|
+
except TimeoutError:
|
|
17
|
+
# Новый пользователь
|
|
18
|
+
if await page.locator('[automation-id="form-title"]', has_text="Вход в Т‑Банк").is_visible():
|
|
19
|
+
await page.wait_for_timeout(200)
|
|
20
|
+
await page.locator('[automation-id="phone-input"]').fill("9992259898")
|
|
21
|
+
await page.locator('[automation-id="button-submit"] svg').click()
|
|
22
|
+
# Известный пользователь
|
|
23
|
+
else:
|
|
24
|
+
await page.locator('[automation-id="button-submit"]').click()
|
|
25
|
+
await page.wait_for_timeout(100)
|
|
26
|
+
await page.locator('[automation-id="otp-input"]').fill(input("Введите код"))
|
|
27
|
+
await page.wait_for_timeout(1000)
|
|
28
|
+
if await page.locator('[automation-id="cancel-button"]').is_visible():
|
|
29
|
+
await page.wait_for_timeout(3000)
|
|
30
|
+
await page.locator('[automation-id="cancel-button"]', has_text="Не сейчас").click(delay=500)
|
|
31
|
+
elif await page.locator('[automation-id="password-input"]').is_visible():
|
|
32
|
+
await page.locator('[automation-id="password-input"]').fill("mixfix98")
|
|
33
|
+
await page.locator('[automation-id="button-submit"] svg').click()
|
|
34
|
+
await page.context.storage_state(path="state.json")
|
|
35
|
+
await page.wait_for_timeout(200)
|
|
36
|
+
|
|
37
|
+
# Переходим на сбп и вводим данные получателя
|
|
38
|
+
# await page.locator(
|
|
39
|
+
# '[data-qa-type="desktop-ib-pay-buttons"] [data-qa-type="atomPanel pay-card-0"]',
|
|
40
|
+
# has_text="Перевести по телефону",
|
|
41
|
+
# ).click()
|
|
42
|
+
# await page.locator('[data-qa-type="recipient-input.value.placeholder"]').click()
|
|
43
|
+
# await page.wait_for_timeout(300)
|
|
44
|
+
# await page.locator('[data-qa-type="recipient-input.value.input"]').fill("9992259898")
|
|
45
|
+
# await page.locator('[data-qa-type="amount-from.placeholder"]').click()
|
|
46
|
+
# await page.locator('[data-qa-type="amount-from.input"]').fill("100")
|
|
47
|
+
# await page.wait_for_timeout(300)
|
|
48
|
+
# await page.locator('[data-qa-type="bank-plate-other-bank click-area"]').click()
|
|
49
|
+
# await page.locator('[data-qa-type*="inputAutocomplete.value.input"]').click()
|
|
50
|
+
# await page.locator('[data-qa-type*="inputAutocomplete.value.input"]').fill("Озон")
|
|
51
|
+
# await page.wait_for_timeout(300)
|
|
52
|
+
# await page.locator('[data-qa-type="banks-popup-list"]').click()
|
|
53
|
+
# await page.locator('[data-qa-type="transfer-button"]').click()
|
|
54
|
+
|
|
55
|
+
# Проверка последнего платежа
|
|
56
|
+
try:
|
|
57
|
+
await page.goto("https://www.tbank.ru/events/feed")
|
|
58
|
+
except Error:
|
|
59
|
+
await page.wait_for_timeout(1000)
|
|
60
|
+
await page.goto("https://www.tbank.ru/events/feed")
|
|
61
|
+
await page.wait_for_timeout(2000)
|
|
62
|
+
await page.locator('[data-qa-type = "timeline-operations-list"]:last-child').scroll_into_view_if_needed()
|
|
63
|
+
transactions = await page.locator(
|
|
64
|
+
'[data-qa-type="timeline-operations-list"] [data-qa-type="operation-money"]'
|
|
65
|
+
).all_text_contents()
|
|
66
|
+
result = recursion_payments(100, transactions)
|
|
67
|
+
if result == 100:
|
|
68
|
+
print("Платеж", result, "получен")
|
|
69
|
+
else:
|
|
70
|
+
print("Ничегошеньки нет")
|
|
71
|
+
await page.wait_for_timeout(3000)
|
|
72
|
+
await context.close()
|
|
73
|
+
await page.video.path()
|
|
74
|
+
# BufferedInputFile(pth, 'tbank')
|
|
75
|
+
# await bot.send_video('mixartemev')
|
|
76
|
+
...
|
|
77
|
+
await browser.close()
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def recursion_payments(amount: int, transactions: list):
|
|
81
|
+
tran = transactions.pop(0)
|
|
82
|
+
normalized_tran = tran.replace("−", "-").replace(",", ".")
|
|
83
|
+
if 0 > int(float(normalized_tran)) != amount:
|
|
84
|
+
return recursion_payments(amount, transactions)
|
|
85
|
+
return int(float(tran.replace("−", "-").replace(",", ".")))
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
asyncio.run(main())
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"cookies": [{"name": "SSO_CONVERSATION_CSRF_KHm2f", "value": "yjYGHKshOgHjpG5NeWzWnoQ5sOY.1746868636", "domain": "id.tbank.ru", "path": "/auth", "expires": 1746870436.083603, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "SSO_CONVERSATION_CSRF_fKa8U", "value": "CHzL_q5JBzl0eyAd7-Bxm1jaBIc.1746869224", "domain": "id.tbank.ru", "path": "/auth", "expires": 1746871024.185283, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "SSO_CONVERSATION_CSRF_csrHb", "value": "wB62INnKtyQ1zEZfTxirzC5yJR0.1746869831", "domain": "id.tbank.ru", "path": "/auth", "expires": 1746871631.718935, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "SSO_CONVERSATION_CSRF_wf6u8", "value": "xpeQ6ktey2L_b9siFlaK1fgJQa8.1746869999", "domain": "id.tbank.ru", "path": "/auth", "expires": 1746871799.640428, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "isSubscribedToPush", "value": "false", "domain": ".tbank.ru", "path": "/", "expires": 1781428634.642818, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "__P__wuid", "value": "357e0453744ecb9f0872a3cea1788d63", "domain": ".tbank.ru", "path": "/", "expires": 1778405999.640488, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "x-ssoId", "value": "", "domain": "www.tbank.ru", "path": "/", "expires": -1, "httpOnly": true, "secure": true, "sameSite": "Lax"}, {"name": "dco.id", "value": "fe913cd8-7bbb-4a4d-b756-00003b519cd4", "domain": ".tbank.ru", "path": "/", "expires": 1778405998.533392, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "stDeIdU", "value": "357e0453744ecb9f0872a3cea1788d63", "domain": ".tbank.ru", "path": "/", "expires": 1781428634.934439, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "userType", "value": "Visitor", "domain": ".tbank.ru", "path": "/", "expires": 1781429998.908664, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "dsp_click_id", "value": "no%20dsp_click_id", "domain": ".tbank.ru", "path": "/", "expires": 1752053998, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "pageLanding", "value": "https%3A%2F%2Fwww.tbank.ru%2Fauth%2Flogin%2F", "domain": ".tbank.ru", "path": "/", "expires": -1, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "__P__wuid_visit_id", "value": "v1%3A0000001%3A1746868634956%3A357e0453744ecb9f0872a3cea1788d63", "domain": ".tbank.ru", "path": "/", "expires": 1781429998.928833, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "__P__wuid_visit_persistence", "value": "1746868634956", "domain": ".tbank.ru", "path": "/", "expires": 1746871798, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "vIdUid", "value": "6a491558-3424-4acb-9d5d-5f360c313cf2", "domain": ".tbank.ru", "path": "/", "expires": 1781428635.032442, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "stSeStTi", "value": "1746868635032", "domain": ".tbank.ru", "path": "/", "expires": 1781428635.03296, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "mediaInfo", "value": "{%22width%22:1280%2C%22height%22:720%2C%22isTouch%22:false%2C%22displayMode%22:%22browser%22%2C%22retina%22:false}", "domain": "www.tbank.ru", "path": "/", "expires": -1, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "__P__wuid_last_update_time", "value": "1746868634956", "domain": ".tbank.ru", "path": "/", "expires": 1781428635.036991, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "api_prefix_594f33", "value": "w6LDIW5eCSOwIQXEugwFv_lBadPeFnVrvr_wdYP8Qdk.1746868635", "domain": "www.tbank.ru", "path": "/", "expires": 1746870435.120456, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "api_prefix_6d17aa", "value": "8wGZVFr_2tViPADH5DIXNnWwJj_MFzi1iRo7FtvpA80.1746868635", "domain": "www.tbank.ru", "path": "/", "expires": 1746870435.58469, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "last_getuaid", "value": "1746868635", "domain": "id.tinkoff.ru", "path": "/", "expires": 1778404635.96212, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "sso_cookies_migrated", "value": "true", "domain": "id.tbank.ru", "path": "/", "expires": 1762420636.014557, "httpOnly": true, "secure": true, "sameSite": "Lax"}, {"name": "last_setuaid", "value": "1746868636", "domain": "id.tbank.ru", "path": "/", "expires": 1778404636.014685, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "sso_uaid", "value": "uaid.ILmm0h260gW89SLgwF8YBTmBI1huv6meZ2VGmaNZSkgbBFWth2Nl3Vsowa30DDm6", "domain": "id.tbank.ru", "path": "/", "expires": 1762421999.640528, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "api_prefix_e508ad", "value": "-gn0quC8c9HqnibECdoX9qLjS_PMTl3xB-Er9hpYpvc.1746869223", "domain": "www.tbank.ru", "path": "/", "expires": 1746871023.753302, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "api_prefix_c04771", "value": "y1D5N7cu9XjVqlpv-62VqPWwVUANWEgx7g_37ILk4KY.1746869224", "domain": "www.tbank.ru", "path": "/", "expires": 1746871024.115589, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "psid", "value": "I0UerouudQw4Q6Zo6RLt5FWos9sAOETt.auth-entity-mgmt-5ffc8797c6-g5xsv", "domain": "www.tbank.ru", "path": "/", "expires": 1746870490, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "api_prefix_996320", "value": "G1qeydXpdOBqumqfERB2UMJqIy2e88nHQALMWJKMEFY.1746869831", "domain": "www.tbank.ru", "path": "/", "expires": 1746871630.998858, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "api_prefix_ba8a0d", "value": "2QXqGla7a_8wbOqCU9zvR7Ab1YdGAIoT3BN2Ln9pNes.1746869831", "domain": "www.tbank.ru", "path": "/", "expires": 1746871631.602552, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "_t_modern", "value": "true", "domain": "www.tbank.ru", "path": "/", "expires": -1, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "api_prefix_a8e066", "value": "KNAo7FK9ZijwufO-btbU90ItN5G7ZRQ7cMbAEsFNFJM.1746869999", "domain": "www.tbank.ru", "path": "/", "expires": 1746871799.067144, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "api_prefix_ecc1af", "value": "JNnt0-Es4RXiK2r-pBtJoPhT6kLH_KTlUFI0O80y9Cs.1746869999", "domain": "www.tbank.ru", "path": "/", "expires": 1746871799.561736, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "tid_cid_timestamp", "value": "wf6u8TpJ4E80:1746870020464", "domain": "id.tbank.ru", "path": "/", "expires": 1781430020, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "stLaEvTi", "value": "1746870024328", "domain": ".tbank.ru", "path": "/", "expires": 1781430024.328793, "httpOnly": false, "secure": true, "sameSite": "None"}], "origins": [{"origin": "https://www.tbank.ru", "localStorage": [{"name": "twt_wuid_visit_storage", "value": "{\"visitId\":\"v1:0000001:1746868634956:357e0453744ecb9f0872a3cea1788d63\",\"items\":{\"pageLanding\":\"https://www.tbank.ru/auth/login/\"}}"}, {"name": "dco_general_ids", "value": ""}]}]}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import logging
|
|
2
1
|
import re
|
|
3
2
|
from asyncio import run, sleep
|
|
4
3
|
from enum import StrEnum
|
|
@@ -6,7 +5,7 @@ from os.path import dirname
|
|
|
6
5
|
from typing import Literal
|
|
7
6
|
|
|
8
7
|
from aiogram.types import BufferedInputFile
|
|
9
|
-
from playwright.async_api import async_playwright, Page
|
|
8
|
+
from playwright.async_api import async_playwright, Page
|
|
10
9
|
from pyotp import TOTP
|
|
11
10
|
from pyrogram import filters
|
|
12
11
|
from pyrogram.handlers import MessageHandler
|
|
@@ -15,8 +14,8 @@ from playwright._impl._errors import TimeoutError
|
|
|
15
14
|
from xync_schema.enums import UserStatus
|
|
16
15
|
from xync_schema.models import User, PmAgent
|
|
17
16
|
|
|
18
|
-
from xync_client.pyro import PyroClient
|
|
19
|
-
from xync_client.loader import bot
|
|
17
|
+
from xync_client.TgWallet.pyro import PyroClient
|
|
18
|
+
from xync_client.loader import bot
|
|
20
19
|
|
|
21
20
|
|
|
22
21
|
class ExtraCaptchaException(Exception): ...
|
|
@@ -58,8 +57,7 @@ async def report(uid: int, byts: bytes, msg: str, exc: bool = True):
|
|
|
58
57
|
|
|
59
58
|
class Client:
|
|
60
59
|
agent: PmAgent
|
|
61
|
-
|
|
62
|
-
ubot: PyroClient
|
|
60
|
+
pbot: PyroClient
|
|
63
61
|
page: Page
|
|
64
62
|
gpage: Page
|
|
65
63
|
|
|
@@ -72,10 +70,10 @@ class Client:
|
|
|
72
70
|
async def start(self, headed: bool = False):
|
|
73
71
|
self.agent = await PmAgent.get(user_id=self.uid, user__status__gt=0, pm__norm="volet").prefetch_related("user")
|
|
74
72
|
|
|
75
|
-
self.
|
|
76
|
-
await self.
|
|
73
|
+
self.pbot = PyroClient(self.agent)
|
|
74
|
+
await self.pbot.app.start()
|
|
77
75
|
self.msg_listener = MessageHandler(self.got_msg, filters.chat(["ProtectimusBot"]))
|
|
78
|
-
self.
|
|
76
|
+
self.pbot.app.add_handler(self.msg_listener)
|
|
79
77
|
|
|
80
78
|
playwright = await async_playwright().start()
|
|
81
79
|
browser = await playwright.chromium.launch(
|
|
@@ -115,7 +113,7 @@ class Client:
|
|
|
115
113
|
await self.page.click("input#checkOtpButton")
|
|
116
114
|
await self.page.wait_for_url(Pages.HOME)
|
|
117
115
|
|
|
118
|
-
async def wait_for_code(self, typ: Literal["login", "send"
|
|
116
|
+
async def wait_for_code(self, typ: Literal["login", "send"], past: int = 0, timeout: int = 5) -> str:
|
|
119
117
|
while past < timeout:
|
|
120
118
|
if code := self.msgs.pop(f"otp_{typ}", None):
|
|
121
119
|
return code
|
|
@@ -126,7 +124,7 @@ class Client:
|
|
|
126
124
|
async def got_msg(self, _, msg: Message):
|
|
127
125
|
if "Your OTP code:" in msg.text:
|
|
128
126
|
self.msgs["otp_login"] = msg.text[-6:]
|
|
129
|
-
|
|
127
|
+
if "Confirmation code:" in msg.text:
|
|
130
128
|
self.msgs["otp_send"] = msg.text[-6:]
|
|
131
129
|
elif "Status: Completed. Sender:" in msg.text:
|
|
132
130
|
self.msgs["got_payment"] = parse_transaction_info(msg.text)
|
|
@@ -139,7 +137,7 @@ class Client:
|
|
|
139
137
|
await self.page.fill("#srcAmount", str(amount))
|
|
140
138
|
await self.page.fill("#destWalletId", dest)
|
|
141
139
|
await self.page.wait_for_timeout(300)
|
|
142
|
-
await self.page.locator("
|
|
140
|
+
await self.page.locator("input[type=submit]", has_text="continue").click()
|
|
143
141
|
if otp := self.agent.auth.get("otp"):
|
|
144
142
|
totp = TOTP(otp)
|
|
145
143
|
code = totp.now()
|
|
@@ -159,16 +157,23 @@ class Client:
|
|
|
159
157
|
|
|
160
158
|
async def gmail_page(self):
|
|
161
159
|
gp = await self.page.context.new_page()
|
|
162
|
-
await gp.goto(Pages.GMH, timeout=
|
|
160
|
+
await gp.goto(Pages.GMH, timeout=20000)
|
|
163
161
|
if not gp.url.startswith(Pages.GMH):
|
|
164
|
-
|
|
162
|
+
# ваще с 0 заходим
|
|
163
|
+
if await (
|
|
165
164
|
sgn_btn := gp.locator(
|
|
166
165
|
'header a[href^="https://accounts.google.com/AccountChooser/signinchooser"]:visible',
|
|
167
|
-
has_text="sign",
|
|
166
|
+
has_text="sign in",
|
|
168
167
|
)
|
|
169
168
|
).count():
|
|
170
169
|
await sgn_btn.click()
|
|
171
|
-
|
|
170
|
+
# если надо выбрать акк
|
|
171
|
+
lang = await gp.get_attribute("html", "lang")
|
|
172
|
+
sgn = {
|
|
173
|
+
"ru": "Выберите аккаунт",
|
|
174
|
+
"en": "Choose an account",
|
|
175
|
+
}
|
|
176
|
+
if await gp.locator("h1#headingText", has_text=sgn[lang]).count():
|
|
172
177
|
await gp.locator("li").first.click()
|
|
173
178
|
# если предлагает залогиниться
|
|
174
179
|
elif await gp.locator("h1#headingText", has_text="Sign In").count():
|
|
@@ -176,7 +181,8 @@ class Client:
|
|
|
176
181
|
await gp.locator("button", has_text="Next").click()
|
|
177
182
|
# осталось ввести пороль:
|
|
178
183
|
await gp.fill("input[type=password]", self.agent.user.gmail_auth["password"])
|
|
179
|
-
|
|
184
|
+
nxt = {"ru": "Далее", "en": "Next"}
|
|
185
|
+
await gp.locator("button", has_text=nxt[lang]).click()
|
|
180
186
|
await report(self.uid, await gp.screenshot(), "Аппрувни гмейл, у тебя 1.5 минуты", False)
|
|
181
187
|
await gp.wait_for_url(lambda u: u.startswith(Pages.GMH), timeout=90 * 1000) # убеждаемся что мы в почте
|
|
182
188
|
self.gpage = gp
|
|
@@ -206,32 +212,13 @@ class Client:
|
|
|
206
212
|
except Exception as e:
|
|
207
213
|
await report(self.uid, await self.page.screenshot(), repr(e))
|
|
208
214
|
|
|
209
|
-
async def send_cap_help(self, xcap: Locator):
|
|
210
|
-
bb = await xcap.bounding_box(timeout=2000)
|
|
211
|
-
byts = await self.page.screenshot(clip=bb)
|
|
212
|
-
infile = BufferedInputFile(byts, "cap_xy.png")
|
|
213
|
-
await self.bbot.send_img("put x, y", byts)
|
|
214
|
-
self.bbot.app.storage.user_id()
|
|
215
|
-
await bot.send_photo(uid, infile, caption=msg)
|
|
216
|
-
await report(self.uid, byts, "x, y", False)
|
|
217
|
-
dp.message.register(self.got_cap_xy)
|
|
218
|
-
|
|
219
|
-
async def got_cap_xy(self, _, msg):
|
|
220
|
-
self.msgs["typ_cap_xy"] = msg.text.split(",")
|
|
221
|
-
|
|
222
215
|
async def captcha_click(self):
|
|
223
216
|
captcha_url = self.page.url
|
|
224
217
|
cbx = self.page.frame_locator("#main-iframe").frame_locator("iframe").first.locator("div#checkbox")
|
|
225
218
|
await cbx.wait_for(state="visible"), await self.page.wait_for_timeout(500)
|
|
226
219
|
await cbx.click(delay=94)
|
|
227
|
-
xcap = self.page.frame_locator("#main-iframe").frame_locator("iframe").last.locator("div.challenge-view")
|
|
228
|
-
if await xcap.count():
|
|
229
|
-
await self.send_cap_help(xcap)
|
|
230
|
-
x, y = await self.wait_for_code("cap_xy", timeout=59)
|
|
231
|
-
|
|
232
220
|
try:
|
|
233
221
|
await self.page.wait_for_url(lambda url: url != captcha_url)
|
|
234
|
-
|
|
235
222
|
except TimeoutError: # if page no changed -> captcha is undone
|
|
236
223
|
await self.page.screenshot(path=dirname(__file__) + "/xtr_captcha.png")
|
|
237
224
|
raise ExtraCaptchaException(self.page.url)
|
|
@@ -249,22 +236,20 @@ class Client:
|
|
|
249
236
|
# closing
|
|
250
237
|
await self.page.context.close()
|
|
251
238
|
await self.page.context.browser.close()
|
|
252
|
-
self.
|
|
253
|
-
await self.
|
|
239
|
+
self.pbot.app.remove_handler(self.msg_listener)
|
|
240
|
+
await self.pbot.app.stop()
|
|
254
241
|
|
|
255
242
|
|
|
256
|
-
async def _test():
|
|
243
|
+
async def _test(uid: int, dest: str, amount):
|
|
257
244
|
from x_model import init_db
|
|
258
245
|
from xync_client.loader import PG_DSN
|
|
259
246
|
from xync_schema import models
|
|
260
247
|
|
|
261
248
|
_ = await init_db(PG_DSN, models, True)
|
|
262
|
-
logging.basicConfig(level=logging.DEBUG)
|
|
263
|
-
uid = 193017646
|
|
264
249
|
va = Client(uid)
|
|
265
250
|
try:
|
|
266
251
|
await va.start(True)
|
|
267
|
-
await va.send(
|
|
252
|
+
await va.send(dest, amount)
|
|
268
253
|
await va.wait_for_payments()
|
|
269
254
|
except TimeoutError as te:
|
|
270
255
|
await report(uid, await va.page.screenshot(), repr(te))
|
|
@@ -272,4 +257,4 @@ async def _test():
|
|
|
272
257
|
|
|
273
258
|
|
|
274
259
|
if __name__ == "__main__":
|
|
275
|
-
run(_test())
|
|
260
|
+
run(_test(7807393311, "alena.artemeva25@gmail.com", 8.3456))
|
|
@@ -19,9 +19,7 @@ tests/_todo_refact/Wallet/test_agent.py
|
|
|
19
19
|
tests/_todo_refact/Wallet/test_ex.py
|
|
20
20
|
xync_client/__init__.py
|
|
21
21
|
xync_client/loader.py
|
|
22
|
-
xync_client/pg_storage.py
|
|
23
22
|
xync_client/pm_unifier.py
|
|
24
|
-
xync_client/pyro.py
|
|
25
23
|
xync_client.egg-info/PKG-INFO
|
|
26
24
|
xync_client.egg-info/SOURCES.txt
|
|
27
25
|
xync_client.egg-info/dependency_links.txt
|
|
@@ -89,9 +87,11 @@ xync_client/Mexc/etype/pm.py
|
|
|
89
87
|
xync_client/Okx/ex.py
|
|
90
88
|
xync_client/Okx/etype/ad.py
|
|
91
89
|
xync_client/Okx/etype/pm.py
|
|
90
|
+
xync_client/Pms/Alfa/__init__.py
|
|
91
|
+
xync_client/Pms/Alfa/state.json
|
|
92
|
+
xync_client/Pms/Sber/__init__.py
|
|
92
93
|
xync_client/Pms/Tinkoff/__init__.py
|
|
93
94
|
xync_client/Pms/Tinkoff/state.json
|
|
94
|
-
xync_client/Pms/Tinkoff/storage.json
|
|
95
95
|
xync_client/Pms/Volet/__init__.py
|
|
96
96
|
xync_client/Pms/Volet/api.py
|
|
97
97
|
xync_client/Pms/Volet/_todo_req/req.mjs
|