山东大学本科生爬虫自动选课–(水)
大四老学长了,想整个水一点的限选课,结果没课余量;
so,想写个爬虫自动抢课,如果有某位同学退了课的话(或许苦逼的点错了?)
很水的爬虫,大佬轻喷。
- 登录选课系统
- 定位到课余量
- 课余量为0,刷新页面,等若干秒,转2
- 直接选课
直接上代码
from selenium import webdriver
from selenium.webdriver import ActionChains
import time
# 调起浏览器,打开网页
url ="http://bkjwxk.sdu.edu.cn/f/common/main"
driver = webdriver.Chrome()
driver.get(url)
# 用于定位登录
pos1 ='//*[@id="un"]'
pos2 ='//*[@id="pd"]'
pos3 ='//*[@id="index_login_btn"]'
username = '*****'
password = '*****'
actions=ActionChains(driver)
# 学生登录
pos='//*[@id="redirectButtonId"]'
driver.find_element_by_xpath(pos).click()
driver.find_element_by_xpath(pos1).clear()
driver.find_element_by_xpath(pos1).send_keys(username)
driver.find_element_by_xpath(pos2).clear()
driver.find_element_by_xpath(pos2).send_keys(password)
driver.find_element_by_xpath(pos3).click()
actions.perform()
driver.switch_to_window(driver.window_handles[-1])
# 用于定位课余量
# 很水的是,我直接在网页检查里,找到位置,右键copy的xpath;
p1='//*[@id="wsxk"]'
p2='//*[@id="xxkxk"]'
p3='//*[@id="kcTable"]/tbody/tr[5]/td[7]/span'
while True:
try:
while True:
driver.find_element_by_xpath(p1).click()
driver.switch_to_window(driver.window_handles[-1])
driver.find_element_by_xpath(p2).click()
driver.switch_to_window(driver.window_handles[-1])
kk=driver.find_element_by_xpath(p3)
if kk.text != '0':
break
# 课余量是0 就刷新页面(这网站还要把前面的定位过程再来一遍,然后就。。
# 网页刷新成鬼畜了,就一直抖抖抖。。。
driver.refresh()
# 有课余量就选课啦
p4='//*[@id="kcTable"]/tbody/tr[5]/td[11]/a'
driver.find_element_by_xpath(p4).click()
driver.switch_to_window(driver.window_handles[-1])
p5='/html/body/div[1]/div/table/tbody/tr[2]/td[2]/div/table/tbody/tr[3]/td/div/button[1]'
driver.find_element_by_xpath(p5).click()
actions.perform()
exit(0)
# 整了这个try,因为,前面定位元素,有时会找不到,于是这么用了两个while
# 至于原因,我也不知道(水!)
except BaseException as msg:
time.sleep(10) # 让电脑休息会,心疼她
# 主要看同学退课,及时抢先选上。
上午上完课回来,啊,我选上了!