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
|
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date : 2023-11-15 19:18:10
# @Author : Xzap (xzap@163.com)
# @Link : https://xzap.gitee.io
# @Version : $Id$
from playwright.sync_api import Playwright, sync_playwright, expect
import time
import re
import random
with open("s.csv","r", encoding="utf-8") as f:
s1 = f.read().split("\n")
s = [i.split(",") for i in s1]
def make_tracks(num):
num2 = num + random.randint(-10,10)
a = random.randint(5,10)
a2 = num2 // a
a3 = []
for i in range(a):
a3.append(random.randint(a2-30,a2+30))
cha = num2 - sum(a3)
a3[-1] = a3[-1] + cha
return a3
def cancel_request(route,request):
route.abort()
def login(context, user, passwd):
page = context.new_page()
page.route(re.compile(r"(\.png)|(\.jpg)"),cancel_request) # 不加载图片
page.goto("https://www.2-class.com/")
rt = re.search('reqtoken:"(.*?)"', page.content()).group(1)
# print (rt)
page.get_by_role("button", name="登 录").click()
page.get_by_placeholder("请输入登录账号").click()
page.get_by_placeholder("请输入登录账号").fill(user)
page.get_by_placeholder("请输入密码").click()
page.get_by_placeholder("请输入密码").fill(passwd)
page.get_by_label("自动登录").check()
page.get_by_role("button", name="确 定").click()
# page.pause()
time.sleep(3)
try :
cc = page.locator("#nc_1_nocaptcha")
if cc.count() > 0:
slider = page.locator("#nc_1_n1z").bounding_box()
# print(slider)
page.mouse.move(x=int(slider['x']), y=slider['y']+slider['height']/2)
page.mouse.down()
page.wait_for_timeout(100)
tracks = make_tracks(400)
xc = 0
for track in tracks :
xc += track
page.mouse.move(x=int(slider['x']) + xc, y=slider['y'] + slider['height'] / 2 + random.randint(-3,3),steps=random.randint(5,10))
page.wait_for_timeout(random.randint(2,6)*10)
page.mouse.up()
except:
print ("No slider!")
page.get_by_role("button", name="我的课程").click()
time.sleep(2)
# 五年级第一课
page.goto("https://www.2-class.com/courses/1575")
data = {"courseId":1575,"reqtoken":rt}
page.request.post(url="https://www.2-class.com/api/course/addCoursePlayPV",data=data)
page.goto("https://www.2-class.com/courses/exams/1575")
data = {"courseId":"1575","examCommitReqDataList":[{"examId":1,"answer":0},{"examId":2,"answer":2},{"examId":3,"answer":2},{"examId":4,"answer":3},{"examId":5,"answer":"0,1,2,3"}],"exam":"course","reqtoken":rt}
page.request.post(url="https://www.2-class.com/api/exam/commit", data=data)
page.goto("https://www.2-class.com/drugControlClassroom/courses")
# 五年级第二课
page.goto("https://www.2-class.com/courses/1576")
data = {"courseId":1576,"reqtoken":rt}
page.request.post(url="https://www.2-class.com/api/course/addCoursePlayPV",data=data)
page.goto("https://www.2-class.com/courses/exams/1576")
data = {"courseId":"1576","examCommitReqDataList":[{"examId":1,"answer":2},{"examId":2,"answer":3},{"examId":3,"answer":1},{"examId":4,"answer":1},{"examId":5,"answer":"0,2"}],"exam":"course","reqtoken":rt}
page.request.post(url="https://www.2-class.com/api/exam/commit", data=data)
page.goto("https://www.2-class.com/drugControlClassroom/courses")
# 六年级第一课
# page.goto("https://www.2-class.com/courses/1577")
# data = {"courseId":1577,"reqtoken":rt}
# page.request.post(url="https://www.2-class.com/api/course/addCoursePlayPV",data=data)
# page.goto("https://www.2-class.com/courses/exams/1577")
# data ={"courseId":"1577","examCommitReqDataList":[{"examId":1,"answer":3},{"examId":2,"answer":1},{"examId":3,"answer":3},{"examId":4,"answer":0},{"examId":5,"answer":"0,1,2"}],"exam":"course","reqtoken":rt}
# page.request.post(url="https://www.2-class.com/api/exam/commit", data=data)
# page.goto("https://www.2-class.com/drugControlClassroom/courses")
# 六年级第二课
# page.goto("https://www.2-class.com/courses/1578")
# data = {"courseId":1578,"reqtoken":rt}
# page.request.post(url="https://www.2-class.com/api/course/addCoursePlayPV",data=data)
# page.goto("https://www.2-class.com/courses/exams/1578")
# data = {"courseId":"1578","examCommitReqDataList":[{"examId":1,"answer":0},{"examId":2,"answer":1},{"examId":3,"answer":0},{"examId":4,"answer":3},{"examId":5,"answer":"0,1,3"}],"exam":"course","reqtoken":rt}
# page.request.post(url="https://www.2-class.com/api/exam/commit", data=data)
# page.goto("https://www.2-class.com/drugControlClassroom/courses")
page.goto("https://www.2-class.com/api/user/logout")
time.sleep(1)
page.close()
def run(playwright: Playwright) -> None:
browser = playwright.firefox.launch(headless=False)
context = browser.new_context()
alln = len(s)
for num,i in enumerate(s):
print ("="*50)
print (i[0])
print (f"{num+1}/{alln}")
login(context, i[0],i[1])
# ---------------------
context.close()
browser.close()
with sync_playwright() as playwright:
run(playwright)
|