Python + Selenium 自动发布文章(四):加入 bat 脚本
Python + Selenium 自动发布文章系列:
Python + Selenium 自动发布文章(一):开源中国
Python + Selenium 自动发布文章(二):简书
Python + Selenium 自动发布文章(三):CSDN
Python + Selenium 自动发布文章(四):加入 bat 脚本
写在前面
这是本系列的第四篇文章,同时也是最后一篇。有关于Bat脚本和自动发布博客的内容,不太了解的可以先看看之前写的文章。这篇文章是介绍如何整合Bat脚本来一键自动发博客,包括我的Hexo博客、简书、开源中国和CSDN。好了,在那之前我们先稍微调整一下代码。
代码改造
这里只需要调整一下main.py
即可,引入sys
这个moudle,到时我们通过Bat命令占位符的形式进行传参,参数是Markdown文件名称(含文件后缀.md
),参考代码如下:
import re import sys import csdn import jianshu import oschina class Main(object): # init def __init__(self, file): self.title = '' self.content = '' self.category = '' self.tags = '' # OsChina的系统分类, 设个默认值 self.osChina_sys_category = '编程语言' # CSDN的文章分类, 设个默认值 self.csdn_article_category = '原创' # CSDN的博客分类, 设个默认值 self.csdn_blog_category = '后端' self.read_file(file) # 读取MD中的title, content, self_category, self_tags, osChina_sys_category, csdn_article_category, csdn_blog_category def read_file(self, markdown_file): with open(markdown_file, 'r', encoding='UTF-8') as f: self.content = f.read().split('-->\n')[1] # 重置文件指针偏移量 f.seek(0) for line in f.readlines(): if self.judge('title: ', line): self.title = line.split('title: ')[1].strip('\n') elif self.judge('self_category: ', line): self.category = line.split('self_category: ')[1].strip('\n') elif self.judge('self_tags: ', line): self.tags = line.split('self_tags: ')[1].strip('\n') elif self.judge('osChina_sys_category: ', line): self.osChina_sys_category = line.split('osChina_sys_category: ')[1].strip('\n') elif self.judge('csdn_article_category: ', line): self.csdn_article_category = line.split('csdn_article_category: ')[1].strip('\n') elif self.judge('csdn_blog_category: ', line): self.csdn_blog_category = line.split('csdn_blog_category: ')[1].strip('\n') # 正则匹配判断, 获取的信息需保证其标志的唯一性 @staticmethod def judge(rule, line): if re.search(rule, line) is None: return False if 'self.' in line: return False return True if __name__ == '__main__': # sys.argv[0] = 当前文件名,这里是main.py md_file = sys.argv[1] # md_file = 'auto.md' print("Markdown File is ", md_file) timeout = 10 main = Main(md_file) # 开源中国 osChina = oschina.OsChina() osChina.post(main, timeout) # 简书 jian_shu = jianshu.JianShu() jian_shu.post(main, timeout) # CSDN csdn = csdn.CSDN() csdn.post(main, timeout)
Bat 脚本
和以往一样,Bat脚本还是放在hexo的安装目录下,命名deploy.bat
。Python + Selenium
系列的所有代码已经上传到了我的GitHub仓库,同时为了代码的同步和方便,这里也直接在source\_posts
目录下克隆了该仓库。Okay,关于这个一键部署的脚本参考如下:
:: 拉取最新的部署代码 cd source/_posts/auto-post git pull origin master :: 拉取最新的Markdown文章 cd ../ git pull origin master :: 输入文件名(最好用双引号括起来)才执行一键部署 set /p fileName= if defined fileName (start python auto-post/main.py %fileName%) :: 这里是部署hexo cd ../../ hexo g -d
运行效果
可优化点
单从上面的效果图来看,代码就有很大的优化空间了。下面列出去的几点是目前发现已知的可优化点,计划等有时间再来慢慢改进:
- 部分页面加载等待时间过长:在大多数情况下,其实需要处理元素已经完全加载显示出来了,但实际页面还在等待css、js等资源的完全加载;(可以设置最长加载等待时间)
- 录入内容可能会很慢:当正文内容很长的时候,用selenium的
send_keys
方法其实是比较慢的,毕竟这种方式还是一个个字符的输入;(可以利用剪贴板的复制粘贴功能) - 可选第三方授权登录方式有限:如代码所示,目前仅有QQ授权的方式;(可以扩展
新浪微博
、GitHub
、微信
等渠道进行授权登录) - 发布文章的操作是串行的:目前
deploy.bat
脚本只是整合了这几个平台的发布文章操作,执行顺序是按代码顺序来的;(可以使用多线程技术同步完成多平台的发布操作) - 自定义分类的局限:目前只能输入已经自定义好的,其实应该先判断,当分类不存在时,就新增分类,然后再进行选择。
系列小结
小结作个简单说明,本系列所演示的代码目前仅支持发布(单篇)文章,不支持文章的更新和多篇文章同时发布,只能说代码是死的,人才是活的,有时间有兴趣的可以自己捣腾一下。最后,结合这几个平台,附上Markdown
中注释部分参数的说明和可选参数值,本系列的所有代码在GitHub仓库中。
参数名 | 说明/可选参数值 |
---|---|
self_category | 自定义的分类名称。在OSChina和CSDN叫个人分类,简书里叫文集 |
self_tags | 文章的标签。OSChina和CSDN里用到,多个标签以, (中文逗号)分隔 |
osChina_sys_category | OSChina的系统分类。可选参数值有:移动开发 、前端开发 、人工智能 、服务端开发/管理 、游戏开发 、编程语言 (默认值)、数据库 、企业开发 、图像/多媒体 、系统运维 、软件工程 、大数据 、云计算 、开源硬件 、区块链 、其他类型 |
csdn_article_category | CSDN的文章类型。可选参数值有:原创 (默认值)、转载 、翻译 |
csdn_blog_category | CSDN的博客分类。可选参数值有:人工智能 、移动开发 、物联网 、架构 、云计算/大数据 、游戏开发 、运维 、数据库 、前端 、后端 、编程语言 (默认值)、研发管理 、安全 、程序人生 、区块链 、音视频开发 、资讯 、计算机理论与基础 |
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
【我的Android进阶之旅】Android自定义Lint实践
背景 2017年8月份的时候,我在公司开始推广Lint、FindBugs等静态代码检测工具。然后发现系统自带的Lint检测的Issue不满足我们团队内部的特定需求,因此去自定义了部分Lint规则。这个检测运行了大半年,运行良好,团队的代码规范也有了大幅度提升。这个是基于当时Gradle2.x系列写出来的自定义Lint实践总结,过去大半年了,现在将它搬到CSDN博客分享给大家一起学习学习。如果要在Gradle3.x系列使用该自定义规定的话,部分代码都得修改成最新的语法,因此此篇博客的内容请使用Gralde2.x系列编译项目中可以加入,去定义你自己的Lint规则吧。 当时已经实现的自定义规则大概有: 我这里只介绍如何去实现你自己的Lint规则,具体源代码的话不方便贴出了,所以不会去公布源代码。 一、Lint介绍 android lint是一个静态代码分析工具,通过lint工具,你可以不用边运行边调试,或者通过单元测试进行代码检查,可以检测代码中不规范、不和要求的问题,解决一些潜在的bug。lint工具可以在命令行上使用,也可以在adt中使用。 比如当想检查在manifest.xml中是否有...
- 下一篇
nginx匹配规则说明以及匹配的优先级
location 匹配规则 语法规则 location [=|~|~*|^~] /uri/ { … } 模式 含义 location = /uri = 表示精确匹配,只有完全匹配上才能生效 location ^~ /uri ^~ 开头对URL路径进行前缀匹配,并且在正则之前。 location ~ pattern 开头表示区分大小写的正则匹配 location ~* pattern 开头表示不区分大小写的正则匹配 location /uri 不带任何修饰符,也表示前缀匹配,但是在正则匹配之后 location / 通用匹配,任何未匹配到其它location的请求都会匹配到,相当于switch中的default 前缀匹配时,Nginx 不对 url 做编码,因此请求为 /static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格) 多个 location 配置的情况下匹配顺序为(参考资料而来,还未实际验证,试试就知道了,不必拘泥,仅供参考): 首先精确匹配 = 其次前缀匹配 ^~ 其次是按文件中顺序的正则匹配 然后匹配不带任何修饰的前缀匹配。 最后是交给 / ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8编译安装MySQL8.0.19
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS关闭SELinux安全模块
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7