import
time
import
requests
import
json
from
PIL
import
Image
headers
=
{
'User-Agent'
:
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
,
}
def
login(name, password):
codeUrl
=
"https://mooc.icve.com.cn/portal/LoginMooc/getVerifyCode?ts={}"
.
format
(
int
(
round
(time.time()
*
1000
)))
loginUrl
=
"https://mooc.icve.com.cn/portal/LoginMooc/loginSystem"
codeResult
=
requests.post(url
=
codeUrl, headers
=
headers)
with
open
(
"moocCode.jpg"
,
"wb"
, ) as f:
f.write(codeResult.content)
code_cookies
=
codeResult.cookies
print
(
"---------->验证码获取完成,开始打开验证码"
)
img
=
Image.
open
(
"moocCode.jpg"
)
img.show()
print
(
"---------->验证码打开完成,请输入"
)
data
=
{
'userName'
: name,
'password'
: password,
'verifycode'
:
input
(
"输入验证码:"
)
}
result
=
requests.post(url
=
loginUrl, data
=
data, headers
=
headers, cookies
=
code_cookies)
json_result
=
json.loads(result.text)
if
json_result[
'code'
]
=
=
1
and
json_result[
'msg'
]
=
=
"登录成功"
:
return
result.cookies
else
:
print
(json_result[
'msg'
])
return
0
def
getCourseOpenList(cookies):
url
=
"https://mooc.icve.com.cn/portal/course/getCourseOpenList"
result
=
json.loads(requests.post(url
=
url, headers
=
headers, cookies
=
cookies).text)
return
result[
'list'
]
def
getProcessList(cookies, courseId):
url
=
"https://mooc.icve.com.cn/study/learn/getProcessList"
result
=
json.loads(requests.post(url
=
url, data
=
{
'courseOpenId'
: courseId}, headers
=
headers, cookies
=
cookies).text)
return
result[
'proces'
][
'moduleList'
]
def
getTopicByModuleId(cookies, courseId, moduleId):
url
=
"https://mooc.icve.com.cn/study/learn/getTopicByModuleId"
data
=
{
'courseOpenId'
: courseId,
'moduleId'
: moduleId
}
result
=
json.loads(requests.post(url
=
url, data
=
data, headers
=
headers, cookies
=
cookies).text)
return
result[
'topicList'
]
def
getCellByTopicId(cookies, courseId, topicId):
url
=
"https://mooc.icve.com.cn/study/learn/getCellByTopicId"
data
=
{
'courseOpenId'
: courseId,
'topicId'
: topicId
}
result
=
json.loads(requests.post(url
=
url, data
=
data, headers
=
headers, cookies
=
cookies).text)
return
result[
'cellList'
]
def
viewDirectory(cookies, courseOpenId, cellId):
time.sleep(
1
)
url
=
"https://mooc.icve.com.cn/study/learn/viewDirectory"
data
=
{
'courseOpenId'
: courseOpenId,
'cellId'
: cellId
}
result
=
requests.post(url
=
url, data
=
data, headers
=
headers, cookies
=
cookies)
result
=
json.loads(result.text)
return
result[
'courseCell'
]
def
statStuProcessCellLogAndTimeLong(cookies, courseOpenId, cellId, videoTimeTotalLong):
time.sleep(
1.5
)
url
=
"https://mooc.icve.com.cn/study/learn/statStuProcessCellLogAndTimeLong"
data
=
{
'courseOpenId'
: courseOpenId,
'cellId'
: cellId,
'auvideoLength'
: videoTimeTotalLong,
'videoTimeTotalLong'
: videoTimeTotalLong
}
result
=
json.loads(requests.post(url
=
url, data
=
data, headers
=
headers, cookies
=
cookies).text)
return
result
def
start(name, password):
cookies
=
login(name
=
name, password
=
password)
course
=
getCourseOpenList(cookies)
for
i
in
course:
print
(
"进入课程:"
+
i[
'text'
])
time.sleep(
1
)
moduleList1
=
getProcessList(cookies
=
cookies, courseId
=
i[
'id'
])
for
j
in
moduleList1:
time.sleep(
0.25
)
print
(
"\t"
+
j[
'name'
])
moduleList2
=
getTopicByModuleId(cookies
=
cookies, courseId
=
i[
'id'
], moduleId
=
j[
'id'
])
for
k
in
moduleList2:
time.sleep(
0.25
)
print
(
"\t\t"
+
k[
'name'
])
moduleList3
=
getCellByTopicId(cookies
=
cookies, courseId
=
i[
'id'
], topicId
=
k[
'id'
])
for
m
in
moduleList3:
time.sleep(
0.25
)
print
(
"\t\t\t"
+
m[
'cellName'
])
if
not
len
(m[
'childNodeList'
]):
if
m[
'isStudyFinish'
]
is
True
:
print
(
"\t\t\t\t"
+
m[
'cellName'
]
+
"\t类型:"
+
m[
'categoryName'
]
+
"\t\t------课程完成,不刷课-------"
)
continue
info
=
viewDirectory(cookies
=
cookies, courseOpenId
=
m[
'courseOpenId'
], cellId
=
m[
'Id'
])
if
not
m[
'categoryName'
]
=
=
"视频"
and
not
m[
'categoryName'
]
=
=
"音频"
:
isOK
=
statStuProcessCellLogAndTimeLong(cookies
=
cookies, courseOpenId
=
info[
'CourseOpenId'
],
cellId
=
info[
'Id'
],
videoTimeTotalLong
=
0
)
else
:
isOK
=
statStuProcessCellLogAndTimeLong(cookies
=
cookies, courseOpenId
=
info[
'CourseOpenId'
],
cellId
=
info[
'Id'
],
videoTimeTotalLong
=
info[
'VideoTimeLong'
])
if
isOK[
'code'
]
=
=
1
and
isOK[
'isStudy'
]
is
True
:
print
(
"\t\t\t\t"
+
m[
'cellName'
]
+
"\t类型:"
+
m[
'categoryName'
]
+
"\t\t-----刷课OK----"
)
else
:
print
(
"\t\t\t\t"
+
m[
'cellName'
]
+
"\t类型:"
+
m[
'categoryName'
]
+
"\t\t-----ERROR----"
)
else
:
for
n
in
m[
'childNodeList'
]:
time.sleep(
0.5
)
if
n[
'isStudyFinish'
]
is
True
:
print
(
"\t\t\t\t"
+
n[
'cellName'
]
+
"\t类型:"
+
n[
'categoryName'
]
+
"\t\t------课程完成,不刷课-------"
)
continue
info
=
viewDirectory(cookies
=
cookies, courseOpenId
=
n[
'courseOpenId'
], cellId
=
n[
'Id'
])
if
not
n[
'categoryName'
]
=
=
"视频"
and
not
n[
'categoryName'
]
=
=
"音频"
:
isOK
=
statStuProcessCellLogAndTimeLong(cookies
=
cookies,
courseOpenId
=
info[
'CourseOpenId'
],
cellId
=
info[
'Id'
],
videoTimeTotalLong
=
0
)
else
:
isOK
=
statStuProcessCellLogAndTimeLong(cookies
=
cookies,
courseOpenId
=
info[
'CourseOpenId'
],
cellId
=
info[
'Id'
],
videoTimeTotalLong
=
info[
'VideoTimeLong'
])
if
isOK[
'code'
]
=
=
1
and
isOK[
'isStudy'
]
is
True
:
print
(
"\t\t\t\t"
+
n[
'cellName'
]
+
"\t类型:"
+
n[
'categoryName'
]
+
"\t\t-----刷课OK----"
)
else
:
print
(
"\t\t\t\t"
+
n[
'cellName'
]
+
"\t类型:"
+
n[
'categoryName'
]
+
"\t\t-----ERROR----"
)
if
__name__
=
=
'__main__'
:
name
=
"账号"
password
=
"密码"
start(name
=
name, password
=
password)