AHNU-新教务系统抢课代码(Python版)

PS:说在前面,我不是技术大牛,只是因为有需求带动我去钻研技术,所以难免会有不懂的地方,希望多多理解。
       这篇推文写出来,难免会被学校老师看见,我可能挨处分,但是,就是想分享一下技术,锻炼自己的代码能力。毕竟,某些特别少的课已经炒到了上百元一门课了。
       如果有老师看见这篇文章,也希望能理解我写程序的初心,希望教务处老师能多加一点课,整治一下抢课市场。



今天我们学校正好开启第三轮校选课选课,自己昨天晚上琢磨了一晚上,简单的了解一下Selenium这玩意,就是一个网页自动化测试,这个代码就是制作了鼠标连点器,一直点选课。如果了解原理后,可以用于网络爬虫等等。

警告:本文代码仅做测试学习使用,不得用于破坏学校教务系统,有损学校利益的事情。望各位知悉~~谢谢啦

本文也不知道有多少,边说边写叭。


一、准备工具
     1、编程语言及编译器
              Python,编译器是Pycharm。
     2、需要的包
              time包:用于等待系统弹出结束
              selenium包:自动化测试,也就是这个抢课的核心。
    3、浏览器
              我用的是谷歌浏览器,其他的浏览器能不能用我的代码我不太了解,但是谷歌浏览器可以运行的。
              浏览器需要一个驱动,这个的话,链接在这里:
              https://chromedriver.storage.googleapis.com/index.html
              你需要选择你的谷歌浏览器版本对应的驱动版本,然后解压。
              这部分内容可以百度就行,有很多教程,我就不多啰嗦。搜索的内容无非是:谷歌浏览器驱动、selenium之类的,就会有这些东西。因为我昨晚搜过,有些同学已经写好了教程,使用代码的时候,注意看就行。

           https://blog.csdn.net/seedinspring/article/details/89850331?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&dist_request_id=a71e0228-0e81-4e7f-b98a-309c4481d485&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control

             AHNU-新教务系统抢课代码(Python版)_第1张图片

     4、你需要在你的Python提前安装库。

            必要的安装知识见此链接:

                 http://www.python3.vip/tut/auto/selenium/01/

           配套视频

                https://www.bilibili.com/video/BV1Z4411o7TA?p=26

代码语句就是:(需要win+r进入“运行”,然后输入“cmd”,敲回车,再输入代码。)

pip install selenium

 

二、代码部分
      我按照逻辑顺序,一一说明。
      1、登录页面
                 我们需要输入用户名密码,如下图所示。

              AHNU-新教务系统抢课代码(Python版)_第2张图片

              这部分代码是这样的:

                       在这个版块的代码第4行和第6行。把那块文字内容替换为你的用户名和密码就行。send_keys()这玩意就是自动帮你填信息,直接替换就行。引号不要删,‘\n’不要删。

                                  想要知道具体原理的话,就自己百度一下,这块内容就行。这里我们说怎么用。             

#登录页面
    xk=browser.get("http://jw.ahnu.edu.cn/student/home?refer=http://jw.ahnu.edu.cn/student/for-std/course-select/single-student/turns")
    name = browser.find_element_by_id('u')
    name.send_keys('你的用户名\n') #输入用户名
    password= browser.find_element_by_id('p')
    password.send_keys('你的密码\n') #输入密码

     2、下一步是进入主页

                           我们需要锁定你的选课这个按钮的位置。

                               按照如下的位置,寻找选课的位置。(很重要很重要,如图1)

                              第一步:在当前页面,按下F12,进入调试模式。(如图2)

AHNU-新教务系统抢课代码(Python版)_第3张图片 图1:主页功能栏

                                第一步:在当前页面,按下F12,进入调试模式。(如图2)

AHNU-新教务系统抢课代码(Python版)_第4张图片 图2定位

                                     第二步:找到这的网页源代码就行。

                                    第三步:输入Python代码:

new=browser.get("http://jw.ahnu.edu.cn/student/for-std/course-select")

 

    3、选课页面

                              如果一切顺利的话,现在程序应该正常进入进入了选课页面。

                             还是和第二步主页一样,锁定开始选课按钮的位置。

                             

AHNU-新教务系统抢课代码(Python版)_第5张图片 确定位置

 

                             该部分代码如下:(具体意思在代码段里面)

                              

#选课页面
    #进入选课页面
    into=browser.get("http://jw.ahnu.edu.cn/student/for-std/course-select/2308/turn/403/select")
    #into.find_element_by_xpath('/html/body/div/div[1]/div/div/div[2]/div[3]/div[2]/a')
    #睡眠,等待选课页面那个弹出的弹窗可以选择关掉
    time.sleep(7)
    #下面三行代码就是关闭这个弹窗
    windows = browser.window_handles
    browser.switch_to.window(windows[-1])   #切换到最新出现的弹窗
    browser.find_element_by_id('bulletinBtn').click() #点击关闭

 

4、选课页面

           在这里,你需要做的事情有点多,我慢慢说。

               a、首先将页面切换到校选课页面。因为默认打开的页面是培养方案,所以首先我们要切换到校选课页面。

               

AHNU-新教务系统抢课代码(Python版)_第6张图片 切换到校选课页面

 

               b、因为我们是24h抢课,所以我们需要确定我们要抢的课。我这里抢的是:汉字与中国文化。(等会你需要在代码里面输入你要抢的课,课程名)

                       

AHNU-新教务系统抢课代码(Python版)_第7张图片 确定你要抢的课

                c、最麻烦的地方,锁定按钮位置,也就是这个选课。因为每个人想要的课不一样,定位会不一样。所以,参见主页的那个F12的方法,看看就会了。

                         分步骤就是:1、按F12,打开调试器    2、通过我说的那个小按钮,确定选课这个按钮对应的网页代码段  3、获取选课按钮的xpath路径。

                               

AHNU-新教务系统抢课代码(Python版)_第8张图片 选课按钮的代码段

                   备注:具体步骤可以这样:不用看上面的分步骤。先在那个选课按钮上,单击右键,会有一个小弹窗,选择“检查”,浏览器会自动锁定这个按钮的代码在哪。然后这个代码段处,单击右键,选择“Copy” ——> 选择“Copy XPath”就行了。然后接下来就是替换代码了。

                  代码段(意思已经注释)

                  

#特色课程
    #还是切换窗口,回到最新的窗口
    windows = browser.window_handles
    browser.switch_to.window(windows[-1])
    #切换到校选课页面
    browser.find_element_by_xpath('//*[@id="tabs"]/li[2]/a').click()
    #输入你要抢的课,,引号不要删
    browser.find_element_by_xpath('//*[@id="public"]/div[1]/div/div/div/div[1]/input').send_keys('你要抢的课(输入文字)')
    #把复制的xpath路径放在这里,引号不要删
    browser.find_element_by_xpath('粘贴你刚刚复制的那个xpath路径').click()

 

5、无限重复

        如果顺利的话,现在你应该完成了自动抢课,但是我们需要不断重复,那么我们需要加个while循环,让他不断循环

       代码段如下:

         

#无限循环
   #while的判断条件是只要有新的弹窗出现,就说明我们没抢到,所以继续下一次循环
while(len(browser.window_handles)==1):
        #等待抢课结果
        time.sleep(2)
        windows = browser.window_handles
        browser.switch_to.window(windows[-1])
        browser.find_element_by_xpath('//*[@id="modal-info-content"]/div[3]/div/div/div[3]/button').click()
        #把下面这行文字,替换为刚才你复制的那个XPth,冒号不要删
        browser.find_element_by_xpath('还是放之前说的那个xpath路径').click()

基本上我们整个抢课代码就这样,很简单,如果代码不理解或者我没说清楚,可以百度百度就行。很快就上手了~~

完整代码如下:(注意替换代码噢)

from selenium import webdriver
import time
#创建浏览器对象(打开浏览器)
browser = webdriver.Chrome()
browser.implicitly_wait(10)


for i in range(0,10) :
    #登录页面
    xk=browser.get("http://jw.ahnu.edu.cn/student/home?refer=http://jw.ahnu.edu.cn/student/for-std/course-select/single-student/turns")
    name = browser.find_element_by_id('u')
    name.send_keys('你的用户名\n') #输入用户名
    password= browser.find_element_by_id('p')
    password.send_keys('你的密码\n') #输入密码

    #主页

    new=browser.get("http://jw.ahnu.edu.cn/student/for-std/course-select")

    #选课页面
    into=browser.get("http://jw.ahnu.edu.cn/student/for-std/course-select/2308/turn/403/select")
    time.sleep(7)

    windows = browser.window_handles
    browser.switch_to.window(windows[-1])
    browser.find_element_by_id('bulletinBtn').click()
    #特色课程

    windows = browser.window_handles
    browser.switch_to.window(windows[-1])
    browser.find_element_by_xpath('//*[@id="tabs"]/li[2]/a').click()
    browser.find_element_by_xpath('//*[@id="public"]/div[1]/div/div/div/div[1]/input').send_keys('你要抢的课')
    browser.find_element_by_xpath('粘贴xpath的路径').click()
    while(len(browser.window_handles)==1):
        time.sleep(2)
        windows = browser.window_handles
        browser.switch_to.window(windows[-1])
        browser.find_element_by_xpath('//*[@id="modal-info-content"]/div[3]/div/div/div[3]/button').click()
        browser.find_element_by_xpath('粘贴xpath的路径').click()
    break

参考链接:

 1、selenium相关知识:http://www.python3.vip/tut/auto/selenium/01/ 

技术层面欢迎大佬们和我讨论,我在锻炼我的代码能力,希望和大佬们一起讨论,了解更多知识。

我的QQ是:871612098,如果你有不明白的地方,可以随时联系我。这样我们才能进步。

 

你可能感兴趣的:(Selenium,selenium)