安全微伴 爬虫

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()#执行学习

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值