1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
  | 
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date    : 2023-11-15 19:18:10
# @Author  : Xzap (xzap@163.com)
# @Link    : https://xzap.gitee.io
# @Version : $Id$
from playwright.sync_api import Playwright, sync_playwright, expect
import time
import re
import random
with open("s.csv","r", encoding="utf-8") as f:
    s1 = f.read().split("\n")
s = [i.split(",") for i in s1]
def make_tracks(num):
    num2 = num + random.randint(-10,10)
    a = random.randint(5,10)
    a2 = num2 // a
    a3 = []
    for i in range(a):
        a3.append(random.randint(a2-30,a2+30))
    cha = num2 - sum(a3)
    a3[-1] = a3[-1] + cha
    return a3
def cancel_request(route,request):
    route.abort()
def login(context, user, passwd):
    page = context.new_page()
    page.route(re.compile(r"(\.png)|(\.jpg)"),cancel_request) # 不加载图片
    page.goto("https://www.2-class.com/")
    rt = re.search('reqtoken:"(.*?)"',  page.content()).group(1)
    # print (rt)
    page.get_by_role("button", name="登 录").click()
    page.get_by_placeholder("请输入登录账号").click()
    page.get_by_placeholder("请输入登录账号").fill(user)
    page.get_by_placeholder("请输入密码").click()
    page.get_by_placeholder("请输入密码").fill(passwd)
    page.get_by_label("自动登录").check()
    page.get_by_role("button", name="确 定").click()
    # page.pause()
    time.sleep(3)
    try :
        cc = page.locator("#nc_1_nocaptcha")
        if cc.count() > 0: 
            slider =  page.locator("#nc_1_n1z").bounding_box()
            # print(slider)
            page.mouse.move(x=int(slider['x']), y=slider['y']+slider['height']/2)
            page.mouse.down()        
            page.wait_for_timeout(100)
            tracks = make_tracks(400)
            xc = 0
            for track in tracks :
                xc += track
                page.mouse.move(x=int(slider['x']) + xc, y=slider['y'] + slider['height'] / 2 + random.randint(-3,3),steps=random.randint(5,10))
                page.wait_for_timeout(random.randint(2,6)*10)
            page.mouse.up()
    except:
        print ("No slider!")
    page.get_by_role("button", name="我的课程").click()
    time.sleep(2)
    # 五年级第一课
    page.goto("https://www.2-class.com/courses/1575")
    data = {"courseId":1575,"reqtoken":rt}
    page.request.post(url="https://www.2-class.com/api/course/addCoursePlayPV",data=data)
    page.goto("https://www.2-class.com/courses/exams/1575")
    data = {"courseId":"1575","examCommitReqDataList":[{"examId":1,"answer":0},{"examId":2,"answer":2},{"examId":3,"answer":2},{"examId":4,"answer":3},{"examId":5,"answer":"0,1,2,3"}],"exam":"course","reqtoken":rt}
    page.request.post(url="https://www.2-class.com/api/exam/commit", data=data)
    page.goto("https://www.2-class.com/drugControlClassroom/courses")
    # 五年级第二课
    page.goto("https://www.2-class.com/courses/1576")
    data = {"courseId":1576,"reqtoken":rt}
    page.request.post(url="https://www.2-class.com/api/course/addCoursePlayPV",data=data)
    page.goto("https://www.2-class.com/courses/exams/1576")
    data = {"courseId":"1576","examCommitReqDataList":[{"examId":1,"answer":2},{"examId":2,"answer":3},{"examId":3,"answer":1},{"examId":4,"answer":1},{"examId":5,"answer":"0,2"}],"exam":"course","reqtoken":rt}
    page.request.post(url="https://www.2-class.com/api/exam/commit", data=data)
    page.goto("https://www.2-class.com/drugControlClassroom/courses")   
    # 六年级第一课
    # page.goto("https://www.2-class.com/courses/1577")
    # data = {"courseId":1577,"reqtoken":rt}
    # page.request.post(url="https://www.2-class.com/api/course/addCoursePlayPV",data=data)
    # page.goto("https://www.2-class.com/courses/exams/1577")
    # data ={"courseId":"1577","examCommitReqDataList":[{"examId":1,"answer":3},{"examId":2,"answer":1},{"examId":3,"answer":3},{"examId":4,"answer":0},{"examId":5,"answer":"0,1,2"}],"exam":"course","reqtoken":rt}
    # page.request.post(url="https://www.2-class.com/api/exam/commit", data=data)
    # page.goto("https://www.2-class.com/drugControlClassroom/courses")
    # 六年级第二课
    # page.goto("https://www.2-class.com/courses/1578")
    # data = {"courseId":1578,"reqtoken":rt}
    # page.request.post(url="https://www.2-class.com/api/course/addCoursePlayPV",data=data)
    # page.goto("https://www.2-class.com/courses/exams/1578")
    # data = {"courseId":"1578","examCommitReqDataList":[{"examId":1,"answer":0},{"examId":2,"answer":1},{"examId":3,"answer":0},{"examId":4,"answer":3},{"examId":5,"answer":"0,1,3"}],"exam":"course","reqtoken":rt}
    # page.request.post(url="https://www.2-class.com/api/exam/commit", data=data)
    # page.goto("https://www.2-class.com/drugControlClassroom/courses") 
    page.goto("https://www.2-class.com/api/user/logout")
    time.sleep(1)
    page.close()
def run(playwright: Playwright) -> None:
    browser = playwright.firefox.launch(headless=False)
    context = browser.new_context()
    alln = len(s)
    for num,i in enumerate(s):
        print ("="*50)
        print (i[0])
        print (f"{num+1}/{alln}")
        login(context, i[0],i[1])
    # ---------------------
    context.close()
    browser.close()
with sync_playwright() as playwright:
    run(playwright)
  |