吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6919|回复: 161
收起左侧

[Python 原创] 【2.0版本】青骄第二课堂知识竞赛批量满分

  [复制链接]
麦米尔加弗德 发表于 2022-11-2 18:24
本帖最后由 麦米尔加弗德 于 2022-11-3 12:40 编辑

对比上一个版本,现在的代码可以说是从头到脚大变样,所以我单独开了一贴,作为第二个版本,第二课堂现在已经接近尾声了,但是我最近还是在改代码,只因为我在上一个版本中发现了很多问题,自己用和给别人用真的不一样,以及我想把代码完善,做的更好。

环境

  • windows10
  • 最新版Edge浏览器
  • python版本3.8.6
    • 模块皆为当前版本能更新的最新版本
    • requests
    • openpyxl
    • selenium
    • webdriver_manager

更新内容

  • 开源,点击跳转主页
  • python版本和selenuim版本全面升级
  • 现在使用Edge浏览器
  • 自动配置selenuim的驱动,不用麻烦下载
  • 不用重置密码,使用xlsx进行导入(虽然不想加模块,但是没办法==)
  • 遇到错误并重启自身再次运行
  • 有滑动条验证,但是很难过
  • 更方便的配置
  • 更多的提示内容
  • 更高的效率(使用了显式等待)

代码

import time
import json
import requests
import random
from openpyxl import Workbook, load_workbook
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.edge.service import Service as EdgeService
from selenium.webdriver import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from webdriver_manager.microsoft import EdgeChromiumDriverManager

requests.packages.urllib3.disable_warnings()

# 加载用户数据
def user_data_list_parse():
    user_data_list = []
    book = load_workbook('账户.xlsx')
    sheet = book.active
    col_data = tuple(sheet.columns)

    if(len(col_data[0]) != len(col_data[1])):
        print('账户个数和密码个数不符合,请检查后运行!')
        exit(0)

    for i in range(len(col_data[0])):
        user_data_list.append([col_data[0][i].value, col_data[1][i].value])

    return user_data_list

# 滑动条事件
def slide_solution(driver):
    try:
        slide_btn = driver.find_element(by=By.XPATH, value='//*[@id="nc_1_n1z"]')
        # 按住滑块按钮
        ActionChains(driver).click_and_hold(slide_btn).perform()
        # 模拟缓慢的滑动
        i = 0
        while i <= 420:  
            time.sleep(0.1)
            ActionChains(driver).move_by_offset(20,0).perform()
            i += 30
        # 释放鼠标
        ActionChains(driver).release().perform()
        time.sleep(1)
    except:
        return 0

# 随机选择并构建题目列表
def random_list():
    ran = random.sample(range(0, 39),20)
    question_list = []
    for i in ran:
        t = question_data[i].split('-')
        question_list.append({"questionId": t[0],"questionContent": t[1]})

    return question_list

#模拟登录的事件
def login(user_data):
    # 点击登录按钮
    WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.XPATH, '/html/body/div/div/div[1]/div/header/div/div[2]/div[2]/div/span/a')))
    el = driver.find_element(By.XPATH,'/html/body/div/div/div[1]/div/header/div/div[2]/div[2]/div/span/a')
    el.click()
    time.sleep(2)

    # account
    el = driver.find_element(By.XPATH,'//*[@id="account"]')
    el.send_keys(user_data[0])
    time.sleep(0.5)

    # password
    el = driver.find_element(By.XPATH,'//*[@id="password"]')
    el.send_keys(user_data[1])
    time.sleep(0.5)

    # 登录
    el = driver.find_element(By.CSS_SELECTOR,"[type='submit']")
    el.click()
    time.sleep(2)
    # 如果有滑动条的话
    slide_solution(driver)

    #cookie和数据
    cookie = ''
    cookies=driver.get_cookies()
    for i in cookies:
        cookie = cookie + i['name'] + '=' + i['value'] + ';'
    reqtoken = driver.execute_script('return window.__DATA__.reqtoken')

    yi_jian_man_fen(cookie,reqtoken,user_data[0])

    #点击退出
    el = driver.find_element(By.XPATH,'//*[@id="app"]/div/div[1]/div/header/div/div[2]/div[2]/div/a')
    el.click()
    time.sleep(1)
    el = driver.find_element(By.XPATH,'//*[@id="app"]/div/div[1]/div/header/div/div[2]/div[2]/div/div/ul/li[6]/a')
    driver.execute_script('arguments[0].click()', el)
    time.sleep(1)

#开始答题
def yi_jian_man_fen(cookie,reqtoken,account):
    print(account+',开始答题')
    url = 'https://www.2-class.com/api/quiz/commit'
    headers = {
        'Cookie': cookie,
        'Content-Type': 'application/json',
        'User-Agent': 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50'
    }
    time = random.randint(100, 350)
    data = {
        "list": random_list(),
        "time": time,
        "reqtoken": reqtoken
    }

    result = requests.post(url=url, data=json.dumps(data), headers=headers, verify=False)
    text = result.text
    text = text.split(',')[2]
    text = text.split(':')[1]
    if text == '100':
        text = ',满分!'
    print(account,text)

if __name__ == '__main__':
    # 加载题库数据
    with open('题库.txt','r') as f:
        question_data = f.read().split('\n')

    # 加载账号数据
    user_data_list = user_data_list_parse()

    # selenium设置与启动
    options = webdriver.EdgeOptions()
    prefs = {"profile.managed_default_content_settings.images": 2}
    options.add_experimental_option("prefs", prefs)
    driver = webdriver.Edge(service=EdgeService(EdgeChromiumDriverManager().install()), options=options)
    driver.get('https://www.2-class.com/competition')
    driver.maximize_window()

    # 计数
    count = 0
    # 开始运行答题
    try:
        for user_data in user_data_list:
            login(user_data)
            count = count + 1
            print('已完成'+ str(count) + '个' )
            if count%35 == 0:
                print('按照计划休眠30分钟')
                time.sleep(1800)
        print('全部完成')
    except Exception as e:
        wb = Workbook()
        ws = wb.active
        for i in user_data_list[count:]:
            ws.append(i)   
        wb.save('账户.xlsx')

        print('程序运行错误,已经保存数据\n')
        print(e)
    finally:
        driver.quit()   # 使用完, 关闭浏览器

题库.txt

3199-A
3202-D
3203-B
3171-A
3108-C
3141-A
3206-C
3176-C
3147-D
3148-A
3181-B
3217-A
3186-A
3154-C
3155-A
3123-B
3189-C
3159-D
3131-C
3163-B
2986-B
2989-C
2990-D
2959-C
2928-C
2960-A
2961-C
2897-B
2930-D
2898-B
2963-A
2932-D
2901-A
2966-D
2934-C
2904-D
2907-D
2972-C
2973-A
2912-B

使用说明

第一次因为会自动下驱动文件所以启动会慢一点哦

快速版

新建 py文件,代码复制粘贴,pip安装一下没有的模块
新建 题库.txt,数据复制粘贴
新建 账户.xlsx,用户名第一列,密码第二列
然后运行.py文件就可以了,是不是很方便

整合版

链接:https://pan.baidu.com/s/1GE1e39pUuOFzOu84Zwuc8w
提取码:yzbj 教学视频:xxxxxx暂时还没录

  1. 下载压缩包并解压
  2. 双击 python-3.8.6.exe 安装python3.8.6
  3. 双击 安装模块.bat 安装所需要的的模块
  4. 进入运行目录
  5. 配置 账户.xlsx,用户名第一列,密码第二列
  6. 然后运行.py文件就可以了,是不是很方便

滑动条验证容易不通过,所以设置了做35个账号就休息半小时,大家找个空闲时间挂着就好

后记

中间遇到了很多的问题和bug,最后还是改出来了==,一波三折,明年可能更新吧,今年就到此为止了。
花了很多精力和时间的,给后来人多一点借鉴

免费评分

参与人数 23威望 +1 吾爱币 +34 热心值 +22 收起 理由
魔泽 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
lhhlx1984 + 1 + 1 加油大神,抓紧时间更新
雅迅达网络 + 1 + 1 大佬 请问题库怎么修改,2023年还可以用么
liwenmymail + 1 + 1 谢谢@Thanks!
wuqian9871 + 1 + 1 热心回复!
wwrwwh + 1 + 1 禁毒和宪法以前都是按键做的,后来吃不消,禁毒直接垃学生去机房,宪法直接.
lwh203 + 1 + 1 先学习一下,等着明年再用,谢谢~
Herculee + 1 + 1 谢谢@Thanks!
枫止觞 + 1 + 1 谢谢@Thanks!
solife + 1 + 1 我很赞同!
苏紫方璇 + 1 + 10 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
arsleeli + 1 + 1 我很赞同!
xy6538 + 1 + 1 谢谢@Thanks!
ankboy + 1 我很赞同!感谢&amp;amp;#128591;
mrlight + 1 + 1 谢谢@Thanks!
thghx + 1 + 1 发晚了,今年手动答题
googxy + 2 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
289228237 + 1 + 1 谢谢@Thanks!
爽yy + 2 + 1 今年没用上,希望明年用上,py不懂搞,用油猴做了,还是感谢楼主!!
坝格 + 1 + 1 谢谢@Thanks!
bluecloud2016 + 1 + 1 我很赞同!
勤快的懒虫 + 1 + 1 谢谢@Thanks!
yuntai + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 麦米尔加弗德 发表于 2023-10-5 11:33
兄弟们,今年的新版写的差不多了,等一个题库哈

点评

23年的开始了,麻烦更新一下,谢谢  发表于 2023-11-21 21:26

免费评分

参与人数 4吾爱币 +4 热心值 +4 收起 理由
LeonSmith123 + 1 + 1 热心回复!
魔泽 + 1 + 1 谢谢@Thanks!
wuqian9871 + 1 + 1 谢谢@Thanks!
dengshichuan123 + 1 + 1 我很赞同!

查看全部评分

 楼主| 麦米尔加弗德 发表于 2023-11-28 18:59
wsypnet 发表于 2023-11-27 08:34
老大,能不能改造下咱们的代码,能自动登录账号,登出账号,完成课时学习?

新版本弄了,但是现在每个省的都不一样...湖南省都没启动的很郁闷

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
wsypnet + 1 + 1 我很赞同!

查看全部评分

 楼主| 麦米尔加弗德 发表于 2023-10-10 21:45
兄弟们,别催了,我这个只搞竞赛
2022年全国青少年禁毒知识竞赛已于11月5日结束,2023年竞赛未开始,敬请期待吧~

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
wsypnet + 1 + 1 我很赞同!

查看全部评分

yuntai 发表于 2022-11-2 18:36
今年的基本结束了,非常感谢大神,怎么送b啊,我想送你几个  虽然我也不多
dtsuifeng 发表于 2022-11-2 18:52
就差处理勋章和等级的弹窗遮挡不能退出的问题了。直接删cookies就能解决,不用退出。
啊笨 发表于 2022-11-2 19:44
其实只要答案就可以了。要是插件模式就更完美了!
bluecloud2016 发表于 2022-11-2 20:23
感谢!!!!!明年此时此地等你!
xiaofeiTM233 发表于 2022-11-2 21:34
用插件的会不会更好
坝格 发表于 2022-11-2 21:59
太感谢了,这个必须支持
5151diy 发表于 2022-11-2 22:02
谢谢提供
289228237 发表于 2022-11-2 22:30
整合版的,按照顺序安装后,为什么我点了.py就闪了一下就没有下文了呢?
 楼主| 麦米尔加弗德 发表于 2022-11-3 00:00
289228237 发表于 2022-11-2 22:30
整合版的,按照顺序安装后,为什么我点了.py就闪了一下就没有下文了呢?

右键用IDLE运行看看结果,直接运行cmd窗口问题蛮多的
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 13:10

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表