当前位置: 首页 > news >正文

Python使用Selenium库实现CSDN自动化发帖

        虽然CSDN上有很多优秀的作品,但也不乏很多很水的文章,我也不知道这种有什么意义。不过发这么水的文章多没意思,让浏览器自动化发帖就行了。以下程序能够实现CSDN自动化发帖,同时附自动给关注的人的文章点赞的程序。因为也有很多作者之间互赞,但不看文章的质量,评论区也都是水军,不说该文章具体的问题,而只是泛泛的夸赞。

        以下给出完整代码,需要自己调试。我就不详细介绍程序了,比较简单。主要难点是iframe和window不断切换,需要检查HTML源代码检查。

 完整代码

from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
import time
from selenium.webdriver.common.action_chains import ActionChains
# from selenium.webdriver.edge.options import Options
class Config:def __init__(self):# 账号self.username = ''# 密码self.password = ''def get(conf, driver, url):driver.maximize_window()driver.get(url)# 最多等待5秒使页面加载进来,隐式等待driver.implicitly_wait(5)WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//*[text()='登录']"))).click()WebDriverWait(driver,10).until(EC.frame_to_be_available_and_switch_to_it(0))# driver.switch_to.frame(0)WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//span[text()='密码登录']"))).click()username = driver.find_element(By.XPATH, "//input[@autocomplete='username']")username.send_keys(conf.username)# time.sleep(1)passwd = driver.find_element(By.XPATH, "//input[@autocomplete='current-password']")passwd.send_keys(conf.password)div = driver.find_element(By.CLASS_NAME,'inform-title')div.find_element(By.TAG_NAME, "i").click()driver.find_element(By.XPATH, "//*[text()='登录']").click()time.sleep(1)driver.switch_to.window(driver.window_handles[0])# time.sleep(1)WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(0))# driver.switch_to.frame(0)time.sleep(1)driver.find_element(By.CLASS_NAME, "btn-skip").click()# WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CLASS_NAME, "btn-skip"))).click()driver.switch_to.window(driver.window_handles[0])# time.sleep(1)driver.find_element(By.CSS_SELECTOR, "a[href='https://mp.csdn.net']").click()WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CLASS_NAME, "btn-close"))).click()driver.find_element(By.CSS_SELECTOR, "a.content").click()time.sleep(1)driver.find_element(By.XPATH, "//span[text()='创作助手']").click()time.sleep(1)driver.switch_to.frame(1)box = driver.find_element(By.CLASS_NAME, "i-ai-chat-welcome-questions")# print(list.get_attribute("outerHTML"))list = box.find_elements(By.TAG_NAME, "button")writetest(driver,list)# list = driver.find_elements(By.CLASS_NAME,"sub-people-list-box" )# print(len(list))# thumbs_up(driver,list)i = 0
def writetest(driver,list):global ili = list[i]i = i + 1title_tag = li.find_element(By.CSS_SELECTOR, "span.ivu-typography")title_text = title_tag.textli.click()WebDriverWait(driver,15).until(EC.presence_of_element_located((By.CSS_SELECTOR,"button.ivu-btn.ivu-btn-text.ivu-mr-32")))WebDriverWait(driver,10).until(EC.presence_of_element_located((By.CSS_SELECTOR, "svg[width='12'][height='12']"))).click()# text_1 = '"重新生成 "'# WebDriverWait(driver,20).until(EC.presence_of_element_located((By.XPATH,f"//span[text()='{text_1}']")))# text_2 = '"复制"'# WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,f"//p[text()='{text_2}']]"))).click()# driver.find_element(By.XPATH, "//img[@src='https://mp-blog.csdn.net/mp_blog/img/ceditlose.12eeb4a2.png']").click()driver.switch_to.window(driver.window_handles[0])driver.find_element(By.CSS_SELECTOR,"img.edit-title-close").click()title = driver.find_element(By.TAG_NAME,"textarea")title.send_keys(title_text)WebDriverWait(driver,10).until(EC.frame_to_be_available_and_switch_to_it(0))# driver.switch_to.frame(0)content = driver.find_element(By.TAG_NAME,"p")# content.click()content.send_keys(Keys.CONTROL, 'v')driver.switch_to.window(driver.window_handles[0])# box = driver.find_element(By.CSS_SELECTOR, "div.btn-box")# buttons = box.find_elements(By.TAG_NAME,"button")# buttons[1].click()driver.find_element(By.XPATH,"//span[text()=' 发布博客']").click()# for li in list:# li.find_element(By.CSS_SELECTOR, "span.ivu-typography")def thumbs_up(driver,list):i = 3n = 1j = 0for people in list:driver.switch_to.window(driver.window_handles[0])if i > 0:img = people.find_element(By.TAG_NAME, "img")img.click()time.sleep(2)  # 等待页面加载if driver is None:print("Driver is None. Exiting.")driver.switch_to.window(driver.window_handles[n+j])n = n + 1time.sleep(2)  # 等待页面加载try:article = driver.find_element(By.TAG_NAME, "article")article.find_element(By.TAG_NAME, "img").click()j = j + 1time.sleep(2)driver.switch_to.window(driver.window_handles[-1])# 找到要操作的元素element = driver.find_element(By.ID, "is-like-imgactive-new")tag = driver.find_element(By.ID, "blog-digg-num")# 初始显示状态print(f"初始 display 属性: {element.value_of_css_property('display')}")if element.value_of_css_property('display') == 'none':tag.click()# driver.execute_script("arguments[0].style.display = 'block';", element)# else:#     driver.execute_script("arguments[0].style.display = 'none';", element)time.sleep(2)print(f" display 属性: {element.value_of_css_property('display')}")except:passi -= 1if __name__ == '__main__':conf = Config()url = 'https://blog.csdn.net/2301_80892630?type=sub&spm=1010.2135.3001.5348'driver = webdriver.Edge()get(conf, driver, url)time.sleep(10)driver.quit()

相关文章:

Python使用Selenium库实现CSDN自动化发帖

虽然CSDN上有很多优秀的作品,但也不乏很多很水的文章,我也不知道这种有什么意义。不过发这么水的文章多没意思,让浏览器自动化发帖就行了。以下程序能够实现CSDN自动化发帖,同时附自动给关注的人的文章点赞的程序。因为也有很多作…...

StringBulider和StringBuffer的底层源码剖析

要深入了解 StringBuffer 和 StringBuilder 的区别,从底层源码的角度来解析,包括它们的创建、扩容机制等,可以参考 JDK 1.8 的源码。 1. AbstractStringBuilder 类 StringBuffer 和 StringBuilder 都继承自 AbstractStringBuilder。…...

手机空号过滤接口-在线手机空号检测-手机空号过滤API

接口简介:在线检测手机号状态,与运营商平台联动大数据分析判断手机号状态。可划分出实号、空号、停机、流量卡、沉默号。 更新周期:两周 不支持号段:14、16、17、19号段 存在5%的误差,如需实时接口,可购买手…...

ubuntu 用ss-TPROXY实现透明代理,基于TPROXY的透明TCP/UDP代理,在 Linux 2.6.28 后进入官方内核。

TPROXY 是一个 Linux 内核模块,在 Linux 2.6.28 后进入官方内核。 1 安装 tproxy 相关依赖 参考ss-tproxy 的安装依赖。 bash ss-tproxy 使用了 bash 的一些语法特性,比如 shell 数组,因此必须用 bash 解释器执行。大多数发行版已经自带了…...

报错解决:opene3d draw_geometries(): incompatible function arguments.

1. 报错信息 o3d.visualization.draw_geometries(target_pcd) TypeError: draw_geometries(): incompatible function arguments. The following argument types are supported:1. (geometry_list: List[open3d.cpu.pybind.geometry.Geometry], window_name: str Open3D, wid…...

Clickhouse笔记(二) 集群搭建

0.集群规划 操作系统使用ubuntu2204server,8C8G100G。 节点分片部署192.168.50.5分片1副本1clickhouse-server/clickhouse-client/keeper192.168.50.6分片1副本2clickhouse-server/clickhouse-client/keeper192.168.60.7分片2副本1clickhouse-server/clickhouse-c…...

华为云购买弹性云服务器(教程)

配置弹性云服务器 基础配置 实例 操作系统...

Python异常检测- 单类支持向量机(One-Class SVM)

系列文章目录 Python异常检测- Isolation Forest(孤立森林) python异常检测 - 随机离群选择Stochastic Outlier Selection (SOS) python异常检测-局部异常因子(LOF)算法 Python异常检测- DBSCAN 文章目录 系列文章目录前言一、On…...

基于SpringBoot+Vue+uniapp微信小程序的婚庆摄影小程序的详细设计和实现(源码+lw+部署文档+讲解等)

项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念,提供了一套默认的配置,让开发者可以更专注于业务逻辑而不是配置文件。Spring Boot 通过自动化配置和约…...

NGAC访问控制系列三:低代码产品NGAC运用与算法运用

目录 一、基于NGAC的低代码模型权限管理方案 二、多策略访问控制系统限制内部访问的线性时间算法 1、概述 2、权限控制图遍历算法 一、基于NGAC的低代码模型权限管理方案 NGAC在低代码平台的权限决策模型:功能权限数据权限 案例:对于七巧低代码开发平台&…...

Unity3D 面试题收录

Unity3D 客户端面试题收录(持续更新~) 面试题收录 本文收录一些对于 Unity3D 客户端可能遇到的面试题(持续更新~),答案仅出于个人理解,如有偏差,希望指正。 Unity3D MonoBehaviour 生命周期…...

Jrebel热部署不生效解决

打开setting找到build底下的complier勾选 build project automatically 设置自动构建项目 打开setting找到Advanced Setting勾选Complier中的第一项 Jrebel panel中勾选需要热部署的项目模块 项目配置信息:Edit Configuration中进行编辑,配置如下图…...

软件测试学习笔记丨Selenium键盘鼠标事件ActionChains

本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/22515 本文为霍格沃兹测试开发学社的学习经历分享,写出来分享给大家,希望有志同道合的小伙伴可以一起交流技术,一起进步~ 说明:本篇博客基于sel…...

CI/CD(持续集成与持续交付)流水线

集成 Jenkins、GitLab Webhook、Nexus 和 RabbitMQ 可以形成一个全面的 CI/CD(持续集成与持续交付)流水线,结合消息队列可以创建事件驱动的工作流。以下是配置这四个工具以实现一个基本的 CI/CD 流程的详细步骤。 前置条件 Jenkins、GitLab、…...

分布式光伏发电有什么优劣势

分布式光伏发电是指在离电力消费地点较近的地方,通过安装光伏发电系统来发电。这种系统通常用于屋顶、地面或其他建筑物上,相比于集中式光伏发电系统,它有一些独特的优势和劣势: 优势: 地理适应性: 分布式…...

Spring Boot框架中的IO

1. 文件资源的访问与管理 在 Spring Boot 中,资源文件的访问与管理是常见的操作需求,比如加载配置文件、读取静态文件或从外部文件系统读取文件。Spring 提供了多种方式来处理资源文件访问,包括通过 ResourceLoader、Value 注解以及 Applica…...

DBeaver连接Hive教程

hive shell:通过hive shell来操作hive,但是至多只能存在一个hive shell,启动第二个会被阻塞,也就是说hive shell不支持并发操作。 基于JDBC等协议:启动hiveserver2,通过jdbc协议可以访问hive,hi…...

Vue-Router源码实现详解

1.Hash模式 hash就是url中#后面的部分hash改变时,页面不会从新加载,会触发hashchange事件,去监听hash改变,而且也会被记录到浏览器历史记录中vue-router的hash模式,主要是通过hashchange事件,根据hash值找…...

程序员节日的日期是10月24日‌程序员日

‌程序员节日的日期是10月24日。‌ 这一天被称为‌中国程序员日或‌1024程序员节,由‌博客园、‌CSDN等自发组织设立,旨在纪念程序员对科技世界的贡献。 程序员节日的由来和意义 1024程序员节的由来可以追溯到2010年,最初由网友提出设立一个…...

联邦学习中的数据异构性

在联邦学习(Federated Learning, FL)领域中, 异构数据(Heterogeneous Data) 是指不同客户端所持有的本地数据在特征分布、类别分布、数量等方面存在差异的数据。这种数据的异质性是联邦学习面临的一大挑战,…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

AI语音助手的Python实现

引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...

Oracle11g安装包

Oracle 11g安装包 适用于windows系统,64位 下载路径 oracle 11g 安装包...

Visual Studio Code 扩展

Visual Studio Code 扩展 change-case 大小写转换EmmyLua for VSCode 调试插件Bookmarks 书签 change-case 大小写转换 https://marketplace.visualstudio.com/items?itemNamewmaurer.change-case 选中单词后,命令 changeCase.commands 可预览转换效果 EmmyLua…...