Автоматизация обучения на Stepik с помощью Playwright
«Век живи — век учись». Обучение перестало быть чем-то привязанным к аудиториям и расписаниям (к сожалению, это негативно повлияло на качество образования и престиж). Для этого существует масса возможностей в наше время. Целая отрасль — «E-Learning». Среди разнообразия всяческих программ, сервисов и сайтов есть замечательная платформа Stepik. Разнообразные курсы на любую тематику, возможность стать как учащимся, так и преподавателем — это то, что нужно для любого человека. Для многих (в том числе и для автора поста) учёба является хобби, а иногда и спортом (на таких платформах есть рейтинги и свои лидеры/авторитеты) — это прогресс, иллюзия того, что что-то сделано, и «закрытие гештальтов». К сожалению, с появлением chatgpt и прочих AI - степень вовлеченности как учеников, так и преподавателей - снижается. Реальное знание и труд который порождает настоящее знание - нивелируются. Существуют курсы и отдельные задания “неберучки”, авторы курсов или отвечают грубо, или вовсе молчат, и некоторые курсы проходятся с помощью гугл или AI. Или комментариев уже решивших тест или задание.
“Победителей не судят”. Бал есть бал. Решенное задание, неважно каким способом, засчитывается. Конечно, это неприемлемо, перебор ответов. Хак или взлом системы. Ниже представлен скрипт Playwright, который перебирает возможны варианты.
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
import json
from playwright.sync_api import sync_playwright
# Загружаем логин и пароль
with open("config.json", "r") as f:
cfg = json.load(f)
EMAIL = cfg["email"]
PASSWORD = cfg["password"]
URL = "<>"
from itertools import product
def permutations_with_repetition(chars, min_len, max_len):
for length in range(min_len, max_len + 1):
for p in product(chars, repeat=length):
yield ''.join(p)
for s in permutations_with_repetition("123", 1, 5):
print(s)
def run():
with sync_playwright() as p:
browser = p.firefox.launch(headless=False)
context = browser.new_context()
page = context.new_page()
page.goto(URL)
# --- Закрыть всплывающее окно, если есть ---
try:
page.locator(".woof-message__button").click(timeout=5000)
except:
pass
# --- Нажать LOGIN ---
page.locator(".navbar__auth_login").click()
# --- Ввести email ---
page.locator("#id_login_email").fill(EMAIL)
# --- Ввести пароль ---
page.locator("#id_login_password").fill(PASSWORD)
# --- Кнопка "Войти" ---
page.locator("#login_form > button").click()
page.wait_for_timeout(5000)
# --- Продолжить курс ---
try:
page.locator(".course-join-button > button").click(timeout=5000)
except:
pass
for s in permutations_with_repetition("123", 1, 5):
page.fill(".number-input", s)
page.click("button.submit-submission", timeout=5000)
# --- Готово, ты внутри урока ---
print("Успешный вход!")
page.wait_for_timeout(10000)
browser.close()
if __name__ == "__main__":
run()
Для успешной авторизации необходимо чтобы в папке со скриптом нахождился файл config.json
1
2
3
4
{
"email": youremail@email.com,
"password": password
}