准备工作

首先得先安装好python,IDE,selenium,Firefox浏览器
这里可以供参考
Windows下的python的安装全步骤,分图详解
Windows+Firefox(Chrome)+selenium+python配置并更改源(加快下载速度,不然很慢)
安装相关的库
pip install 相关库的名称即可
一般来说,需要检查time,pytesseract,PIL等库是否被正确安装
如果出现报错,安装上相应的库即可
推荐使用anconda进行
不用也可,测试环境在安装好selenium的anconda下进行
注意,原本的anconda并没有包括selenium库,需要自行安装
另外,我们还需要Tesseract-OCR这个软件,用于ocr识别相关验证码
关于这个软件的信息请自行百度
总的来说,为了运行这个实例,你需要:
1.一台装有Windows的电脑和网络
2.python3及其IDE(如pycharm,vscode等),最好是anconda
3.相关的python库,如PIL,selenium等
4.运行ocr所需要的软件Tesseract-OCR
5.Firefox浏览器及其对应webdriver

相关功能的实现

import pytest
import time
import json
import pytesseract
import re
import requests
import pyautoguifrom time import sleep
from PIL import Image,ImageEnhance,ImageOps
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver import FirefoxOptions
from selenium.webdriver.firefox.firefox_binary import FirefoxBinaryclass Class:#该函数功能是初始化def __init__(self,un,pw,cbe,cen):opts = FirefoxOptions()# opts.add_argument("--headless")option_profile = webdriver.FirefoxProfile()option_profile.set_preference("plugin.state.flash",2)option_profile.set_preference("security.insecure_field_warning.contextual.enabled",False)#上面的部分是对浏览器的设置,使flash能自动播放self.driver = webdriver.Firefox(firefox_profile=option_profile,options=opts)self.driver.get('http://hnqmgc.17el.cn/')self.driver.set_window_size(1920,1080)#创建一个浏览器对象并打开网站,设置窗口尺寸为1920*1080self.un=unself.pw=pwself.cbe=cbeself.cen=cen#接收传入的un用户名,pw密码,cbe课程开始刷的id,cen课程结束刷的idprint('初始化浏览器成功')#该函数功能是处理验证码def processing_pictures(self):sleep(1)self.driver.find_element(By.ID, "code").click()sleep(1)#找到验证码,点一下刷新验证码。因为这个函数在一个循环体,一次可能不能登录成功。self.driver.save_screenshot('pictures.png')#保存网页截图left=1365top=319right=1365+48bottom=319+18#上面的是验证码的坐标imge=Image.open("pictures.png").crop((left, top, right, bottom))#imge.show() 作用是运行时检查错误用的,把处理后的图像输出img = imge.convert("L")#图片转灰度,由于这个验证码太脑残,不需要进行插值等特殊处理pixdata = img.load()w, h = img.sizethreshold = 160# img.show()for y in range(h):for x in range(w):if pixdata[x, y] < threshold:pixdata[x, y] = 255else:pixdata[x, y] = 0#取反色#img.show()pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"#这里应该是你的ocr程序的安装地址result = pytesseract.image_to_string(img)#将图片转换为字符串resultj = re.sub(u"([^\u4e00-\u9fa5\u0030-\u0039\u0041-\u005a\u0061-\u007a])", "", result)#正则表达式,除去特殊字符result_four = resultj[0:4]print('验证码是'+str(result_four))return result_four#该函数功能是登录def login(self):print('正在登录中,请稍后')n=0#下面这是一个循环,因为验证码可能不能一次正确,需要不断尝试while True:n+=1print('第%d次登录中'%n)#下面这两个sleep表示暂停1秒,因为网页需要加载,这样更保险sleep(1)self.driver.refresh()#刷新页面,因为上一次循环登录过,刷新重来sleep(1)self.driver.execute_script("window.scrollTo(0,document.body.scrollHeight)")#该js脚本作用是将滚动条滑至顶部self.driver.find_element(By.ID, "login_btn").click()self.driver.find_element(By.ID, "UserName").send_keys(self.un)self.driver.find_element(By.ID, "Password").send_keys(self.pw)#输入用户名以及密码code=self.processing_pictures()self.driver.find_element(By.ID, "codein").send_keys(code)self.driver.find_element(By.ID, "sub").click()try:alert=self.driver.switch_to_alert()alert.accept()except:break#如果没有弹出警告窗,也就是登录成功,循环体结束,如果弹出,则accept关闭弹窗'''其实这个被注释的脚本也可以实现检查是否正常登录sleep(1)self.driver.refresh()sleep(1)html = self.driver.page_sourceif html.find('个人中心') == -1:break'''print('第%d次登录失败,正在重试'%n)self.driver.execute_script("window.scrollTo(0,document.body.scrollHeight)")#作用见上面print('登录成功,一共尝试了%d次'%n)self.attend_class()#该函数功能是上网课def attend_class(self):print('开始刷课')for course in range(int(self.cbe),int(self.cen)+1):url='http://hnqmgc.17el.cn/ymzs/zxzr/484770_qmzx.shtml?kcid='+str(course)self.driver.get(url)# 进入相关课程播放页面#sleep(30) 如果播放插件被阻塞,应该预留一点时间再重新打开它# coursename=self.driver.find_element_by_id("courseName").text()print('当前正在刷id为{0}的课程:'.format(course))#下面的部分填坑sleep(5)if __name__ == '__main__':print('****************欢迎使用青马网课刷课系统v1.0!*****************')print('*             Author:STL_CC  2020.03.18  v1.0               *')print('*            Blog:https://blog.csdn.net/STL_CC              *')print('*************************************************************')print('请输入相关信息:')username=input('Username:')password=input('Password:')cb=input('开始课程id:')ce=input('结束课程id:')print('开始刷课!')a = Class(username,password,cb,ce)a.login()

后话

1.以上程序仅实现了登陆功能,具体的刷课进程可见Python刷青马,但是他这个实现方法只是模拟鼠标点击,需要图形化界面,应用场景十分有限。
2.听说JavaScript能控制flash播放器的运行,而且selenium可以使用自定义js脚本,然而笔者没有学过,而且已经开发了快三天,还要上课,吃不消,待有时间学完js后可能会在此填坑,如果哪位大佬懂js,可以一起继续开发
3.课程id就是每个视频最前面那个东东,你也可以观察视频链接
4.由于自动化测试工具的特殊性,可能要针对自己的电脑运行环境进行一些特殊的处理,这个程序我也鼓捣了很久才调好环境,如果由大佬需要技术支持,可以私信笔者。
5.这里是开发的套件包,Firefox 55以上不支持flash自动运行,这是可以支持的版本,请用此套件开发
链接:https://pan.baidu.com/s/1XXHxkd5KXs5rRFyS19yt6A
提取码:q3pp
emmmm 附件里的python程序缺少了几个库,以上面的为准

最近更新:笔者已经对js控制flash控件进行了测试,得要这个控件的属性对外开放才行,所以目前来看只有两种解决的方法,一个是使用autoit或者pyautogui等进行模拟鼠标点击,另一种是我猜的,可以抓包欺骗服务器

与其花这几天时间做这个工程,其实还不如老老实实刷,但是,通过这三天来的不断测试,笔者掌握python复杂编程的能力有了很大提高。也了解了网页的基本结构和selenium工具,以后应对简单的工程,签个到啥的还是很容易上手了的
也希望这个项目的某些方面能给读者以启发

selenium实例:自动刷青马网课实现登陆 python实现自动登陆 利用pytesseract自动识别验证码并登录相关推荐

  1. HUNNU java HttpClient 自动刷英语网课源码

    啦啦啦,废话不多说,要用的同学,自己去编译吧,2333333,上源码~ package Scrapy;import Login.login;public class Main{public stati ...

  2. 根据课表自动打开网课上课平台——Python实现

    前言 自疫情爆发以来啊,对大学牲来讲,上网课已基本成为司空见惯的事情了,在看的各位谁还没上过个网课呢.抛开事实不谈,上网课的效率还是比较高的(手动狗头). 那有些游手好闲,啊不对,是热爱学习的小可爱( ...

  3. python腾讯课堂自动签到_网课终结者——基于auto.js的腾讯课堂,雨课堂等各大网课自动签到以及auto.js新手教程...

    在前两篇文章出后,很多同学网课其他的自动签到怎么搞,其实无论什么软件的自动签到,点击.监视操作之类的都是一类代码,而且非常简单,今天给大家讲一下如何自己编写实用的js脚本. 首先需要下载auto.js ...

  4. 如何把知识变成网课,通过知识变现自动赚钱

    想在网上赚钱,不知做什么项目好? 想做知识变现,不知如何开始,选择哪个方向? 想利用自己的技能.爱好赚钱,不知怎么去操作? 你是不是正在面临这些困惑和烦恼? 如果是,请听我给你讲一个故事,这是故事的主 ...

  5. 零基础学python比较好的网课-请问自学 Python 有必要买课程吗?

    关于学习python,本仙女有话要说 勤奋自律+觉悟5星,建议自学,如果有一个上进心但缺少自律性,对自己信心不足或觉得自己不够聪明,可以选择培训班: 题主说的是自学,那我就聊一下自学python,众所 ...

  6. python实现阴阳师自动刷御魂脚本_用Python实现FGO自动战斗脚本

    我家黑贞! 1. 背景 Fate/Grand Order(非的肝不过欧的)作为索尼为了拯救自己不倒闭而开发的面向月厨的骗氪养成抽卡爆肝游戏,居然没有像隔壁<阴阳师>的自动战斗系统(看看别人 ...

  7. python网课哪个好-python网课学习笔记--4

    对象 python中,一切皆对象.每个对象由:标识(identity).类型(type).value(值)组成. 1.标识用于唯一标识对象,通常对应于对象在计算机中的位置.使用函数id(obj)可返回 ...

  8. python中selenium(模拟登陆)+pytesseract(自动识别验证码)应用例子之查询住房公积金

    这里以查询深圳住房公积金为例(http://gjj.sz.gov.cn/fzgn/zfcq/) from selenium import webdriver # 模拟浏览器操作 from PIL im ...

  9. linux自动刷新桌面,Ubuntu下实现用Python开机自动更新壁纸为bing壁纸

    因为用的Windows Phone的手机,里面有一个手机锁屏每天自动更新为bing的壁纸,用着挺好的,遂想在Ubuntu下实现这个功能,断断续续折腾了一两个星期,惭愧.不过好在最终还是将所有的功能实现 ...

  10. 如何用python自动发邮件_Python | 解放双手,用Python实现自动发送邮件

    解放双手,用Python实现自动发送邮件 使用Python实现自动化邮件发送,可以让你摆脱繁琐的重复性业务,节省非常多的时间. Python有两个内置库:smtplib和email,能够实现邮件功能, ...

最新文章

  1. ThreadLocal使用
  2. 【SICP练习】9 练习1.15
  3. Word中新建样式/修改样式对话框中的各个选项意义
  4. 爬虫架构师得逆袭之路
  5. python文件读写用到的库_python 读写txt文件并用jieba库进行中文分词
  6. Eclipse Neon 配置C/C++开发环境
  7. 《WCF技术内幕》翻译31:第2部分_第6章_通道:概述与正确认识通道。
  8. 在SLS中快速实现异常巡检
  9. Tomcat源码分析(十)--部署器 转载
  10. 311. Sparse Matrix Multiplication
  11. 系列TCP/IP协议-ARP与RARP
  12. error C2065: ‘_beginthread‘ : undeclared identifier
  13. 树莓派29/100 - 树莓派接上Kindle的墨水屏是什么体验?
  14. Photoshop 2021(Ps)下载安装及详细安装教程
  15. c语言oj质数还是合数,求数据帝帮忙测试一下代码,已被南洋理工大学的oj搞蒙.....
  16. Win10清理C盘垃圾
  17. 【水题】CodeForce 1183B Equalize Prices
  18. 国内AR智能眼镜发展难点分析
  19. 企业为什么要选择阿里云国际版上云?
  20. CDS TABLE FUNCTOIN传参,指定客户端

热门文章

  1. cmd命令查看本机网外地址
  2. linux查看cpu核数命令,Linux系統下如何查看CPU型號、核心數量、頻率和溫度?
  3. 华为网络技术大赛模拟题答案详解
  4. webm格式怎么转换成mp4?几步就能够完成转换
  5. 系统编程__2__父子进程的创建和回收
  6. qxdm无法安装问题闪一下_Qualcomm QXDM
  7. 近世代数-群论基础一
  8. Aspose.Cells生成Excel图表
  9. rk3288 android6.0平台bt1120信号转mipi调试
  10. 微信小程序实现轮播图