抢牙医脚本记录

前端尝试

var userName = ""
var userId = ""
var userPhone = ""
var delay = 50
var a = open("https://xyymzyy.buaa.edu.cn/patient/dentalOrder?code=05105w0w3Iysc034vp2w3zrvhQ005w08&state=")

setTimeout(a.document.getElementsByClassName("van-checkbox")[0].click(),delay*10)

a.document.getElementsByClassName("van-button__content")[1].click()
b = a.document.querySelectorAll("input")
b[0].value = userName
b[1].value = userId
b[2].value = userPhone
a.document.getElementsByClassName("calendar_day calendr_day_checked")

后端尝试

import json
import time
import datedays
import re

def byteHandler(fileName,byteMode):
    with open(fileName,'wb') as fb:
        fb.write(byteMode)
    with open(fileName,'rb') as fb:
        return json.load(fb)
def timeHandler(targetDay,targetTime):
    oriTime = time.strftime("%a %b %d %H:%M:%S %Y", time.localtime())
    target = r"[\d]+:[\d]+:[\d]+"
    objectTime = re.sub(target, targetTime, oriTime)
    returnTime = time.mktime(time.strptime(objectTime,"%a %b %d %H:%M:%S %Y"))
    objectDate = datedays.gettomorrow(targetDay)
    returnDate = f"{objectDate.year}-{objectDate.month}-{objectDate.day}"
    return returnTime, returnDate
import requests
import time
import json

from utils import byteHandler,timeHandler

class patientInfofake():
    dentalorder_name= "oo"
    dentalorder_number= "110101195201031218"
    dentalorder_phone= "13633612334"
    dentalorder_wxname= "wxname"
    dentalorder_ip= ""

class patientInfo():
    dentalorder_name= ""
    dentalorder_number= ""
    dentalorder_phone= ""
    dentalorder_wxname= ""
    dentalorder_ip= ""

def getValidDoctorId(objectDate):
    # https://xyymzyy.buaa.edu.cn/api/user/getValidDentalDatePlus?date=2023-2-28
    url = f"https://xyymzyy.buaa.edu.cn/api/user/getValidDentalDoctorByDate?date={objectDate}"
    fileName = 'ValidDoctorId.json'
    res = requests.get(url=url)
    responseJson = byteHandler(fileName,res.content)
    res.close()
    return responseJson['o'][-1]['userDetailId']

def getValidDentalId(objectDate,doctorId):
    url = f"https://xyymzyy.buaa.edu.cn/api/user/getValidDentalByDateAndDoctor?date={objectDate}&doctor_id={doctorId}"
    fileName = 'ValidDentalId.json'
    res = requests.get(url=url)
    responseJson = byteHandler(fileName,res.content)
    dentalId = responseJson["o"][-1]["dentalId"]
    res.close()
    return dentalId

def dentist(dental_id,patientInfo):
    # https://xyymzyy.buaa.edu.cn/patient/dentalOrder?code=041Gmo0w3X1Zb03Bq82w3IAOjr0Gmo0u&state=
    url = "https://xyymzyy.buaa.edu.cn/api/user/createDentalOrder"
    data = json.dumps({
        "dental_id": dental_id,
        "dentalorder_name": patientInfo.dentalorder_name,
        "dentalorder_number": patientInfo.dentalorder_number,
        "dentalorder_phone": patientInfo.dentalorder_phone,
        "dentalorder_wxname": patientInfo.dentalorder_wxname,
        "dentalorder_ip": patientInfo.dentalorder_ip
        })
  
    with open ("headers.json","r") as fr:
        headers = json.load(fr)
    res = requests.post(url=url, data=data, headers=headers)
    print(res.request.body)
    responseJson = byteHandler('return.json',res.content)
    res.close()
    return responseJson['status']
  
if __name__ == "__main__":
    objectTime, objectDate = timeHandler(1,"12:00:00")
    user = patientInfofake()
    # user = patientInfo()
    doctorId = getValidDoctorId(objectDate)
    while(objectTime<=time.time()):
        dental_id = getValidDentalId(objectDate,doctorId)
        if dentist(dental_id,user) != -1:
            print("success!!!")
            break
        print(f"\n{time.asctime(time.localtime())}: try doctor_id {doctorId} for time {dental_id} fail ToT\n")