Python之Bilibili自动更新邮件提醒并任务栏图标「完整代码」
前言
本次分享的是小编经过多日编写的关于自动检测B站Up主视频更新情况,并发送邮件提醒更新的Python程序,代码不专业、部分代码段借鉴网上,仅供参考娱乐!
用到的库
selenium、
_thread、
sys、
time、
re、
os、
bs4、
win32gui/win32con/win32api/winerror、
smtlib、
email、
灰色的表示没用到
环境及编译器
Python3.6
PyCharm
效果图
本来想做一个GUI,界面做好了,但跟程序连接部分还没搞定:
正式开始
一、打开网页
为了简便,使用Python自动化测试工具 -- selenium,Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE、Mozilla Firefox、Mozilla Suite等,小编使用的是火狐。当然,如果不想看到浏览器,还可以使用“phantomjs”,这需要去官网下载exe文件(windows用户)。这两个怎么用不是本文重点,大家可以自行搜索。
以phantomjs为例,启动浏览器:
driver = webdriver.PhantomJS()
打开网页:
driver.get(geturl)
然后通过bs4解析页面:
Soup = BeautifulSoup(driver.page_source,'lxml')
通过F12分析B站页面,并确定搜索规则:
随便选的
参考参考小编的代码吧:
二、邮箱发送
大部分邮箱对于第三方使用,都要求有授权码来代替密码,以QQ邮箱为例(来自百度经验):
1.登录电脑版QQ邮箱,选择最上方的“设置”
2.选择“账户”,切换到账户详情页面。
3.在账户页面往下拉,可以看到pop3设置,选择“开启”。
4.按照弹出的窗口提示操作进行密保验证。有多种方式可以验证,比如手机令牌等。推荐使用短信验证。
5.按照短信验证的提示发送短信。发送成功后直接点击“我已发送”。
6.弹出的提示中直接显示16位的授权码,可以复制下来,或者是记下来,千万不要记错了。然后点击“确定”。
7.下方的收取选项一般是默认30天的,点击下拉箭头,选择“全部”,并点击页面最下方的保存更改。千万别忘了点击保存,不然之前做的都白费了。
然后就可以套用模板编写代码了:
三、创建任务栏图标
左击图标隐藏界面,右击图标恢复窗口,左双击图标退出程序
此部分代码量较大,调用了win32官方demo,仅供参考:
四、多线程
任务栏显示图标和查询程序相当于是两个独立的部分,通过一条线连接起来。也就是说,运行查询,图标就会卡死、运行图标,查询就会暂停——所以需要用到多线程。Python3.6有_thread和threading模块,本程序用的是简单的_thread,并且没优化(小编边学边做边发稿,没看全呢、),有兴趣的可以优化一下噻~~
五、主函数部分
六、打包为exe
使用pyinstaller进行打包,注意如果要将exe分享给伙伴们,记得将phantomjs也放在同一文件夹下,再压缩包发出去。如何使用pyinstaller进行打包,可以参考小编之前发过的文章,可进入小编主页查找。
结语
- golang使用protobuf
- hdu 3518 (后缀数组)
- hdu ----3695 Computer Virus on Planet Pandora (ac自动机)
- 编程之美----NIM游戏
- hdu----1686 Oulipo (ac自动机)
- C++ GPU && CPU
- MyCat安装与测试教程 超详细!
- 关于如何来构造一个String类
- Java集合深度解析之LinkedList
- 2015编程之美(资格赛)--基站选址
- CentOS7下Nginx服务器安装与使用教程
- 2015年编程之美(资格赛) ---2月29日
- 编程之美--2. Trie树 (Trie图)
- 编程之美 --1 : 骨牌覆盖问题·一
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- node 写爬虫,原来这么简单
- 计时器 hook
- 自定义eslint 配置包
- 【61期】MySQL行锁和表锁的含义及区别(MySQL面试第四弹)
- 关于死锁你了解多少,通过“让APP随手机壳改变颜色,程序员和产品经理大家”这一事,了解下死锁可好?
- 三阴性乳腺癌表达矩阵探索笔记之GSEA
- 关于Python异常处理,你需要了解的知识点
- 三阴性乳腺癌表达数据探索笔记之GSVA分析
- 无敌解决GitHub无法ping通也无法登录的问题无敌解决idea连接GitHub提示Invalid authentication data. Connection reset
- 文献笔记七十一:REDO根据vcf文件检测植物细胞器基因组RNA编辑位点
- 如如何基于Docker快速搭建Elasticsearch集群?
- 解决Centos8无法安装docker的问题
- 正则表达式
- Python函数详解一(函数参数、变量作用域)
- Java9改进try-with-resources语法