import json
import time
import requests
from selenium import webdriver
'''
pip install requests
pip install selenium
selenium版本>=4.11.2
'''
class AQWB():
def __init__(self):
self.login = None
self.userName = None
self.timestamp = str(round(time.time(), 3))
self.userId = None
self.token = None
self.cookies = {
'Hm_lvt_05399ccffcee10764eab39735c54698f': '1713243791',
'Hm_lpvt_05399ccffcee10764eab39735c54698f': '1713230815',
'SERVERID': '3e9e86f31a75ec1ee6c732efcaf93765|1713243791|1713230815',
}
self.headers = {
'accept': 'application/json, text/plain, */*',
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
'cache-control': 'no-cache',
'content-type': 'application/x-www-form-urlencoded;charset=UTF-8',
'origin': 'https://weiban.mycourse.cn',
'pragma': 'no-cache',
'priority': 'u=1, i',
'referer': 'https://weiban.mycourse.cn/',
'sec-ch-ua': '"Chromium";v="124", "Microsoft Edge";v="124", "Not-A.Brand";v="99"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-origin',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0',
'x-token': self.token,
}
self.listStudyTask = []
self.listCategory = []
self.driver = None
def get_listStudyTask(self):
data = {
'tenantCode': '550005',
'userId': self.userId,
}
params = {
'timestamp': self.timestamp,
}
response = requests.post(
'https://weiban.mycourse.cn/pharos/index/listStudyTask.do',
params=params,
cookies=self.cookies,
headers=self.headers,
data=data
)
self.listStudyTask = [{'name': d['projectName'], 'userProjectId': d['userProjectId']} for d in
response.json()['data']]
def get_listCategory(self):
listCategory = []
params = {
'timestamp': self.timestamp,
}
for StudyTask in self.listStudyTask:
data = {
'tenantCode': '550005',
'userId': self.userId,
'userProjectId': StudyTask['userProjectId'],
'chooseType': '3',
}
listCate = requests.post(
'https://weiban.mycourse.cn/pharos/usercourse/listCategory.do',
params=params,
cookies=self.cookies,
headers=self.headers,
data=data,
).json()['data']
for cate in listCate:
cate['userProjectId'] = StudyTask['userProjectId']
listCategory.append(cate)
self.listCategory = [
{'categoryCode': d['categoryCode'], 'categoryName': d['categoryName'], 'userProjectId': d['userProjectId']}
for d in listCategory]
def get_listCourse(self):
for category in self.listCategory:
params = {
'timestamp': self.timestamp,
}
data = {
'tenantCode': '550005',
'userId': self.userId,
'userProjectId': category['userProjectId'],
'chooseType': '3',
'categoryCode': category['categoryCode']
}
self.while_listCourse(params, data)
def while_listCourse(self, params, data):
listCourse = requests.post(
'https://weiban.mycourse.cn/pharos/usercourse/listCourse.do',
params=params,
cookies=self.cookies,
headers=self.headers,
data=data
).json()['data']
listCourse = [course for course in listCourse if course['finished'] != 1]
start_len = len(listCourse)
while start_len != 0:
Course = listCourse[0]
resourceId = Course['resourceId']
userProjectId = data['userProjectId']
resourceName = Course['resourceName']
userCourseId = Course['userCourseId']
getCourseUrldata = {
'tenantCode': '550005',
'userId': self.userId,
'courseId': resourceId,
'userProjectId': userProjectId,
}
getCourseUrl = requests.post(
'https://weiban.mycourse.cn/pharos/usercourse/getCourseUrl.do',
params=params,
cookies=self.cookies,
headers=self.headers,
data=getCourseUrldata).json()['data']
tokenid = getCourseUrl.split("methodToken=")[1].split("&")[0]
studydata = {
'tenantCode': '550005',
'userId': self.userId,
'courseId': resourceId,
'userProjectId': userProjectId,
}
requests.post(
'https://weiban.mycourse.cn/pharos/usercourse/study.do',
params=params,
cookies=self.cookies,
headers=self.headers,
data=studydata,
)
v1params = {
'userCourseId': userCourseId,
'tenantCode': '550005',
'callback': 'callback'
}
v1 = requests.get(
f'https://weiban.mycourse.cn/pharos/usercourse/v1/{tokenid}.do',
params=v1params,
cookies=self.cookies,
headers=self.headers,
).text
listCourse = requests.post(
'https://weiban.mycourse.cn/pharos/usercourse/listCourse.do',
params=params,
cookies=self.cookies,
headers=self.headers,
data=data,
).json()['data']
listCourse = [course for course in listCourse if course['finished'] != 1]
if start_len == len(listCourse):
print('异常等待')
else:
print(resourceName, v1, '完成')
start_len = len(listCourse)
i = 15
while i > 0:
print("等待", i, '秒')
i -= 1
time.sleep(1)
if start_len==0:
print("全部已经完成 5min close")
time.sleep(60*5)
def getlogin(self):
self.driver = webdriver.Chrome()
self.driver.get('https://weiban.mycourse.cn/#/login')
login = self.driver.execute_script('return localStorage.getItem("user");')
while login == None or str(login).strip()=='':
time.sleep(1)
login = self.driver.execute_script('return localStorage.getItem("user");')
self.login = json.loads(login)
self.userName = self.login['userName']
self.userId = self.login['userId']
self.token = self.login['token']
self.headers['x-token']=self.token
print(self.userName,self.userId,self.token)
print("登录成功")
if __name__ == '__main__':
a = AQWB()
a.getlogin()#设置用户信息
a.get_listStudyTask()#获取主页学习任务
a.get_listCategory()#获取分页学习任务大纲
a.get_listCourse()#执行学习
安全微伴 爬虫
于 2024-06-12 09:49:57 首次发布