吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1205|回复: 7
收起左侧

[讨论] python pywinauto库自动化操作取消快手作品点赞

[复制链接]
fff123123 发表于 2023-11-30 22:28
本帖最后由 fff123123 于 2023-11-30 22:33 编辑

发现快手点赞列表有几千的时候一个一个取关太麻烦了,所以想自动化取消
自动快手作品取消点赞  链接
https://wwiw.lanzouy.com/i3hTY1gg0IDA
密码:brfz

使用要求:使用edge浏览器,打开并且登录快手账号,最后进入个人主页
注意:必须只能有一个打开的的包含“快手”两个字的标签页面,否则无法识别
    无反应可以看文字提示


像这样打开就可以了
屏幕截图 2023-11-19 171019.png
最后在输入框中输入要取消点赞的作品数量
实现原理是控制鼠标点击
目前我的笔记本可以跑,如果没有反应可以重新多次尝试,或者关闭重新尝试
源码
import time
from pywinauto import Desktop, Application
import threading  # 导入多线程模块
from tkinter import *


class MyApp(Tk):
    """继承Tk,创建自己的桌面应用程序类"""

    def __init__(self):
        """构造函数"""

        super().__init__()
        self.title('Frame')
        self.geometry('400x100')
        # self.resizable(width=False, height=False)  # 阻止Python GUI的大小调整
        # 底界面
        self.frame = Frame(self, bg='#90c0c0')
        self.frame.pack(expand=True, fill=BOTH)
        self.text_display = StringVar()
        self.init_ui()

    def init_ui(self):
        """初始化界面"""
        frame1 = Frame(self.frame, bg='#90c0c0')  # 第一行
        frame2 = Frame(self.frame, bg='#90c0c0')  # 第二行
        frame1.pack(expand=True, fill=X)
        frame2.pack(expand=True, fill=X)

        self.text_display.set("先在edge浏览器打开快手并登录,下方输入取消的作品数量")
        label = Label(frame1, textvariable=self.text_display, bg='#90c0c0')
        label.pack(expand=True, fill="x")
        entry_number = Entry(frame2)
        entry_number.config(validate="key")

        entry_number.pack(side=LEFT, anchor="center", expand=True, fill=BOTH, padx=5)
        Button(frame2, text='确认', width=12, command=lambda: self.auto(entry_number.get())). \
            pack(side=LEFT, anchor="center", expand=True, fill=BOTH, padx=5)  # 搜索确认键

    def auto(self, number):
        try:
            number = int(number)
        except ValueError:
            self.text_display.set("输入的不是数字")
            return 0
        if number < 1:
            self.text_display.set("输入的数字需为正")
            return 0
        # 获取所有窗口
        windows = Desktop(backend="uia").windows()
        edge_app = None  # 需要连接的软件
        # 输出所有窗口的标题
        for window in windows:
            # print(window.window_text())
            # 如果找到包含 "Microsoft Edge" 标题的窗口
            if "Microsoft&#8203; Edge" in window.window_text():
                edge_window = window
                edge_window.set_focus()  # Edge浏览器窗口设为焦点
                print(edge_window.handle)
                # 连接到 Edge 浏览器应用程序
                edge_app = Application(backend="uia").connect(handle=edge_window.handle)
                break
        if edge_app is None:
            self.text_display.set("未打开edge浏览器")
            return 0
        edge_app_contain = edge_app.window()
        tab_container = edge_app_contain.child_window(class_name="TabContainerImpl")
        tab_items = tab_container.children(class_name="Tab", control_type="TabItem")  # 返回list  ControlType.Document
        # print(len(tab_items))
        # 遍历所有选项卡项,
        t = 0
        for tab_item in tab_items:
            # print(type(tab_item))
            if "快手" in tab_item.window_text():
                # 点击找到的选项卡项
                # tab_item.select() # 切换选项卡项
                tab_item.click_input()  # 模拟点击 click_input(coords=(100, 100))
                t = 1
                break
        if t != 1:
            self.text_display.set("未打开快手页面")
            return 0
        # 点击进入点赞界面
        portfolio_work = edge_app_contain.child_window(class_name="pl-tab-panel", control_type="ListItem",
                                                       found_index=2)
        portfolio_work.click_input()
        Document = edge_app_contain.child_window(class_name="", control_type="Document")
        portfolio = Document.child_window(class_name="card-link", control_type="Group", found_index=0)
        portfolio.click_input()

        # 等待异步加载数据  重新获取当前页面的ui
        time.sleep(1)
        edge_app_contain = edge_app.window()
        upvote = edge_app_contain.child_window(class_name="interactive-item like-item liked", control_type="Group")
        video_switch_next = edge_app_contain.child_window(class_name="switch-item video-switch-next",
                                                          control_type="Group")
        while number:
            number -= 1
            upvote.click_input()
            time.sleep(1)
            upvote.click_input()
            time.sleep(1)
            video_switch_next.click_input()
            time.sleep(1)
        return 1


if __name__ == '__main__':
    app = MyApp()
    app.mainloop()

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
scottlee1008 + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

RyanGLAISENKPI 发表于 2023-12-1 00:08
Mark 一下,想学一下这个操作方法~一直觉得多线程有点难
devilpanama 发表于 2023-12-1 00:24
dork 发表于 2023-12-1 09:00
hs248613 发表于 2023-12-1 09:01
有点复杂。感觉还是用别人的鼠标自动点击软件弄下简单些,可能没那么准确,但胜在简单
hnwang 发表于 2023-12-1 11:45
感谢分享 学习下pywinauto使用
 楼主| fff123123 发表于 2023-12-1 17:25
学的是python,而且js只支持浏览器,使用chromedriver感觉太麻烦了
觉得麻烦可以使用pyautogui
FruitBaby 发表于 2023-12-2 19:39
快手重度使用者的福音
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-1-10 12:18

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表