本文的主要内容是使用Python及Selenium自动发表文章到思否的实现思路及方式的介绍并为读者提供参考的源代码。
目录
实现思路
在自动发表文章时,我们的实现思路大致如下:
- 对Markdown文章进行处理,生成相应的配置及内容。
- 模拟登录目标网站,在此我们选择了使用QQ授权登录。
- 将文章内容写入网站的编辑器并发表。
Markdown文章的处理
目前来说,我的博客技术公馆使用Hugo进行构建。和许多其他的博客框架类似,Hugo中的文章主要由 title
, categories
等配置字段及文章的正文。一般来说,配置字段都使用了 yaml
语法或 toml
语法。由于我使用的是 yaml
语法,因此此文中的示例为处理 yaml
语法的配置字段。
对于文章的处理较为简单,只需按配置字段对应的语法进行处理并将其与正文内容保存即可。
为了将文章更规整地保存,我将配置字段及正文保存在 Post
实体类中,如下所示:
class Post(object): def __init__(self, title, tags, categories, content, draft): self.title = title self.tags = tags self.categories = categories self.content = content self.draft = draft
由于目前的功能较为简单,我只选用了配置字段中的 title
, tags
, categories
及 draft
。 title
, tags
及 categories
会被应用于文章的发表过程中。 draft
则决定文章是否为草稿。
由于Hugo文章中使用 ---
来划分 yaml
语法的配置字段,我们在读取文章时,只需依据 ---
将文章分为配置字段及正文即可。为了处理 yaml
语法的配置字段,需要 import yaml
来对其进行操作。
模拟登录目标网站
由于许多平台在使用账号密码登录时都会进行验证,且绝大多数国内平台都支持QQ授权登录。为了避免对验证码的识别且登录模块的复用,我选择了使用QQ进行登录。
我们首先会读取本地cookies,如果不存在本地cookies则使用QQ登录。读取cookies的代码如下所示:
try: with open('segmentfault_cookies.json', 'r', encoding='utf-8') as f: cookies = json.loads(f.read()) except FileNotFoundError: cookies = json.loads(segmentfault_login.qq(driver, timeout))
使用QQ登录时,只需模拟点击QQ登录的按钮,就可以进入登录界面。如果有对Selenium