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
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、登录页面
我们需要输入用户名密码,如下图所示。
这部分代码是这样的:
在这个版块的代码第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)
第一步:在当前页面,按下F12,进入调试模式。(如图2)
第二步:找到这的网页源代码就行。
第三步:输入Python代码:
new=browser.get("http://jw.ahnu.edu.cn/student/for-std/course-select")
3、选课页面
如果一切顺利的话,现在程序应该正常进入进入了选课页面。
还是和第二步主页一样,锁定开始选课按钮的位置。
该部分代码如下:(具体意思在代码段里面)
#选课页面
#进入选课页面
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、首先将页面切换到校选课页面。因为默认打开的页面是培养方案,所以首先我们要切换到校选课页面。
b、因为我们是24h抢课,所以我们需要确定我们要抢的课。我这里抢的是:汉字与中国文化。(等会你需要在代码里面输入你要抢的课,课程名)
c、最麻烦的地方,锁定按钮位置,也就是这个选课。因为每个人想要的课不一样,定位会不一样。所以,参见主页的那个F12的方法,看看就会了。
分步骤就是:1、按F12,打开调试器 2、通过我说的那个小按钮,确定选课这个按钮对应的网页代码段 3、获取选课按钮的xpath路径。
备注:具体步骤可以这样:不用看上面的分步骤。先在那个选课按钮上,单击右键,会有一个小弹窗,选择“检查”,浏览器会自动锁定这个按钮的代码在哪。然后这个代码段处,单击右键,选择“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,如果你有不明白的地方,可以随时联系我。这样我们才能进步。