本期来写一下python用于网页请求两个大库的使用
作者安排了这个项目教学,只需要挂在服务器上运行即可
文章同款搭建服务器https://cloud.tencent.com/act/cps/redirect?redirect=2446&cps_key=f0552e9eadafced33d3c20de84094b4b&from=console本期python代码一共用到了两个库
一个用于发送请求requests 一个用于解析xpath lxml
在这之前我们需要找到一个叫活动状态的界面 在进入课程之后 点击
然后点击任务
就可以进入到我们的 学习进度界面啦
然后你可以在你的url中找到classid与courseid点击任意一个任务就可以看到fid
cookies与header的话需要按下F12按键
选择网络在标头处即可查看
cookies = ""
classid = ""
courseid = ""
fid = ""
headers = {
"Cookie": "",
"User-Agent": "",
"Referer": ""
}
准备好之后 我们就可以使用get来访问这个地址啦
resoponse = requests.get(url, headers=headers, timeout=5)
获取到响应信息之后使用xpath来找到签到与抢答链接
关于xpath的信息获取也是同样按下F12按键 在找到需要获取xpath的控件之后按下右键选择复制Xpath即可啦
html = etree.HTML(resoponse.content)
divs = html.xpath('//*[@id="startList"]/div')
if (divs):
for div in divs:
activeid = div.xpath('./div[1]/@onclick')[0]
active = re.findall('activeDetail\((\d+),(\d+),.*?\)', activeid)[0]
#从这里开始删除
if (int(active[1]) == 4):
fangwen(str(active[0]))
print('抢答成功')
else:
print("暂无抢答")
#到这里结束都删除 就可以安心睡觉啦
if (int(active[1]) == 2):
fangwen(str(active[0]))
print('签到成功')
else:
print("暂无签到")
print(active[1])
else:
print("暂无活动")
要是你不需要抢答只想睡觉 只要将抢答部分删除就可以睡觉啦
代码还用到了re库用来匹配所有onclick为activeDetail()的 选项
最后同学们只需要在服务器中搭建并在课前运行就好啦
要是想24小时无间断运行的话可以把入口函数中的input删除 并将while条件改为true
最后献上我们的code
import requests
import re
from datetime import datetime
import time
from lxml import etree
endTimeStr = ""
classid = ""
courseid = ""
fid = ""
headers = {
"Cookie": "",
"User-Agent":
"",
"Referer":
""
}
def fangwen(activeid):
global headers, classid ,courseid, fid
url = "https://mobilelearn.chaoxing.com/widget/pcAnswer/teaAnswer?activeId={}&classId={}&fid={}&courseId={}".format(activeid, int(classid), int(fid), int(courseid))
response = requests.get(url, headers=headers, timeout=5)
print(url)
def run():
global endTimeStr,classid,courseid
endTime = datetime.strptime(endTimeStr, "%H:%M:%S")
# runTime = (endTime - datetime.now()).seconds
print("当前时间:{}\ <{}> ".format(
datetime.now(), 'xx课程'))
url = 'https://mobilelearn.chaoxing.com/widget/pcpick/stu/index?courseId={}&jclassId={}'.format(courseid, classid)
while (endTime - datetime.now()).seconds > 0:
time.sleep(1)
try:
resoponse = requests.get(url, headers=headers, timeout=5)
# xpath解析文本
html = etree.HTML(resoponse.content)
divs = html.xpath('//*[@id="startList"]/div')
if (divs):
for div in divs:
activeid = div.xpath('./div[1]/@onclick')[0]
active = re.findall('activeDetail\((\d+),(\d+),.*?\)', activeid)[0]
if (int(active[1]) == 4):
fangwen(str(active[0]))
print('抢答成功')
else:
print("暂无抢答")
if (int(active[1]) == 2):
fangwen(str(active[0]))
print('签到成功')
else:
print("暂无签到")
print(active[1])
else:
print("暂无活动")
except requests.exceptions.ReadTimeout as e:
time.sleep(1)
if __name__ == '__main__':
endTimeStr = input("input class over time\n")
run()