用Selenium设置博客自动发帖,每天多出1小时空闲时间
说实话,我一开始发一篇博客文章也要花15到20分钟。登录、选分类、打标签、点发布按钮……这些重复的操作太烦了,找来找去发现了Selenium自动化。看完这篇文章,只要会一点Python,就能马上搭建出自动发布博客的基本框架。
① 先安装这些——环境配置5分钟搞定
使用Selenium只需要准备两样东西:Python和Chrome驱动。很多初学者会卡在这一步,但只要按顺序跟着做,真的5分钟以内就能完成。
- 安装Python:在 python.org 下载最新版本后安装。安装时务必勾选"Add Python to PATH"复选框。漏掉这一步后面会很麻烦。
- 安装Selenium:在终端(Windows用cmd)输入
pip install selenium即可。 - 安装webdriver-manager:同时运行
pip install webdriver-manager。它会自动匹配Chrome驱动版本,省去很多麻烦。
安装完成后,新建一个Python文件,运行下面的代码,如果没有报错就说明配置完成了。
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.get("https://www.google.com")
print("配置完成!")
如果弹出Chrome窗口并成功打开谷歌,就说明成功了。到这一步,就完成一半了。
② 登录自动化——理解这个代码结构,到哪里都能举一反三
Selenium的核心是"用代码代替人在浏览器中的操作"。点击、输入文字、按按钮——只要会这三样,就能实现登录自动化。
以Tistory为例来说明。流程是:找到账号输入框并点击,输入账号,输入密码,然后点击登录按钮。
from selenium.webdriver.common.by import By
import time
driver.get("https://www.tistory.com/auth/login")
time.sleep(2)
# 点击用Kakao账号登录的按钮
driver.find_element(By.CLASS_NAME, "kakao_link").click()
time.sleep(2)
# 输入Kakao账号和密码
driver.find_element(By.ID, "loginId--1").send_keys("我的账号")
driver.find_element(By.ID, "password--2").send_keys("我的密码")
driver.find_element(By.CLASS_NAME, "btn_g.highlight.submit").click()
time.sleep(3)
小技巧!找元素时如果搞不清楚,在Chrome中按F12(开发者工具)→ 选择元素 → 用鼠标点击,就能直接看到该元素的ID或类名。复制粘贴到代码里就行。刚开始可能有点陌生,做2到3次就会熟悉了。
不过,有些网站会加强安全措施来阻止自动化,如果登录一直失败,可以用Cookie保存的方式来绕过。(这个在下一篇文章中介绍)
③ 自动写文章并发布——这才是真正的核心部分
登录成功之后,就到正题了。这个部分要实现:自动输入文章标题、填写正文内容、添加标签、点击发布按钮。一旦跑通,你会真切地感受到"哦,原来真的可以做到"。
进入文章编辑页面后,找到各个输入框并填入内容。
# 跳转到写文章页面
driver.get("https://你的博客地址.tistory.com/manage/post/")
time.sleep(2)
# 输入标题
title_input = driver.find_element(By.CSS_SELECTOR, "input[placeholder='请输入标题']")
title_input.click()
title_input.send_keys("今天自动发布的文章标题")
# 输入正文(如需切换iframe)
driver.switch_to.frame("editor-content-iframe") # iframe名称因网站而异
body = driver.find_element(By.TAG_NAME, "body")
body.send_keys("这里填写正文内容。")
driver.switch_to.default_content()
# 点击发布按钮
driver.find_element(By.CSS_SELECTOR, "button.btn-publish").click()
time.sleep(2)
有一点需要注意:Tistory或Naver博客的编辑器,正文输入框通常在iframe内。因此需要先用 switch_to.frame() 进入iframe,再输入文字。很多人会卡在这里,iframe的名称可以通过开发者工具来确认。
还有一点,time.sleep() 看起来多余,但一定要加。如果页面还没加载完就执行下一行代码,就会报错。等熟悉之后,可以用 WebDriverWait 来实现更智能的等待处理。
④ 批量自动发帖——用一个CSV文件一次性上传多篇文章
到了这一步,就可以真正体验自动化的魅力了。不是只发一篇文章,而是提前写好一批文章,整理成CSV文件,一次性连续发布多篇。
方法很简单。在Excel或Google表格中按如下格式整理:
- A列:标题
- B列:正文内容
- C列:标签
- D列:是否发布(Y/N)
然后在Python中用pandas读取CSV文件,用循环依次发帖即可。
import pandas as pd
df = pd.read_csv("posts.csv")
for index, row in df.iterrows():
if row['是否发布'] == 'Y':
# 调用上面写好的发帖函数
post_blog(driver, row['标题'], row['正文'], row['标签'])
time.sleep(5) # 连续发帖之间留出间隔
print(f"{row['标题']} 发布完成!")
这样就能实现提前写好10篇文章,一键全部定时发布的效果。我自己是周末一次性写好5到7篇,设置成周一到周五上午自动发布。如果还想加上定时调度,Windows可以用任务计划程序,Mac/Linux可以用crontab。
当然,也并不是完美无缺。网站UI更新后需要重新定位选择器,遇到验证码时也需要手动处理。但即便如此,减少80%的重复工作是确确实实的。
现在就做这一件事吧
今天读的内容看起来很多,但核心其实很简单。现在就做这一件事:
→ 安装Python和Selenium,运行一次让Chrome自动打开的代码
光是这一步成功了,后面的都会顺势而来。最重要的是亲眼看到"原来真的可以做到"。安装过程中遇到问题,欢迎在评论区留言。我遇到过的报错基本都知道,可以一起解决。
自动化并不是什么高深的事,它只是帮你把重复消耗的时间夺回来。今天就花30分钟试试吧。
댓글
댓글 쓰기