Uiautomation实现CSDN同步同页面文章至社区(2023.08.03更新)

news2024/11/18 5:39:54

目录

运行代码前须知:

前言

技能Get1 

代码主体部分

写在最后


运行代码前须知:

        1.本次更新的代码是实现C站内容管理整页文章(20篇文章)同步到所有社区,因此需要自己先Ctrl+滚轮实现25%放缩,使得页面能将20篇文章显示出来。

        

        2.代码运行开始的2秒需要将内容管理页面处于置顶。


前言

        首先笔者尝试点击本页面所有”同步至社区“按钮,发现可行,因此可以结合上一篇的内容,实现对同一页面的文章实现同步至所有社区。

import uiautomation as auto
import time
# TODO
"""TODO首先程序提供2秒钟,需要你将页面显示在CSDN的内容管理页面
https://mp.csdn.net/mp_blog/manage/article"""
time.sleep(2)
"""时间开始记录以及运行时间记录,最后运行时间显示单位为秒"""
start_time = time.time()
print('开始时间:{}'.format(start_time))
# 将全局超时设置为3秒
auto.SetGlobalSearchTimeout(3)
content = auto.DocumentControl(Name="内容管理-CSDN创作中心", Classname="Chrome_RenderWidgetHostHWND")
# main = content.GroupControl(LocalizedControlType="主要")
# 这个for循环是用来看这一页界面的同步至社区按钮个数
for i in range(1, 21):
    tongbu_button = content.EditControl(Name="同步至社区", foundIndex=i)
    if tongbu_button.Exists(searchIntervalSeconds=0.1):
        tongbu_button.Click(waitTime=0.1)
        tongbu_button.Click(waitTime=0.1)
    else:
        break
end_time = time.time()
sum_time = end_time - start_time
print("""运行时间:{}s""".format(sum_time))
# 运行时间:46.16595697402954s
# 运行时间:31.70241189002991s

        为了速度加快些,在一些函数中的关于等待时间、运行时间进行了更改,能提高速度。


技能Get1 

class Control():
    ValidKeys = set(['ControlType', 'ClassName', 'AutomationId', 'Name', 'SubName', 'RegexName', 'Depth', 'Compare'])

    def __init__(self, searchFromControl: 'Control' = None, searchDepth: int = 0xFFFFFFFF, searchInterval: float = SEARCH_INTERVAL, foundIndex: int = 1, element=None, **searchProperties):
        """
        searchFromControl: `Control` or its subclass, if it is None, search from root control(Desktop).
        searchDepth: int, max search depth from searchFromControl.
        foundIndex: int, starts with 1, >= 1.
        searchInterval: float, wait searchInterval after every search in self.Refind and self.Exists, the global timeout is TIME_OUT_SECOND.
        element: `ctypes.POINTER(IUIAutomationElement)`, internal use only.
    类Control()中的foundIndex参数填的是控件索引,对于有多个同类控件时,使用该索引可以准确定位需要的控件。

代码主体部分

        本次更新代码主要是结合文章开头点击20个同步至社区按钮,然后嵌套之前写的(详见前文)Uiautomation实现同步CSDN文章至社区(2023.08.01更新)https://blog.csdn.net/knighthood2001/article/details/132034741        主要变化就是多了个for循环

import uiautomation as auto
import time
# TODO
"""TODO首先程序提供2秒钟,需要你将页面显示在CSDN的内容管理页面
https://mp.csdn.net/mp_blog/manage/article"""
time.sleep(2)
"""时间开始记录以及运行时间记录,最后运行时间显示单位为秒"""
start_time = time.time()
print('开始时间:{}'.format(start_time))
# 将全局超时设置为3秒
auto.SetGlobalSearchTimeout(3)
content = auto.DocumentControl(Name="内容管理-CSDN创作中心", Classname="Chrome_RenderWidgetHostHWND")
# main = content.GroupControl(LocalizedControlType="主要")
tongbu = content.EditControl(Name="同步至社区")
"""下面两个tongbu.Click()之间的内容是用来确定社区名称,社区数量"""
# 同步至社区按钮若存在则点击
if tongbu.Exists():
    tongbu.Click()
# last_group中存放的就是对应社区的列表
last_group = content.GetLastChildControl()
non_name_list = last_group.ListControl()
specific_list = non_name_list.GetChildren()
a = []
for i in specific_list:
    a.append(i.GetChildren()[0].Name)
# 列表a是社区列表
print(a)
# 社区的个数
b = len(a)
print('社区数:', len(a))
# 将点出来的同步至社区关闭,方便后续循环操作
tongbu.Click()
# 这个for循环是用来看这一页界面的同步至社区按钮个数
for k in range(1, 21):
    tongbu_button = content.EditControl(Name="同步至社区", foundIndex=k)
    if tongbu_button.Exists(searchIntervalSeconds=0.1):
        # tongbu_button.Click(waitTime=0.1)
        # tongbu_button.Click(waitTime=0.1)
        # yes控件是点击具体社区是,弹出的确认同步的“确认”按钮
        yes = content.TextControl(Name='确认')
        """这里i和j的功能是用来进行大小循环的,大循环用来表示需要同步到哪个社区,小循环用来控制键盘热键Down的按动次数"""
        for i in range(1, b+1):
            # 点击同步到社区按钮
            if tongbu_button.Exists(searchIntervalSeconds=0.1):
                tongbu_button.Click()
            # 让其按 下键 到对应的社区,然后回车
            for j in range(0, i):
                auto.SendKey(auto.Keys.VK_DOWN)
            auto.SendKey(auto.Keys.VK_ENTER)
            yes = content.TextControl(Name='确认')
            # 由于跳出"确认此文章同步至xxx社区么?"时,通过热键Enter不能实现确定功能,因此需要鼠标点击。
            if yes.Exists():
                yes.Click()
            print("已同步至{}社区".format(a[i-1]))
    else:
        break
end_time = time.time()
sum_time = end_time - start_time
print("""运行时间:{}s""".format(sum_time))

写在最后

        1、对于需要将全部文章同步到社区时,只需要每次更换页面,重新运行代码。

        2、后续代码会进行优化:①添加滚动,使得无需缩放至25% ②下箭头处优化,缩短时间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/831412.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

迭代器模式——遍历聚合对象中的元素

1、简介 1.1、概述 在软件开发时,经常需要使用聚合对象来存储一系列数据。聚合对象拥有两个职责:一是存储数据;二是遍历数据。从依赖性来看,前者是聚合对象的基本职责;而后者既是可变化的,又是可分离的。…

【MySQL】仓储模块,核对出入库流水

系列文章 C#底层库–MySQLBuilder脚本构建类(select、insert、update、in、带条件的SQL自动生成) 本文链接:https://blog.csdn.net/youcheng_ge/article/details/129179216 C#底层库–MySQL数据库操作辅助类(推荐阅读&#xff0…

在敏捷项目中如何做好资源规划?

敏捷项目管理是一种交付项目的迭代方法,主要用于软件开发项目。该方法由多个迭代或增量步骤组成,以实现最终目标。在敏捷的环境下工作,难免遇到以下这些情况: ● 人员和团队通常必须将时间分配到不同的项目上。 ● 敏捷和非敏捷工…

【Linux】创建与删除用户

新增用户: adduser 用户名【添加用户】 passwd 用户名【设置用户密码】删除用户: userdel -r 用户名【删除用户】

字段填充策略 FieldFill

实体类中有如下属性,通过上面的自动填充属性,我们可以实现在进行插入(insert)操作时对添加了注解TableField(fill FieldFill.INSERT)的字段进行自动填充(解释:后面会写配置自动填充的配置类,该…

举个栗子~Quick BI 技巧(2):创建柱线组合图

上一期举个栗子为数据粉们分享了如何简单几步创建趋势折线图,有一些数据粉发来疑问:如何利用 Quick BI 制作柱线图呢? 线柱图是一种非常重要且常用的组合图表,可以将两组数据在同一个表中直观的表达。今天的栗子,我们…

《吐血整理》高级系列教程-吃透Fiddler抓包教程(25)-Fiddler如何优雅地在正式和测试环境之间来回切换-下篇

1.简介 在开发或者测试的过程中,由于项目环境比较多,往往需要来来回回地反复切换,那么如何优雅地切换呢?宏哥今天介绍几种方法供小伙伴或者童鞋们进行参考。 2.实际工作场景 2.1问题场景 (1)已发布线上…

【微信小程序】van-uploader实现文件上传

使用van-uploader和wx.uploadFile实现文件上传,后端使用ThinkPHP。 1、前端代码 json:引入van-uploader {"usingComponents": {"van-uploader": "vant/weapp/uploader/index"} }wxml:deletedFile是删除文件函…

React入门学习笔记2

jsx语法规则 定义虚拟DOM时,不要写引号。标签中混入JS表达式时要用{ }。样式的类名指定不要用class,要用className。内联样式,要用style{{key:value}}的形式去写。只有一个根标签标签必须闭合标签首字母 )若小写字母开头&#xf…

C语言技巧 ----------调试----------程序员必备技能

作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 🎂 作者介绍: 🎂🎂 🎂…

pytorch中torch.einsum函数的详细计算过程图解

第一次见到 rel_h torch.einsum(“bhwc,hkc->bhwk”, r_q, Rh)这行代码时,属实是懵了,网上找了很多博主的介绍,但都没有详细的说明函数内部的计算过程,看得我是一头雾水,只知道计算结果的维度是如何变化的&#xf…

IDEA使用数据库(新手入门详细教程)

第一步:将数据库服务器打开 进入你下载好的数据库路径到bin目录下cmd打开命令提示符界面 确认启动数据库 第二步:打开IDEA,找到IDEA数据库 第三步:选择要连接数据库 第四步:根据数据库信息连接数据库 连接之前的页面 输入我们要的…

常温超导:AI在研发中的潜力

目录 引言:1. 常温超导的挑战:2. AI在材料研究中的作用:3. AI在理论模型中的作用:4. AI与实验室合作的潜力:结论: 引言: 常温超导一直被认为是科学界的“圣杯”,可以在室温条件下实…

谷歌seo推广怎么做

谷歌SEO(搜索引擎优化)推广是提高网站在谷歌搜索结果中的排名,从而获得更多有针对性的流量和潜在客户的过程。以下是一些关键步骤,帮助您进行谷歌SEO推广: 关键词研究:首先,进行详细的关键词研究…

公司植物日常护养方法备忘录

植物为我们净化空气,美化环境,我们要按照科学的经验照顾好它们。公司植物日常通用护养方法如下: 首先剪掉已经枯黄的部分。 需要晒太阳的植物按时搬到外面晒太阳,每次晒1到2个小时。 所有植物统一在每个月的20号左右施肥一次&am…

链表(二) 双链表操作详解

文章目录 四、双向带头循环链表的实现List.hList.c创建返回链表的头结点双向链表打印双向链表尾插双向链表尾删双向链表头插双向链表头删双向链表查找双向链表在pos的前面进行插入双向链表删除pos位置的节点 五、单链表与双链表比较 什么是链表及单链表的实现请跳转&#xff1a…

JS监听页面回退前进的方案

您好,如果喜欢我的文章,可以关注我的公众号「量子前端」,将不定期关注推送前端好文~ 前言 在业务中遇到需求,App中的H5页面跳转到其他外链页面,外链页面修改了整个APP中的导航栏样式,回退到当前页面&…

微信开发之自动回复的技术实现

请求URL: http://域名地址/sendText 请求方式: POST 请求头Headers: Content-Type:application/jsonAuthorization:login接口返回 参数: 参数名必选类型说明wId是string登录实例标识wcId是string接收…

人物宣传稿怎么写?写作技巧有哪些?

人物宣传稿是一种介绍个人或组织成员的文案,旨在宣传其成就、特点和影响力。以下是一些人物宣传稿的写作技巧,帮助您撰写出生动、引人入胜的宣传稿。接下来伯乐网络传媒就来给大家讲解一下。 突出核心信息: 在宣传稿的开头,用简洁…

ARTS 挑战打卡的第1天,我学到了这些~

关于 ARTS 的释义 —— 每周完成一个 ARTS: ● Algorithm: 每周至少做一个 LeetCode 的算法题 ●Review: 阅读并点评至少一篇英文技术文章 ● Tips: 学习至少一个技术技巧 ● Share: 分享一篇有观点和思考的技术文章 深度学习 深度学习概念崛起框架 主页传送门&…