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

【UI自动化】实现C站三连功能

   🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝 

🥰 博客首页:knighthood2001

😗 欢迎点赞👍评论🗨️

❤️ 热爱python,期待与大家一同进步成长!!❤️

👀给大家推荐一款很火爆的刷题、面试求职网站👀

跟我一起来巩固基础、开启刷题之旅吧

        这篇文章笔者拖了很久(教程有些内容我自己都试着试着给忘了),现在终于有一种实现方式了。

注:文章仅供参考哦,只是技术分享!!

目录

前言(也是一个令人困惑的问题)

正题

随机评论库

思路讲解

全部代码展示

前期的思考 

结尾


前言(也是一个令人困惑的问题)

        首先,C站实现三连(点赞、收藏、评论)是需要先登录的,而且由于是浏览器,笔者一开始想到的是使用selenium,因此就需要之前笔者写过的内容作为基础

Selenium操作已经打开的Chromehttps://blog.csdn.net/knighthood2001/article/details/126778424?spm=1001.2014.3001.5502        接着如下,查找并copy了C站三连相应的xpath或selector,代码如下

发现报错,定位不到相应的元素,试了多种定位,还是报错,后来在  csdn上  找了相应的内容(给文章点赞),试了一下发现还是不行。

笔者尝试,发现左侧部分可以正常定位与点击,右边部分(main部分)则不行,也试过查找嵌套iframe,还是不行。因此笔者猜测是由于main上面的script

如果大家能帮忙的,希望帮忙解答一下。

正题

        上述过程经历了好久,笔者果断放弃了。然后刚开始不太看好uiautomation的,所以使用uiautomation的尝试非常迟(笔者当时使用inspect.exe看了,发现点赞这些按钮不是真正意义上的按钮,而是文本和链接类型的,所以比较难搞),后来慢慢的只能硬着头皮上了,发现成功了。

        因此给大家写下这篇!!

模块准备        

import time
import uiautomation as auto
import random

定义chrome控件 

chrome = auto.PaneControl(ClassName="Chrome_WidgetWin_1")
chrome_specific = chrome.DocumentControl(ClassName="Chrome_RenderWidgetHostHWND")

随机评论库

word = ['文章写的很棒呀,支持', '博主写的太棒了吧,期待后续', '学到了学到了,感谢大佬分享']

笔者目前写的比较少。

思路讲解

        

        笔者尝试过很多方法定位该列表,最终失败了,突然发现可以通过先定位打赏,然后在定位其他的控件,试了后发现效果也还行。 

# 通过找到打赏控件,从而找到其他控件
dashang = chrome_specific.HyperlinkControl(Name='打赏')
# 三连控件的父类
all = dashang.GetParentControl().GetParentControl()

点赞

# 点赞
dianzan = all.GetFirstChildControl().Click()

收藏

         在收藏控件查找过程中,也发现其比较难找,因此笔者尝试通过查找默认收藏夹来定位收藏按钮(后来发现只要点击这一行就能实现点击,无需指定收藏按钮)

# 收藏
shoucang = all.GetChildren()[2].Click()
time.sleep(1)
# 通过默认收藏夹找到对应的收藏按钮
mr = chrome_specific.TextControl(Name="默认收藏夹")
shoucang_btn = mr.GetParentControl().GetLastChildControl()
shoucang_btn.Click()

评论

# 评论部分
time.sleep(1)
pinglun = all.GetChildren()[4].Click()
auto.SendKeys(random.choice(word))
auto.SendKeys("{ctrl}{shift}{Enter}")

        点击评论按钮后,光标出现,你只需要打字即可,在调用随机评论库,就能实现评论了。接着我们使用ctrl+shift+enter即可发送评论。还是挺便捷的。

全部代码展示

import time
import uiautomation as auto
import random

chrome = auto.PaneControl(ClassName="Chrome_WidgetWin_1")
chrome_specific = chrome.DocumentControl(ClassName="Chrome_RenderWidgetHostHWND")

word = ['文章写的很棒呀,支持', '博主写的太棒了吧,期待后续', '学到了学到了,感谢大佬分享']
# 通过找到打赏控件,从而找到其他控件
dashang = chrome_specific.HyperlinkControl(Name='打赏')
# 三连控件的父类
all = dashang.GetParentControl().GetParentControl()
# 点赞
dianzan = all.GetFirstChildControl().Click()
# 收藏
shoucang = all.GetChildren()[2].Click()
time.sleep(1)
# 通过默认收藏夹找到对应的收藏按钮
mr = chrome_specific.TextControl(Name="默认收藏夹")
shoucang_btn = mr.GetParentControl().GetLastChildControl()
shoucang_btn.Click()
# 评论部分
time.sleep(1)
pinglun = all.GetChildren()[4].Click()
auto.SendKeys(random.choice(word))
auto.SendKeys("{ctrl}{shift}{Enter}")

前期的思考 

        笔者刚开始是采用定位点去实现点赞功能的,通过将网页缩放为67%,实现点赞,不过后来发现csdn最下面栏会有差别(是否出现专栏目录),因此最后定位会有差别,因此笔者想的是通过判断专栏目录控件是否存在,如果存在,则使用这一套定位的点,如果不是则使用另外一套定位。

例:auto.Click(677, 985)与auto.Click(707, 985)

结尾

        希望有人能回答一下我的问题,希望这篇文章能给大家带来帮助!!

  

相关文章:

  • 网络规划与部署—ACL命名实验
  • MATLAB-随机森林实现数据回归分析预测
  • SQL考试练习题及全部答案
  • 【C++】内联函数、auto、范围for循环,nullptr
  • Mybatis(第一篇)
  • nodejs+vue+elementui旅游资源网站python-java景点门票预订网站php
  • ArrayList 源码浅析
  • 毕业设计 基于单片机的智能音响设计与实现 -物联网 嵌入式 stm32
  • 【区块链】从社区平台MOJOR看,为何Web3需要原生?
  • 2022年 研究生数学建模题目
  • C# 算数运算符
  • TC8:TCP_HEADER_01-11
  • Mysql出现问题:慢查询日志失效解决方案
  • Unity接入TopOn聚合广告平台SDK【聚合了穿山甲,优量汇(腾讯广告),快手,Mintegral,sigmob等各大广告平台SDK】
  • 【leetcode】和最小的 k 个数对
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • express如何解决request entity too large问题
  • input的行数自动增减
  • iOS 颜色设置看我就够了
  • JS数组方法汇总
  • Linux CTF 逆向入门
  • Node + FFmpeg 实现Canvas动画导出视频
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • STAR法则
  • webpack+react项目初体验——记录我的webpack环境配置
  • 从伪并行的 Python 多线程说起
  • 前端知识点整理(待续)
  • 微信小程序--------语音识别(前端自己也能玩)
  • 智能合约Solidity教程-事件和日志(一)
  • - 转 Ext2.0 form使用实例
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • 仓管云——企业云erp功能有哪些?
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • #DBA杂记1
  • $NOIp2018$劝退记
  • (AngularJS)Angular 控制器之间通信初探
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (循环依赖问题)学习spring的第九天
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • (转)Linq学习笔记
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • .FileZilla的使用和主动模式被动模式介绍
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .NET Framework 服务实现监控可观测性最佳实践
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .NET大文件上传知识整理
  • @RestControllerAdvice异常统一处理类失效原因
  • [ vulhub漏洞复现篇 ] Hadoop-yarn-RPC 未授权访问漏洞复现
  • [ web基础篇 ] Burp Suite 爆破 Basic 认证密码
  • [20161101]rman备份与数据文件变化7.txt
  • [2024最新教程]地表最强AGI:Claude 3注册账号/登录账号/访问方法,小白教程包教包会
  • [Android Pro] listView和GridView的item设置的高度和宽度不起作用
  • [AX]AX2012 SSRS报表Drill through action