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) 是指不同客户端所持有的本地数据在特征分布、类别分布、数量等方面存在差异的数据。这种数据的异质性是联邦学习面临的一大挑战,…...
Python小程序 - 替换文件内容
1. 写入文件c:\a.txt 1)共写入10行 2)每行内容 0123456789 # 1 ls 0123456789 ln 10 with open("c:/a.txt", w,encodingUTF-8) as f:for i in range(ln):f.write(ls\n)######################################### 2 ln 10…...
k8s备份恢复(velero)
velero简介 velero官网: https://velero.io/ velero-github: https://github.com/vmware-tanzu/velero velero的特性 备份可以按集群资源的子集,按命名空间、资源类型标签选择器进行过滤,从而为备份和恢复的内容提供高度的灵活…...
LED户外屏:面对复杂环境的七大挑战
户外LED显示屏作为现代城市广告和信息传播的重要媒介,其应用范围越来越广泛。然而,与室内环境相比,户外环境的复杂多变对LED显示屏提出了更高的要求。本文将探讨户外LED显示屏在设计和应用过程中必须考虑的七个关键问题。 1. 高分辨率 户外LE…...
LabVIEW自动化流动返混实验系统
随着工业自动化的不断发展,连续流动反应器在化工、医药等领域中的应用日益广泛。传统的流动返混实验操作复杂,数据记录和处理不便,基于LabVIEW的全自动流动返混实验系统能自动测定多釜反应器、单釜反应器和管式反应器的停留时间分布ÿ…...
【性能优化】安卓性能优化之CPU优化
【性能优化】安卓性能优化之CPU优化 CPU优化及常用工具原理与文章参考常用ADB常用原理、监控手段原理监控手段多线程并发解决耗时UI相关 常见场景排查CPU占用过高常用系统/开源分析工具AndroidStudio ProfilerSystraceBtracePerfettoTraceView和 Profile ANR相关ANR原理及常见场…...
springboot二手图书交易系统-计算机设计毕业源码88413
目 录 摘要 1 绪论 1.1研究背景 1.2研究意义 1.3论文结构与章节安排 2 二手图书交易系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5本章小结 3 二手…...
解决ElasticSearch启动成功却无法在浏览器访问问题
目录 前言: 问题复现 : 解决问题: 1、修改sysctl.conf文件 2、在sysctl.conf文件增加这段东西 3、 然后保存退出,输入以下命令使其生效 结语: 前言: 这篇文章是小白我今天突然启动es,发现e…...
稀土有色包芯线良好的导电性
稀土有色包芯线是一种结合了稀土元素和有色金属(如铜、铝、镁等)的特殊线材。以下是对稀土有色包芯线的详细介绍: 一、组成与结构 芯线:由稀土元素和有色金属组成的合金制成。稀土元素(如镧、铈、镁等)的添加量在一定范围内,以确保合金性能的…...
SIP 业务举例之 Call Forwarding Unconditional(无条件呼转)
目录 1. Call Forwarding Unconditional 简介 2. RFC5359 的 Call Forwarding Unconditional 信令流程 PS:Dialog 建立条件 Dialog 会话完全建立 3. Call Forwarding Unconditional 过程总结 博主wx:yuanlai45_csdn 博主qq:2777137742 想要 深入学习 5GC IMS 等通信知识…...
基于stm32的esp8266的WIFI控制风扇实验
实验案例WIFI控制风扇 项目需求 电脑通过esp8266模块远程遥控风扇。 项目框图 风扇模块封装 #include "sys.h" #include "fan.h"void fan_init(void) {GPIO_InitTypeDef gpio_initstruct;//打开时钟…...
网页设计搜题软件/seo优化快速排名
H5推广的形式中有一个方式是在其中加入明星互动,从刷屏朋友圈的“吴亦凡入伍”,到如今许多的企业品牌都喜欢利用明星在H5中进行互动推广。比如曼妥思-潮清凉:与张艺兴连线视频,碧欧泉:彭于晏需要你的帮助,桂…...
网站建设知名公司排名/免费推广网站注册入口
bug错误类型我想知道为什么我们将编程故障和错误称为“错误” 。 所以我做了一些快速研究。 1.托马斯爱迪生 托马斯爱迪生(Thomas Edison)在1878年给同事的一封信中写了以下几句话: 在我的所有发明中都是如此。 第一步是直觉,突…...
企业做国外网站多少钱/北京seo关键词排名优化软件
函数: heappush(heap, item):将 item 元素加入堆。heappop(heap):将堆中最小元素弹出。heapify(heap):将堆属性应用到列表上。heapreplace(heap, x):将堆中最小元素弹出,并将元素x 入堆。merge(*iterables…...
上海做网站品牌/谷歌网页版
美体会帮你做很多重活的。Regex通常是HTML关注的最后手段。最好使用该产品的最新版本,如下面的代码所示。在HTML \EDUCATIONAL RESEARCHVolume: 29Issue: 2Pages: 26-152Published: JUN 1987from bs4 import BeautifulSoupsoup BeautifulSoup(HTML, "html.pa…...
建材手机网站/网络营销推广网站
题目: 将单向链表按某值划分为左边小、中间相等、右边大的形式,并且调整后三个部分中节点的相对位置和调整前是一样的。要求时间复杂度为O(N),额外空间复杂度为O(1) 分析: 方法1: 采用数组储存链表中的节点,然后采取快排中的Parti…...
东莞 包装制品 东莞网站建设/阿里巴巴指数查询
什么是OOPSOops是美国人比较常有的口语。就是有点意外,吃惊,或突然的意思。“oops”并不是很严重.对于linux内核来说,Oops就意外着内核出了异常,此时会将产生异常时出错原因,CPU的状态,出错的指令地址、数据…...