• 简单学生抢课系统

    2020-06-03 23:32:49
    使用请注明出处,小编水平有限,请勿吐槽!!如果你有任何的问题,欢迎留言!
  • 本篇博客目的仅为了读者学习Java,任何用于非法途径与本人无关,欢迎大家学习,本类型博客不作为讲解博客,仅作为记录!! 如果你单纯复制代码,肯定没用! 本篇只是提供一种思路,复制无效! 文末无完整代码 ...

    声明:
    本篇博客目的仅为了读者学习Java,任何用于非法途径与本人无关,欢迎大家学习,本类型博客不作为讲解博客,仅作为记录!!
    如果你单纯复制代码,肯定没用!

    本篇只是提供一种思路,复制无效!
    文末无完整代码

    登陆模块

    判断密码正误

    首先像这样,输入密码,并验证密码正确性!!!

    while (true){
                System.out.printf("请输入学号:\n>");
                username = in.nextLine();
                System.out.printf("请输入密码:(无回显)\n>");
    //            password = in.nextLine();
                char[] s = console.readPassword();
                password = String.valueOf(s);
                boolean condition = Check_info(session,username,password);
                if (condition){
                    break;
                }
            }
    

    然后接下来是登陆模块

    class Login {
        public static Map<String, Object> headers = new HashMap<>();
        public static boolean operate(Session session,String username,String password) {
            Captcha captcha = new Captcha();
            cookieGet(session);
            String captcha_value = captcha.pictureResult(session);
            if(login(session,username,password,captcha_value)){
                System.out.println("登陆成功");
                System.out.println("------------------------------------我是分界线--------------------------------------------");
                return true;
            }else{
                System.out.println("登陆失败,请检查用户名和密码是否正确");
                System.out.println("------------------------------------我是分界线--------------------------------------------");
                return false;
            }
    
        }
        public static void cookieGet(Session session){
            String url = "http://202.115.47.141";
            headers.put("Host","202.115.47.141");
            headers.put("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3754.400 QQBrowser/10.5.4034.400");
            headers.put("Referer","http://202.115.47.141/login?errorCode=badCaptcha");
            headers.put("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3754.400 QQBrowser/10.5.4034.400");
            Map params = new HashMap<>();
            RawResponse result = session.get(url).headers(headers).send();
        }
        public static boolean login(Session session, String username, String password, String captcha_value){
            Map params = new HashMap<>();
            headers.put("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3754.400 QQBrowser/10.5.4034.400");
            headers.put("Host", "zhjw.scu.edu.cn");
            headers.put("Origin","http://zhjw.scu.edu.cn");
            params.put("j_username", username);
            params.put("j_password", password);
            params.put("j_captcha", captcha_value);
            System.out.println("正在登录教务处,请稍候");
            String result2  = session.post("http://zhjw.scu.edu.cn/j_spring_security_check")
                    .body(params)
                    .headers(headers)
                    .send()
                    .readToText();
    
            if(result2.contains("URP")){
                return true;
            }else {
                return false;
            }
        }
    
    }
    

    关于验证码思路的处理

    然后就是关于验证码了,验证码有很多方法,其中一种就是基于我Python脚本里面的思路,这是链接,点击直达页面

    然后可能会问到关于验证码识别的问题,第一种是人工识别,第二种可以自己做训练集,第三种最简单,掉一个网上的API直接返回值,大概1元钱100此,大家可以试试,代码我就不发了,自己动手丰衣足食!

    展开全文
  • 本系列博客目的仅为了读者学习Java,任何用于非法途径与本人无关,欢迎大家学习,本类型博客不作为讲解博客,仅作为记录!! 如果你单纯复制代码,肯定没用! 本篇只是提供一种思路,复制无效! 文末无完整代码 ...

    声明:
    本系列博客目的仅为了读者学习Java,任何用于非法途径与本人无关,欢迎大家学习,本类型博客不作为讲解博客,仅作为记录!!
    如果你单纯复制代码,肯定没用!

    本篇只是提供一种思路,复制无效!
    文末无完整代码

    FD抓包

    (不想给你们代码暂时不想开源,不然教务处系统压力太大了,最多给你们看下数据,其他有能力自行解决,但有讲解)

    首先是查询界面

    ①这是你们查询课程的界面,注意全是中文,成功以后返回rwRxkZlList这里面的JSON数据很明显,全是拼音,至于干嘛用的,你也懂,课程信息在里面
    在这里插入图片描述

    ②抢课界面(在这之前你们需要获取tokenValue,啥是token??自行百度)
    之后你们拼接课程信息,还有个参数fajhh别拿我的参数,这代表你的培养方案,了解?不然选到课了也是网安的方案,得不偿失!kcms这是啥数据,我只能告诉你ASCII码,其他自己yy!
    在这里插入图片描述

    ③看图说话,这个是查询是否选课成功!懂我意思?
    在这里插入图片描述

    ④题外话,还有些隐藏的API你们可以自己去找,我有但不会给你,暂时不开源,等教务处好一点了后考虑开源,但仅供学习使用,任何用于非法行为的使用与本人无关!

    展开全文
  • 利用Tampermonkey写脚本抢课学校抢课…实在抢不到,于是想到了利用脚本不断刷新页面,来捡漏子。 听了实验室大神的推荐,选用了tampermonkey插件来写脚本。 在谷歌应用商店搜索tampermonkey并安装 安装完后选择添加...

    利用Tampermonkey写脚本抢课

    学校抢课…实在抢不到,于是想到了利用脚本不断刷新页面,来捡漏子。
    听了实验室大神的推荐,选用了tampermonkey插件来写脚本。

    1. 在谷歌应用商店搜索tampermonkey并安装
    2. 安装完后选择添加脚本
    3. 绑定执行脚本的页面
    4. 这里有个坑,关于要不要require jquery的问题。
      1. 如果绑定的页面中已引用jq了,就不要添加require jq了,否则会冲突
      2. 如果没有,则记得添加jq
    5. 然后写脚本就是了

      以下是针对我抢课页面的脚本代码,写这篇博客的过程中,课已经抢到了,哈哈哈~

     (function() {
        'use strict';
       //return;
        $('table tr').each(function(){
            var lesson = $(this).find("td").eq(1).children('span').text();
                if(lesson == 'Java技术' || lesson == '有效共同技巧(MOOC)'){
                    if($(this).children('td').eq(7).children('a').text() != ''){
                        $(this).children('td').eq(7).children('a').trigger('click');
    
                        console.log(window.frames[0].document.querySelectorAll('input[id=contentParent_dgData_ImageButton1_0]'));
                        setTimeout(function(){
                            $(window.frames[0].document.querySelectorAll('input[id=contentParent_dgData_ImageButton1_0]')).click();
                            $('#contentParent_dgData_ImageButton1_0').click();
    
                            console.log('chose class now !');
                        }, 2000);
                    }
                     else{
                         location.reload();
                     }
                }
            });
    
       // setTimeout(location.reload(), 10000);
    
        // Your code here...
    })();

    代码由公司的大神帮忙写出来的,其中有些地方现在还不是很了解,因为涉及到页面中动态加载的内容,用普通的jq选择器没法选择到新增的元素,因此用到了

    $(window.frames[0].document.querySelectorAll('input[id=contentParent_dgData_ImageButton1_0]')).click();

    这段神奇的代码。有空我还是得好好学习下原生的javascript,值得学习的地方还很多呀。

    展开全文
  • 今天又看到一个学生为了在学校抢课又写了一个抢课的脚本。真的不佩服,不禁感慨,我的校园生活怎么就浪费了呢。 选用了tampermonkey插件来写脚本。 在谷歌应用商店搜索tampermonkey并安装,如果谷歌打不到,就到...

    去年无意间有看过一款交大选课插件,觉得现在的学生都好NIUbility,为了选课能搞出一个chrome插件。今天又看到一个学生为了在学校抢课又写了一个抢课的脚本。真的不佩服,不禁感慨,我的校园生活怎么就浪费了呢。

    选用了tampermonkey插件来写脚本。
    在谷歌应用商店搜索tampermonkey并安装,如果谷歌打不到,就到http://www.cnplugins.com/office/tampermonkey/下载
    安装完后选择添加脚本,绑定执行脚本的页面,这里有个坑,关于要不要require jquery的问题。 
    如果绑定的页面中已引用jq了,就不要添加require jq了,否则会冲突
    如果没有,则记得添加jq
    然后写脚本就是了!
    以下是针对我抢课页面的脚本代码,写这篇博客的过程中,课已经抢到了,哈哈哈~

     (function() {
        'use strict';
       //return;
        $('table tr').each(function(){
            var lesson = $(this).find("td").eq(1).children('span').text();
                if(lesson == 'Java技术' || lesson == '有效共同技巧(MOOC)'){
                    if($(this).children('td').eq(7).children('a').text() != ''){
                        $(this).children('td').eq(7).children('a').trigger('click');
    
                        console.log(window.frames[0].document.querySelectorAll('input[id=contentParent_dgData_ImageButton1_0]'));
                        setTimeout(function(){
                            $(window.frames[0].document.querySelectorAll('input[id=contentParent_dgData_ImageButton1_0]')).click();
                            $('#contentParent_dgData_ImageButton1_0').click();
    
                            console.log('chose class now !');
                        }, 2000);
                    }
                     else{
                         location.reload();
                     }
                }
            });
    
       // setTimeout(location.reload(), 10000);
    
        // Your code here...
    })();
    • 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

    代码由公司的大神帮忙写出来的,其中有些地方现在还不是很了解,因为涉及到页面中动态加载的内容,用普通的jq选择器没法选择到新增的元素,因此用到了

    $(window.frames[0].document.querySelectorAll('input[id=contentParent_dgData_ImageButton1_0]')).click();
    • 1

    这段神奇的代码。有空我还是得好好学习下原生的javascript,值得学习的地方还很多呀。

    另外找到了Electsys++ 交大选课插件的下载地址:http://www.cnplugins.com/fuzhu/electsys-jiaodaxuankechajian/

    希望可以帮助到在校抢课的学生哦,加油!

    展开全文
  • 多线程一直是热门问题,用好了能保证数据的安全性,用差了小则降低程序的性能,大则使程序崩溃,今天小编用一个高校学生选课的实例来模拟一下Java中的生产者与消费者问题。如果把学生选课的逻辑简单化,我们可以将其...

       多线程一直是热门问题,用好了能保证数据的安全性,用差了小则降低程序的性能,大则使程序崩溃,今天小编用一个高校学生选课的实例来模拟一下Java中的生产者与消费者问题。如果把学生选课的逻辑简单化,我们可以将其映射到多线程的生产者和消费者问题上。

       需求:管理员设置一定数量的选修课供学生来选择,当选修课的数量降为0时,学生们停止选课,并通知管理员添加课程,当管理员添加课程完毕后,通知学生们可以选课了。这里的学生就是消费者,而老师就是生产者。

       图解:

        


      课程代码

    public class Courses {
    
    	private  int subjectNum=20;
    	
    	public synchronized void set(){
    		//如果有数据就等待
    		if(subjectNum>=0){
    			try {
    				this.wait();
    			} catch (InterruptedException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}
    		
    		//设置数据
    		subjectNum= 20;
    		System.out.println("又重新加了" + subjectNum + "个课程");
    		this.notify();
    	}
    	
    	
    	public synchronized void get(){
    		//如果有数据就等待
    		if(subjectNum<0){
    			try {
    				System.out.println("课程被选完了,请等待管理员添加课程");
    				this.notify();
    				this.wait();
    			} catch (InterruptedException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}else{
    			System.out.println("课程被剩余" + ":" + subjectNum);
    			subjectNum--;
    			
    		}
    	}
    
    }

       生产者代码
    public class SetThread implements Runnable {
    
    	
    	private Courses c;
    	
    	public SetThread(Courses c){
    		this.c=c;
    	}
    	@Override
    	public void run() {
    		// TODO Auto-generated method stub
    		while(true){
    			c.set();
    		}
    	}
    
    }

       消费者代码
    public class GetThread implements Runnable {
    
    	private Courses c;
    	public GetThread(Courses c){
    		this.c=c;
    	}
    	
    	@Override
    	public void run() {
    		// TODO Auto-generated method stub
    			while(true){
    				c.get();
    			}
    	}
    
    }

       执行选课代码

    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    
    public class SelectCoursesDemo {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
            Courses c =new Courses();
            
            SetThread st =new SetThread(c);
            GetThread gt1=new GetThread(c);//选课学生甲
            GetThread gt2=new GetThread(c);//选课学生乙
            GetThread gt3=new GetThread(c);//选课学生丙
    
            ExecutorService pool=Executors.newFixedThreadPool(4);//声明一个线程池,里面放四个线程
            
            pool.submit(st);
            pool.submit(gt1);
            pool.submit(gt2);
            pool.submit(gt3);
    		
    	}
    
    }

      效果图:

      

      小结

      上面就是Java多线程中的生产者与消费者问题,例子挺简单,将选课的逻辑化简了,归根到底,其实选课就是生产者和消费者问题,只不过是逻辑复杂了写。另外,利用线程池来创建线程比单独实例化线程对象耗费的性能要底,因为当系统不再用某个线程时,不是将此线程当垃圾回收,而是放到线程池中,等待下次用的时候再取出来,这就节省了系统重新创建线程和销毁线程的性能。


    展开全文
  • 一面这周获得了阿里巴巴的面试邀请,应聘的岗位为支付宝内某IOT部门的JAVA软件工程师。面试时间是通过电话面试1天后通知我的,地点为高端的上海大厦。接到面试通知后的我,即高兴又有些胆怯。高兴的是:全国数一数二...
  • 这两天来到发小扬州这边,学习实现了这个功能,并且用java和python都写了一下,但是鉴于web端只会java,最后集成到springboot部署到服务器提供的小服务。 以前只知道这些东西是爬虫爬出来的,原本以为非常简单,...
  • 使用Java模拟登录KINGOSOFT青果教务系统(一)前言分析登录流程0x10x20x30x4chapter 1chapter 2chapter 3capter 4chapter 5chapter 5.1chapter 5.2chapter 5.3chapter 6chapter 7chapter 8总结 前言 首先,我们...
  • 前言只有光头才能变强。文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y0、final关键字简要说一...
  • 前言 只有光头才能变强 Redis目前还在看,今天来分享一下我在秋招看过(遇到)的一些面试题(相对比较常见的) 0、final关键字 简要说一下final关键字,final可以用来修饰什么? 这题我是在真实的面试中遇到的,当时...
  • ScuSelectcourse.rar

    2020-06-03 23:33:19
    本人原创,基于Java的SCU抢课脚本以及微服务签到脚本,仅供学习使用,切勿用于商业途径,任何因此造成的损失与本人无关;基于Maven仓库搭建,代码健壮性一般,核心技术CSS选择,正则表达式,HTTP请求模拟,验证码...
  • 因为今天有些迷茫,不知道之后想要干什么,加上很久没有写过博客了,所以现在来记录一下最近在忙些什么,理一下思路,规划一下之后的学习内容。今天进入了11月份,不知不觉将近过去了半个学期,还是挺快的。 从暑假...
  • urp教务系统简单利用

    2019-01-02 14:42:26
    在学校上了这么长时间,由于对课表选课的不习惯,就逐渐产生了对教务系统简单的了解,希望可以以此学习 本次测试版本:   参考:https://www.secpulse.com/archives/26974.html 漏洞类型 文件...
  • 作者:Java3y前言只有光头才能变强Redis目前还在看,今天来分享一下我在秋招看过(遇到)的一些面试题(相对比较常见的)0、final关键字简要说一下final关键字,final可以用来修饰什么?这题我是在真实的面试中遇到的,...
  • 文章目录书籍列表PythonJavaC语言PHPHtmlJavaScript其他杂书我曾经的学习路线pythonweb安全 书籍列表 Python 《Python官方文档》— 确实不错只是很枯燥 《菜鸟教程》-不是书是个网站,当时拿来看基础语法的,还可以 ...
  • 今年北邮选课系统又奔溃了,所以在选课的时候看到了所有系统奔溃的界面 ...今天又看到一个学生为了在学校抢课又写了一个抢课的脚本。真的不佩服,不禁感慨,我的校园生活怎么就浪费了呢。 选用了tamp...
1 2
收藏数 39
精华内容 15