布景某些黉舍的选课规定是只能在特按时候,由上千人同时登陆教务系统,拔取数目不充沛的课程。 笔者以为这样的选课法则明显是有题目标,在信息化如此发财的现代社会,采纳这类“抢课”的方式,恍如回到原始社会的大草原上追逐猎物,只要精神充分、命运好的猎人材能追到猎物。 但若何在现有选课法则下选到课,还得用魔法来打败魔法。在选课竣事后,笔者一门课程也没有选到,是以笔者尝试编写一个自动化剧本。剧本每隔固按时候革新选课网页,当有同学退课时,立即报名。理论表白,这类战略很是有用,三周内成功选到一切七门课程。 祝大师都能选上心仪的课程! 实现自动化剧本采用Python说话编写,利用selenium库模拟阅读器操纵,利用ddddocr库识别考证码。分为自动登录 → \rightarrow →革新网页 → \rightarrow →报名课程三个步调。 自动登录教务系统凡是有考证码,可采用第三方库ddddocr识别后,再自动输入。 def Identify_verifi_code(driver): driver.save_screenshot("D:\\2.png") #//获得页面截图 img = Image.open('D:\\2.png') ## 翻开2.png文件,并赋值给img region = img.crop((650,438,772,491)) #//对获得的截图停止裁剪 region.save('D:\\3.png') #//保存裁剪后的图片 ocr = ddddocr.DdddOcr() #//导入考证码识别 with open("D:\\3.png", "rb") as f: img_bytes = f.read() res = ocr.classification(img_bytes) #//将识别出来的考证码赋给res return res 途径和图片名可以按需变动。 革新网页def do_login(driver): driver.maximize_window() #将窗口最大化 my_action=ActionChains(driver) verifi_code = Identify_verifi_code(driver) #识别考证码 # 找到登录框 输入账号密码 driver.find_element(By.ID, 'UserId').send_keys(username)#输入用户名 driver.find_element(By.ID, 'Password').send_keys(password)#输入密码 driver.find_element(By.ID, 'VeriCode').send_keys(verifi_code)#输入考证码 time.sleep(6) wait = WebDriverWait(driver, 10) #10秒内每隔500毫秒扫描1次页面变化,当出现指定的元素后竣事。 wait.until(lambda driver: driver.find_element(By.XPATH, login)) driver.find_element(By.XPATH, login).click() #点击登录 wait = WebDriverWait(driver, 20) #20秒内每隔500毫秒扫描1次页面变化,当出现指定的元素后竣事。 wait.until(lambda driver: driver.find_element(By.XPATH, goverment)) driver.find_element(By.XPATH, goverment).click()#点击培育治理 time.sleep(1) driver.find_element(By.XPATH, lecture_sign_up).click() time.sleep(5) count = 0 while True: count = count + 1 print(count, end = " ") print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))) for lecture in lectures: time.sleep(1) driver.switch_to.frame('mainFrame') time.sleep(2) driver.find_element(By.CLASS_NAME,lecture_name).send_keys(lecture) #输入讲座题目文本框 time.sleep(1) driver.find_element(By.XPATH, query).click() #点击查询 time.sleep(2) driver.find_element(By.XPATH, sign_up).click() #点击报名 time.sleep(1) driver.find_element(By.XPATH, submit).click() #点击肯定 time.sleep(1) driver.switch_to.parent_frame() driver.find_element(By.XPATH, lecture_sign_up).click() time.sleep(90) 报名课程if __name__ == '__main__':# 模拟阅读器翻开网站 # 增加参数 options = Options() # 封闭沙盒启动 options.add_argument('--no-sandbox') driver = webdriver.Chrome(chrome_options = options) driver.get(url) # 登录并查询 try: do_login(driver) except: driver.quit() driver = webdriver.Chrome(chrome_options = options) driver.get(url) do_login(driver) 完整源码# -*- coding: utf-8 -*- #2022/10/28 #自动革新网站,查询讲座残剩名额,自动报名 from selenium import webdriver from selenium.webdriver.support.select import Select from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.action_chains import ActionChains from PIL import Image import time import ddddocr import base64 # 只需点窜下面三项即可 学号 密码 网址 username = "12345678" password = "88888888" url = "https://login.com" lectures = [] # lectures.APPend("大坝平安技术前沿与创新范畴") # lectures.append("梯级水库群结合调剂高效优化方式研讨") # lectures.append("海上风电桩基冲洗与防护研讨与前沿") # lectures.append("高坝泄洪消能研讨停顿") # lectures.append("在高原探访铅锌宝藏") lectures.append("好氧颗粒污泥的研讨和利用:新净化物影响与稳定运转") # lectures.append("大致积混凝土无人运浇系统模子研讨") # F12找到这些位置的 full XPath login = "/html/body/div[2]/form/div/div[1]/div[5]/button" #登录 goverment = "/html/body/div[2]/div/div[1]/div[3]/div[2]/a"#培育治理 lecture_sign_up = "/html/body/div[2]/div/div[1]/div[3]/div[2]/ul/li[14]/a"#博导讲座报名 lecture_name = "textbox-text.validatebox-text.textbox-prompt" #讲座题目 lecture_name_text = "textbox-text.validatebox-text" #讲座题目 query = "/html/body/div[1]/div/div/div/div[2]/a/span/span[1]"#查询 sign_up = "/html/body/div[1]/div/div/div/div[3]/div/div[1]/div[2]/div[2]/table/tbody/tr/td[10]/div/a[2]"#报名讲座 submit = "/html/body/div[3]/div[2]/div[4]/a/span"#肯定 # 识别考证码 def Identify_verifi_code(driver): driver.save_screenshot("D:\\2.png") #//获得页面截图 img = Image.open('D:\\2.png') ## 翻开2.png文件,并赋值给img region = img.crop((650,438,772,491)) #//对获得的截图停止裁剪 region.save('D:\\3.png') #//保存裁剪后的图片 ocr = ddddocr.DdddOcr() #//导入考证码识别 with open("D:\\3.png", "rb") as f: img_bytes = f.read() res = ocr.classification(img_bytes) #//将识别出来的考证码赋给res return res # 模拟登陆打卡 def do_login(driver): driver.maximize_window() #将窗口最大化 my_action=ActionChains(driver) verifi_code = Identify_verifi_code(driver) #识别考证码 # 找到登录框 输入账号密码 driver.find_element(By.ID, 'UserId').send_keys(username)#输入用户名 driver.find_element(By.ID, 'Password').send_keys(password)#输入密码 driver.find_element(By.ID, 'VeriCode').send_keys(verifi_code)#输入考证码 time.sleep(6) wait = WebDriverWait(driver, 10) #10秒内每隔500毫秒扫描1次页面变化,当出现指定的元素后竣事。 wait.until(lambda driver: driver.find_element(By.XPATH, login)) driver.find_element(By.XPATH, login).click() #点击登录 wait = WebDriverWait(driver, 20) #20秒内每隔500毫秒扫描1次页面变化,当出现指定的元素后竣事。 wait.until(lambda driver: driver.find_element(By.XPATH, goverment)) driver.find_element(By.XPATH, goverment).click()#点击培育治理 time.sleep(1) driver.find_element(By.XPATH, lecture_sign_up).click() time.sleep(5) count = 0 while True: count = count + 1 print(count, end = " ") print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))) for lecture in lectures: time.sleep(1) driver.switch_to.frame('mainFrame') time.sleep(2) driver.find_element(By.CLASS_NAME,lecture_name).send_keys(lecture) #输入讲座题目文本框 time.sleep(1) driver.find_element(By.XPATH, query).click() #点击查询 time.sleep(2) driver.find_element(By.XPATH, sign_up).click() #点击报名 time.sleep(1) driver.find_element(By.XPATH, submit).click() #点击肯定 time.sleep(1) driver.switch_to.parent_frame() driver.find_element(By.XPATH, lecture_sign_up).click() time.sleep(90) if __name__ == '__main__': # 模拟阅读器翻开网站 # 增加参数 options = Options() # 封闭沙盒启动 options.add_argument('--no-sandbox') driver = webdriver.Chrome(chrome_options = options) driver.get(url) # 登录并查询 try: do_login(driver) except: driver.quit() driver = webdriver.Chrome(chrome_options = options) driver.get(url) do_login(driver) 需要获得打包源文件的点这里获得哦 |
小编在之前就介绍过很多油猴里的神器插件,这里给大家总结几款经典中的经典。01Usersc
shell是外壳的意思,就是操作系统的外壳。我们可以通过shell命令来操作和控制操作系统
作者:厚昌学院特聘讲师,厚昌学院顾问团队核心成员,从事互联网行业从事互联网行业8
前言「油猴脚本」是一段脚本代码,通过它可以让浏览器实现各种各样的扩展功能,和浏览
shell 是一个应用程序,它连接了用户和 Linux 内核,让用户能够更加高效、安全、低成
关注扩展迷、喜欢折腾电脑的小伙伴们,应该都对各种各样的浏览器插件不陌生了。浏览器
Tampermonkey 是一款免费的浏览器扩展和最为流行的用户脚本管理器,它适用于 Chrome,
油猴脚本管理器的超详细下载安装使用教程——新手必看油猴可以帮你干什么:全网VIP视
参考文章和视频:将iPad作为Mac Mini主屏幕的实现方法视频:无屏自动启动随航 iPad作为M
在运营短视频时,你有没有遇到过这样的问题:1、拍了一半发现拍摄场景不行;2、拍摄过
我们先看一下这个脚本的下载效果。我是100M的宽带,这直接能飙到20MB/s,所以下载速度
写脚本?对于没有视频背景的朋友来说可能就会有疑问,脚本是什么?不应该是电影,电视
本内容来源于@什么值得买APP,观点仅代表作者本人 |作者:Stark-C大家好,我是Stark-
初次见面,大家好。相信熟悉浏览器的都知道,尤其是大名鼎鼎的Chrome浏览器,丰富的
从历史上看,shell一直是类Unix系统的原生命令行解释器。多年来,它已被证明是Unix的
有人说,网红行业的现状是江山代有才人出,各领风骚“好几天”。的确,即便是行业顶流
最近115调整了接口,导致115转存助手ui优化版3.8.1版本无法转存或获取SHA1。有大神在
根据第49次《中国互联网络发展状况统计报告》数据,截至2022年12月,我国网络视频(含
Shell脚本编程难,难于上青天!这话不假,尤其很多程序员新人,学了几个月Shell脚本写
在上期我们做了个形象的比喻,把短视频制作比喻成我们造房子,前面我们已经带领大家打
声明:本站内容由网友分享或转载自互联网公开发布的内容,如有侵权请反馈到邮箱 1415941@qq.com,我们会在3个工作日内删除,加急删除请添加站长微信:15314649589
Copyright @ 2022-2044 杭州共生网络 www.gongshengyun.cn Powered by Discuz!