本帖最后由 Pastwill 于 2022-3-25 09:35 编辑
一.前言
脚本用于学习通课程讨论点赞
如若认为有些用处请给予回复与评分,欢迎指出不足缺点,共同进步。
仅做个人学习使用,严禁用于其他用途。
二.开发环境
windows 10 Python 3.6 x86
三.调用模块
[Python] 纯文本查看 复制代码 from asyncio.windows_events import NULL
import requests
import json
import time
import os
import re
import random
from lxml import etree
四.代码
[Python] 纯文本查看 复制代码 from asyncio.windows_events import NULL
import requests
import json
import time
import os
import re
import random
from lxml import etree
import sys
#用户区开始
name=""#用户名,必填
passwd=""#密码,必填
#用户区结束
#全局区开始
okcookie={}#经过验证的cookie
dianzan=[]
headers = {'User-Agent': 'Dalvik/2.1.0 (Linux; U; Android 11; M2007J3SC Build/RKQ1.200826.002) (device:M2007J3SC) Language/zh_CN com.chaoxing.mobile/ChaoXingStudy_3_5.1.3_android_phone_613_74 '}#超星app原生ua
#全局区结束
def restart_program():#重启
python = sys.executable
os.execl(python, python, * sys.argv)
#第一个函数 实现登录,验证cookie,保存cookie,获取cookie各功能
def login():#使用超星app登录api,测试多次获取没遇到过验证,比较稳定
print("登录模块启动")
data = {'uname': name,'code': passwd,'loginType': '1','roleSelect': 'true'}
r = requests.post('https://passport2-api.chaoxing.com/v11/loginregister', headers=headers, data=data)
load_cookies = requests.utils.dict_from_cookiejar(r.cookies)
#转换为字符串保存到文件
fo = open("cookie.txt", "w")
fo.write(str(json.dumps(load_cookies)))
print("cookie保存成功")
fo.close()
print("重启程序")
restart_program()
#第二个函数 实现验证cookie,如果失效便启动再次登录获取新cookie
def cookie_check():
if os.path.exists("cookie.txt") == True:
f=open('cookie.txt','r',encoding="utf-8")
dic = json.loads(f.read())
response = requests.get('https://mooc1-api.chaoxing.com/mycourse/backclazzdata', headers=headers,cookies=dic)
if '成功' in response.text:
return [True,dic,dic['UID']]
#get_class()
else:
print("cookie好像失效了,启动重新获取")
login()
else:
print("未找到cookie文件呀启动登录")
login()
def get_active_one():
print("已经开始获取所有讨论topicId")
html = etree.HTML(requests.get('http://mooc1-1.chaoxing.com/visit/courses', headers=headers, cookies= okcookie).text)
cla =html.xpath("/html/body/div/div[2]/div[3]/ul/li/div/h3/a/@href")
for i in cla:
b='https://mooc1-1.chaoxing.com'+str(re.findall(re.compile(r'href="(.*?)" title="讨论">'),requests.get('https://mooc1-1.chaoxing.com'+str(i), headers=headers, cookies= okcookie).text)[0])
time.sleep(random.randint(120,240))
if '<li class="sturep"><a href="javascript:;" ' not in requests.get(b, headers=headers, cookies= okcookie).text:
continue
#if '<span class="danwei">03-' not in requests.get(b, headers=headers, cookies= okcookie).text:
# continue这个可以用来判断是不是新的讨论和这个课程是不是新的课程有需要的可以自行改动
a =re.findall(re.compile(r'&topicid=(.*?)&'),requests.get(b, headers=headers, cookies= okcookie).text)
for i in a:
dianzan.append(i)
time.sleep(random.randint(120,240))
def dianzanba(topicId):
data = {'topicId': topicId}
print(requests.post('https://mooc1.chaoxing.com/bbscircle/addpraise', headers=headers, data=data,cookies= okcookie).text)
if __name__ == '__main__':
if cookie_check()[0] ==True:
print("cookie检测成功")
okcookie=cookie_check()[1]
uid=cookie_check()[2]
get_active_one()
print("开始点赞")
for i in dianzan:
time.sleep(random.randint(120,240))
dianzanba(i)
|