在图书馆续写人生华章 发表于 2019-8-16 16:46

申请会员ID:LaureatePoet

1、申 请 I D:LaureatePoet
2、个人邮箱:poet@poetyin.com
3、原创技术文章:



某校教务系统选课脚本

```python
from selenium import webdriver
from time import sleep
import random
def Statement():
    print("         关于2018-2019学年第二学期本科生选课选教的通知\n"
          "杜绝恶意抢课行为。学校教学资源可以满足同学们有序、合理的选课需求,学\n"
          "生应当在本专业教学计划前提下量力而行、均衡选课,对利用非法抢课软件恶\n"
          "意抢课、扰乱正常选课秩序的行为,一经查实,学校将强行关闭涉事学生的账\n"
          "号,并依据相关条例予以追责!\n"
          "                                             教务处 2018年12月20日\n\n")

    print("声明:\n"
          "\n"
          "多谢你的支持,本程序只作学习交流使用,仅供个人研究\n"
          "之用,请下载后在24小时内删除,请勿用于商业及非法用\n"
          "途,如由此引起的相关法律法规责任,与Poet无关!\n")
    print("同意此声明请输入Y")
    key = input()
    if key != ('Y' or 'y'):
      print('Byebye~')
      sleep(2)
      exit()

def Rundriver(browser):
    print("此程序是借助python中的selenium,需要的环境/软件/驱动支撑有:Winodws/Linux、Google Chrome、Chromedrive.exe\n")
    print("详细教程请访问:\n"
          "-----------------参考文章-----------------\n"
          "1.官网 http://chromedriver.chromium.org/\n"
          "2.Github关于ChromeDriver的wiki https://github.com/SeleniumHQ/selenium/wiki/ChromeDriver\n"
          "3.如何快速下载、安装和配置chromedriver?https://jingyan.baidu.com/article/f7ff0bfcdd89ed2e27bb1379.html\n"
          "4.驱动的下载地址: http://chromedriver.storage.googleapis.com/index.html\n"
          "5.提醒一定要浏览器版本与插件版本相对应!\n"
          "!!!6.chromedriver.exe放到chrome的安装目录\n")

    print("请输入chromedriver.exe的路径(与chrome的安装目录一致),例如:\n"
          "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe")
    path = input()
    browser = webdriver.Chrome(path)
    browser.implicitly_wait(30)
    return browser

def login(browser):
    try:
      url = "http://my.hfut.edu.cn/login.portal"
      browser.get(url)
    except:
      pass
    count = 0

    while 1:
      print("尝试登录信息门户")
      while 1:
            try:
                print("输入用户名")
                username = input()
                browser.find_element_by_id("username").send_keys(username)
                print("输入密码(信息门户)")
                password = input()
                browser.find_element_by_id("password").send_keys(password)
                print("输入验证码")
                code = input()
                browser.find_element_by_id("code").send_keys(code)
                break
            except:
                count = count + 1
                print("页面加载失败,刷新重试..." + str(count))
                if browser.current_url == url:
                  try:
                        browser.refresh()
                  except:
                        pass
                else:
                  try:
                        browser.get(url)
                  except:
                        pass
                continue

      try:
            browser.find_element_by_xpath("//*[@id=\"loginForm\"]/table/tbody/tr/td/input").click()
            if browser.find_element_by_xpath("//*[@id=\"pp382\"]/a/span").text=="首页":
                print("登陆成功")
                print('正在进行身份核验>>>')
                break
      except:
            print(browser.find_element_by_xpath("//*[@id=\"loginMsg\"]").text)
            print("登录失败")
            login(browser)

def CheckID(browser,s):
    text1 = browser.find_element_by_xpath("//*[@id=\"pf281\"]/div/div/table/tbody/tr/td/div/ul/li").text
    VIPnum = text1[-10:]
    if s.find(VIPnum) < 0:
      print('身份有误!您没有权限使用此程序')
      sleep(2.66)
      exit()
    print('身份正确,欢迎大使用此程序')
    browser.implicitly_wait(120)

def EnterWeb(browser):
    try:
      url2 = "http://jxglstu.hfut.edu.cn/eams5-student/wiscom-sso/login"
      browser.get(url2)
    except:
      pass
    sleep(2)

    try:
      url2 = "http://jxglstu.hfut.edu.cn/eams5-student/for-std/course-select/"
      browser.get(url2)
    except:
      pass

    try:
      browser.find_element_by_xpath("/html/body/div/div/div/div/div/div/h4/a").click()
    except:
      pass

def CoreFunction(browser):
    try:
      print("请输入关键词   (建议:教学班号,因为这样可以保证下方只出现一个\"选课\"按钮,例如:0500075X--001 )   ")
      classname = input()
      browser.switch_to.window(browser.window_handles)
      browser.find_element_by_xpath("//*[@id=\"global_filter\"]").send_keys(classname)
    except:
      print("无法输入内容")
      pass
    print("请输入休眠时间区间(具体指点击“选课”到 弹出对话框出现 的时间)(用空格隔开),例如:1.2 2.6")
    a,b=input().split()
    count = 1
    select = browser.find_element_by_xpath("//*[@id=\"suitable-lessons-table\"]/tbody/tr/td/button")
    #off = browser.find_element_by_xpath("/html/body/div/div/div/div/button")
    browser.execute_script("$(arguments).click()", select)
    sleep(random.uniform(float(a), float(b)))
    message = browser.find_element_by_xpath("/html/body/div/div/div/div/h1").text
    while 1:
      print("第" + str(count) + "次选课:\n\t"+ message)
      if message == "选课成功":
            break
      #browser.execute_script("$(arguments).click()", off)
      count = count + 1
      browser.execute_script("$(arguments).click()", select)
      sleep(random.uniform(float(a), float(b)))
      message = browser.find_element_by_xpath("/html/body/div/div/div/div/h1").text
    print("恭喜你抢到" + classname + '!!!\n\n')
    print("如果还要继续抢其他课,请输入key")
    scanf=input()
    if scanf==('key'):
      EnterWeb(browser)
      CoreFunction(browser)
    else:
      print('祝您抢课愉快,生活幸福,再见!')
      sleep(2.66)
      exit()

def main():
    Statement()
    browser = None
    browser = Rundriver(browser)
    login(browser)
    s = 'Number_1,Number_2,...,Number_N'
    CheckID(browser,s)
    EnterWeb(browser)
    CoreFunction(browser)

main()
```

功能

[*]自定义“选课”点击区间(random)
[*]身份验证:代码可内置学号库,用户登陆后检测身份是否匹配,无权限使用自动关闭程序。
[*]多用户多任务执行:通过多开程序实现。

缺点(不足、待改进)

[*]本程序主要借助Python中的selenium库,所以需要使用驱动Chromedrive,有一定的软件环境要求(通用性差 可通过Requests)
[*]单线程效率低。
[*]程序简单没有特色。
[*]无更新,作者菜,需要努力学习。



博客地址:http://www.poetyin.com/2019/06/15/Xuanke-2019-01-Python-script/
GitHub地址:https://github.com/LaureatePoet/Poethfut/blob/master/Xuanke.py


Hmily 发表于 2019-8-19 17:25

抱歉,未能达到申请要求,申请不通过,可以关注论坛官方微信(吾爱破解论坛),等待开放注册通知。
页: [1]
查看完整版本: 申请会员ID:LaureatePoet