Python + Selenium 实现自动发文章
Python + Selenium 实现自动发文章
步骤
1. 安装必要的依赖
在开始之前,确保安装了以下必要的软件和库:
-
**安装 Chrome 浏览器和对应版本的 **Selenium IDE:
- 源码与文件下载在文章末尾
-
安装 Selenium:
- 使用以下命令安装 Selenium:
pip install selenium
2. 准备用户登录信息
credentials
,存储用户的登录信息(用户名、密码)、文章标题和内容文件路径。
credentials = [
{
"user": "用户名",
"password": "密码",
"title": "文章标题",
"content_path": "B.txt" # 存放文章内容的文件路径
}
]
3. 封装登录逻辑
- 启动浏览器并打开 CSDN 登录页面。
- 切换到“密码登录”模式。
- 填写用户名和密码并点击登录按钮。
关键代码:
driver.get("https://passport.csdn.net/login?code=applets")
password_tab = wait.until(
EC.element_to_be_clickable((By.CSS_SELECTOR, ".login-box-tabs-items > span:nth-child(4)"))
)
password_tab.click()
username_input = wait.until(
EC.presence_of_element_located((By.CSS_SELECTOR, ".login-form-item:nth-child(1) .base-input-text"))
)
username_input.send_keys(username)
password_input = wait.until(
EC.presence_of_element_located((By.CSS_SELECTOR, ".login-form-item:nth-child(2) .base-input-text"))
)
password_input.send_keys(password)
login_button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".base-button")))
login_button.click()
4. 打开文章编辑页面
driver.get("https://editor.csdn.net/md/?not_checkout=1&spm=1015.2103.3001.8066")
5. 设置文章标题和内容
设置标题:
title_input = driver.find_element(By.CSS_SELECTOR, ".article-bar__title")
title_input.click()
title_input.clear()
title_input.send_keys(title)
填写文章内容:
B.txt
文件中读取内容,并逐行填充到编辑器中。with open(content_path, "r", encoding="utf-8") as file:
content = file.read()
lines = content.split("\n")
for line in lines:
content_editor.send_keys(line)
content_editor.send_keys(Keys.RETURN)
6. 发布文章
publish_button = driver.find_element(By.CSS_SELECTOR, ".btn-publish")
publish_button.click()
原理
1. Selenium 工作机制
Selenium 是一个用于 Web 浏览器自动化的工具,它通过浏览器驱动(如 ChromeDriver)直接与浏览器交互,完成网页操作(如点击按钮、输入文本、提交表单等)。它的核心原理包括:
2. 无痕模式
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--incognito")
3. 自动化扩展禁用
chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
chrome_options.add_experimental_option("useAutomationExtension", False)
4. 显式等待机制
WebDriverWait
等待页面加载完成或特定元素变为可交互状态,避免由于网络延迟导致的错误:
wait = WebDriverWait(driver, 20)
element = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "选择器")))
注意事项
-
账号安全:
- 登录时输入的用户名和密码存在敏感信息,建议使用加密存储或读取环境变量。
-
动态页面处理:
- 如果页面加载较慢或元素位置发生变化,需要适当调整显式等待的超时时间和选择器。
-
验证码处理:
- 如果目标网站有验证码,可能需要使用第三方服务(如 OCR)或手动辅助解决。
-
长时间运行问题:
- Selenium 驱动长时间运行可能会导致内存泄漏,建议完成任务后调用
driver.quit()
释放资源。
演示视频
点击跳转B站
源码与浏览器插件Selenium IDE下载
点击下载
总结
通过 Selenium,我们能够自动完成 CSDN 登录、文章编辑和发布的全过程。其核心在于对页面元素的精准定位和用户操作的模拟。通过配置无痕模式和显式等待,我们可以提升脚本的鲁棒性,避免操作失败。
作者:mamahaha2025