001,Python微信接龙脚本与腾讯会议定时挂网课脚本

目录

前言:

微信接龙:

腾讯会议:


前言:

这是我的第一篇博客,看到一个视频,推荐写写博客来验证所学,觉得很有道理,就来写一个.

这两个脚本是我的处女作,还有很多不完善的地方,但重点是能跑.....

系统是win11

微信接龙:

我使用的wxauto库,pip install wxauto就行,不过需要注意微信版本,可以看下面链接去比对版本.wxauto:文档、社区、教程、评论|开放底座 (openbase.com)icon-default.png?t=N7T8https://openbase.com/python/wxauto

首先导入wxauto库(下文关于微信的操作有个前提,就是你的微信客户端要处于打开状态,不能最小化)

from wxauto import *

创建微信对象....就跟下边写的一样,注释很清楚

wx = WeChat()  # 获取微信对象

wx.GetSessionList()  # 获取聊天列表

wx.ChatWith("草草草")  # 打开指定聊天,改这里

msgs = wx.GetAllMessage  # 获取指定聊天框内当前显示的聊天记录

我事先给要用到的变量在文件开头都声明了一下,免得出问题,这里的循环是从先前读取的聊天记录中最新一条往前循环,因为微信接龙消息中必须要有"#接龙"的字眼,所以可以通过.find()来返回字符串下标,若不存在则返回-1,可以通过这个方法判断是否是我们想要的接龙消息.

其中的lastMessage[1]是因为wx.GetAllMessage返回的是一个元组,下标1对应的是聊天消息本身,其他两个一个是名字,另一个不记得.(我好像在哪看着有人说wxauto读取聊天记录读到拍一拍就会出问题,不过无伤大雅)

# 检测接龙
for lastMessage in msgs[::-1]:
    if str(lastMessage).find("#接龙") >= 0:
        message = lastMessage[1]  # 循环抓取接龙消息
        break

现在拿到了字符串类型的接龙消息,目光可以对准这条消息来修改了.我一开始的思路是继续使用判断指定字符串来判断序号是否存在,从50到1循环,循环到了就可以将当前循环的数字+1,再在其后添加名字输出

不过这里出现了问题,如果接龙内容光接名字还好,但是如果会带上班级,比如2202,就寄了.

假如当前接龙只接到了15,脚本本该循环到15之后+1,输出16.某某某,但是在循环到22时检测到了名字前面的2202,那可太刺激了,直接接龙从15跳到了23,回头老师就得记你小本本.

我想了半天没想出辙来,整了个傻子招,只检测50-23的数字,成功就输出,不成功就sleep()睡上一两分钟再循环一波,倒也不是不行.

这时我的好兄弟跟我说,接龙的序号后边一定会有个.(这就是个点,前面本该出现句号的位置出现点是因为我把输入法改成了仅限英文,不想换回来就这样罢)

我精神大振,思路开了!

循环,"接龙序号."!找这个!一切问题迎刃而解!

​
num = 50
while True:  # 循环,获取接龙的序号
    if message.find(str(num) + ".") > 0:
        nums = num + 1
        break
    else:
        num -= 1

这样,我们就得到了接龙序号,接下来只需要将我们获取的接龙消息{message},接龙序号{nums},只需要将这些内容组合起来,使用下图的第一行代码复制到剪切板上,再用第二行代码再当前聊天栏输出即可!

注:这里的nums是我把前文的num转成了str后存在了一个新的变量中

    wxauto.WxUtils.SetClipboard(message + f"\n{nums}. 2202名字")
    wx.SendClipboard()

后来,保险起见,我又添了一个功能,先别找序号,先去找有没有咱的名,万一周末早八,都还在梦乡中,咱这冷不丁来给接个龙,那可不坏事了,所以就先判断接龙消息中是否存在咱的名,要是存在就直接别签,给我滚粗.修改后的代码如下:

# 如果出现名字则直接离开
if message.find("名字") < 0:
    while True:  # 循环,获取接龙的序号
        if message.find(str(num) + ".") > 0:
            nums = num + 1
            break
        else:
            num -= 1

最后就是定时问题了,我起初是想用微软自带的任务计划程序来完成这个事情,但是奈何这东西我用起来不好用啊,搞不明白为什么我只要勾上图上所示的"不管用户是否登录都要运行",它就会一点反应都没有,勾别的完全没问题

 "一点反应都没有"是指它既不启动也不报错,哦对,既然说到启动,那么得提一嘴,.py文件是不能直接启动的,如果想要用脚本特意去打开pycharm还会显得很弱智,所以我们需要写一个.bat来辅助打开.py,怎么写呢,

就是你新建一个txt,在里边输入"python 你的文件名.py", 保存退出, 后缀改成.bat, 然后把这.bat和它里面写的python文件塞一块就行.

说回任务计划程序,它如果不勾"不管用户是否登录都要运行" 就会只在亮屏时运行,息屏后也会照常启动,但是必须要在你输完开机密码后才能运行.那就没用了啊 !我研究了挺长时间,没玩明白, 如果能用那会省很多事,介于我不能用,所以我就干脆给脚本加了个计时,比如说要早晨八点签到,那就整一个判断是否到了8*60分钟,没到就睡三分钟循环,电脑就找了一个古董电脑,直接不关了,每天晚上挂脚本,机器永不睡眠,电脑套个纸箱放一边,好兄弟熬了大半夜废了九牛二虎之力给这32位的电脑装上了环境,

from datetime import datetime  # 导入datetime用来计时
def go():
    #  获取了时钟分钟,并且全部转换为分钟,返回int类型的分钟
    hours = datetime.now().strftime("%H")
    minutes = datetime.now().strftime("%M")
    sumNumber = int(hours) * 60 + int(minutes)
    print(myTime(), "\t" f"hours={hours},minutes={minutes},sumNumber={sumNumber}")
    return int(sumNumber)

中间修修改改的次数很多,可以和上文有一定的不一,但这主要是提供一个思路,以及记录曾经的过往.最终的代码如下(import time删了就行,没用上)

# -*- coding:utf-8 -*-
import time
from pyautogui import *

from wxauto import *
from datetime import datetime

wx = WeChat()


def myTime():
    """
    该函数可以用于获取当前时间
    :return: string:当前时间
    """
    nowTime = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    return nowTime


message = ""
nums = ""
num = 50


def go():
    hours = datetime.now().strftime("%H")
    minutes = datetime.now().strftime("%M")
    sumNumber = int(hours) * 60 + int(minutes)
    print(myTime(), "\t" f"hours={hours},minutes={minutes},sumNumber={sumNumber}")
    return int(sumNumber)


while True:
    sumNumber = go()
    if 465 <= int(sumNumber) <= 490:
        sumNumber = go()

        wx = WeChat()  # 获取微信对象

        wx.GetSessionList()  # 获取聊天列表

        wx.ChatWith("*******")  # 打开指定聊天,改这里

        msgs = wx.GetAllMessage  # 获取指定聊天框内当前显示的聊天记录
        print(f"{myTime()},get message succeed!")

        # 检测接龙
        for lastMessage in msgs[::-1]:
            if str(lastMessage).find("#接龙") >= 0:
                message = lastMessage[1]  # 循环抓取接龙消息
                print(f"{myTime()},get #接龙 message succeed,{message}")
                break

        # 如果出现名字则直接离开
        if message.find("名字") < 0:

            while True:  # 循环,获取接龙的序号
                if message.find(str(num) + ".") > 0:
                    print(f"{myTime()},num = {num}, Index = {num + 1}")
                    nums = num + 1
                    break
                else:
                    num -= 1

            wxauto.WxUtils.SetClipboard(message + f"\n{nums}. 2202名字")
            print(f"{myTime()},get Clipboard succeed")
            wx.SendClipboard()



            print(f"{myTime()},send succeed!")
            click(x=1049, y=63)

    time.sleep(300)

如果是纯纯纯萌新,那看了我上面的一片之后应该看这个不成问题, 如果是大佬的话,真*献丑了...

腾讯会议:

腾讯会议上网课那可太弱智了,因为我没找到什么可以直接对着腾讯会议开干的第三方库,所以干脆pyautogui操控键鼠一顿点点点(我好像看过大佬说可以使用一些什么视觉识别来搞,比较高大上,但是我不会)

pyautogui同样,在终端控制台上pip install pyautogui ,更多细节操作可以看这位大佬的文章(12条消息) pyautogui自动化控制鼠标和键盘操作_灵动的艺术的博客-CSDN博客_pyautoguiicon-default.png?t=N7T8https://blog.csdn.net/weixin_43430036/article/details/84650938

from pyautogui import *

导入之后就是使用这行代码来测鼠标位置,因为腾讯会议每次打开位置都会刷新,所以可以放心调

x, y = position()
print(x, y)

接下来的操作就是:

        鼠标放在腾讯会议快捷方式上,alt + table切换回pycharm, ctrl + shift + F10运行脚本,把控制台上输出的位置记录下来,然后下一个,循环往复,

没有任何技术含量的操作,核心要点就是接下来几段代码:

# 这行代码是单击指定坐标
click(x=111,y=122)  
# 这行代码是键入指定字符串,第二个参数是每个字符输入的间隔
typewrite(message="", interval=0.1)
# 这行代码是敲击键盘特定键
press("enter")
# 这行代码是睡眠(单位秒)
sleep(120)

我的建议是把这打开腾讯会议的步骤写成一个方法,主要原因还是因为**微软的任务计划程序不能用,我就还得另计时,同样改成分钟来判断,比如8:20上课就是20+8*60,当前时间大于等于这个点就开始执行方法,(方法的第一行可以把鼠标在关闭会议的地方点一个,毕竟一天不可能就只有一节课),等方法执行完就让他睡眠一堂课的时间,等睡醒再继续循环判断当前时间是否到达下一节课的时间

我也曾想过关于签到打卡之类的事,但是我真的技术有限,有能力后可以给整个可视化界面,搞成个exe造福朋友圈.

同样,源码如下,记录我和好兄弟那几日的不断奋斗(源码里有很多没用的废话,甚至我可以说它就是一坨屎,但是如果把废话全删掉....还是一坨屎,一坨没眼看的屎) :

# -*- coding=utf-8 -*-
from pyautogui import *
from datetime import datetime
from overvx import *


x, y = position()
print(x, y)


def sign(meetingNumber: str):
    """
    需要给出腾讯会议的房间号作为参数
    :param meetingNumber: 会议号
    :return: 无
    """

    click(x=1145, y=59)  # 关闭会议
    sleep(5)
    click(x=762, y=408)  # 确认
    sleep(5)
    # join the meeting set, position=789, 280
    click(x=539, y=165)  # 加入会议
    sleep(5)
    click(x=828, y=62)  # 最小化
    sleep(5)
    click(x=536, y=183)  # 输入会议号
    # import meetingNumber
    sleep(2)
    typewrite(message=meetingNumber, interval=0.1)
    sleep(5)
    click(x=529, y=388)  # 勾掉"入会开启麦克风"
    sleep(5)
    click(x=532, y=330)  # 勾掉开启音频
    sleep(5)
    # join
    press("enter")
    sleep(120)
    # hotkey("alt", "m")


weeks = datetime.now().strftime("%A")


def action():
    hours = datetime.now().strftime("%H")
    minutes = datetime.now().strftime("%M")
    sumNumber = int(hours) * 60 + int(minutes)
    print(myTime(), "\t" f"hours={hours},minutes={minutes},sumNumber={sumNumber},当前的limit_of_time={limit_of_time}")
    return int(sumNumber)


time1 = "08:18"  # 498
over1 = "09:45"  # 585
time2 = "09:58"  # 598
over2 = "11:25"  # 685
time3 = "12:58"  # 778
over3 = "14:20"  # 860
time4 = "14:33"  # 873
over4 = "15:55"  # 955
limit_of_time = 0


while True:
    weeks = datetime.now().strftime("%A")
    if weeks == "Monday":
        limit_of_time = 0
        print("进入循环,周一")

        sumNumber = action()
        if 498 <= sumNumber <= 585:
            if limit_of_time == 0:
                print(myTime() + f"开始上周一上午第一节英语,limit_of_time={limit_of_time},开始睡眠,预计将在{sumNumber + 87}苏醒")
                sign("8786998539")  # 周一上午第一节英语
                sleep(5220)
                limit_of_time += 1

        if 598 <= sumNumber <= 685:
            if limit_of_time <= 1:
                print(myTime() + f"开始上周一上午第二节民法,limit_of_time={limit_of_time},开始睡眠,预计将在{sumNumber + 87}苏醒")
                sign("73713214298")  # 周一上午第二节民法
                sleep(5220)
                limit_of_time += 1

        if 873 <= sumNumber <= 955:
            if limit_of_time <= 2:
                print(myTime() + f"开始上周一下午第一节民法,limit_of_time={limit_of_time},开始睡眠,预计将在{sumNumber + 82}苏醒")
                sign("96627959698")  # 周一下午第一节民法
                sleep(4920)
                limit_of_time += 1
        print(f"{myTime()},脱离周一循环")

        # sleep(120)  # 单位秒

    elif weeks == "Tuesday":
        limit_of_time = 0
        print("进入循环,周二")

        sumNumber = action()
        if 598 <= sumNumber <= 685:
            if limit_of_time == 0:
                print(myTime() + f"开始上周二上午第二节道法,limit_of_time={limit_of_time},本节课不需要登录腾讯会议,开始睡眠,预计将在{sumNumber + 87}苏醒")
                # 上午第二节道法
                sleep(5220)
                limit_of_time += 1

        if 778 <= sumNumber <= 860:
            if limit_of_time <= 1:
                print(myTime() + f"开始上周二下午第一节视听,limit_of_time={limit_of_time},开始睡眠,预计将在{sumNumber + 82}苏醒")
                sign("4551453138")  # 下午第一节视听
                sleep(4920)
                limit_of_time += 1
        print(f"{myTime()},脱离周二循环")
        # sleep(120)

    elif weeks == "Wednesday":
        limit_of_time = 0
        print("进入循环,周三")

        sumNumber = action()
        if 498 <= sumNumber <= 585:
            if limit_of_time == 0:
                print(myTime() + f"开始上周三上午第一节信息,limit_of_time={limit_of_time},本节课不需要登录腾讯会议,开始睡眠,预计将在{sumNumber + 87}苏醒")
                # sign("97018438")  # 周一上午第一节信息
                sleep(5220)
                limit_of_time += 1

        if 598 <= sumNumber <= 685:
            if limit_of_time <= 1:
                print(myTime() + f"开始上周三上午第二节体育,limit_of_time={limit_of_time},本节课不需要登录腾讯会议,开始睡眠,预计将在{sumNumber + 87}苏醒")
                # 周一上午第二节体育
                sleep(5220)
                limit_of_time += 1

        if 778 <= sumNumber <= 860:
            if limit_of_time <= 2:
                print(myTime() + f"开始上周三下午第一节中华传统文化,limit_of_time={limit_of_time},开始睡眠,预计将在{sumNumber + 82}苏醒")
                sign("80574557409")  # 下午第一节中华传统文化
                sleep(4920)
                limit_of_time += 1

        if 873 <= sumNumber <= 955:
            if limit_of_time <= 3:
                print(myTime() + f"开始上周三下午第二节信息,limit_of_time={limit_of_time},本节课不需要登录腾讯会议,开始睡眠,预计将在{sumNumber + 82}苏醒")
                # sign("97018438")  # 下午第二节信息
                sleep(4920)
                limit_of_time += 1
        print(f"{myTime()},脱离周三循环")
        # sleep(120)

    elif weeks == "Thursday":
        limit_of_time = 0
        print("进入循环,周四")

        sumNumber = action()
        if 498 <= sumNumber <= 585:
            if limit_of_time == 0:
                print(myTime() + f"开始上周四上午第一节英语,limit_of_time={limit_of_time},开始睡眠,预计将在{sumNumber + 87}苏醒")
                sign("8786998539")  # 周一上午第一节英语
                sleep(5220)
                limit_of_time += 1

        if 778 <= sumNumber <= 860:
            if limit_of_time <= 1:
                print(myTime() + f"开始上周四下午第一节视听,limit_of_time={limit_of_time},开始睡眠,预计将在{sumNumber + 82}苏醒")
                sign("68014439420")  # 下午第一节视听
                sleep(4920)
                limit_of_time += 1

        print(f"{myTime()},脱离周四循环")
        # sleep(120)

    elif weeks == "Friday":
        limit_of_time = 0
        print("进入循环,周五")

        sumNumber = action()
        if 498 <= sumNumber <= 585:
            if limit_of_time == 0:
                print(myTime() + f"开始上周五上午第一节中处,limit_of_time={limit_of_time},开始睡眠,预计将在{sumNumber + 87}苏醒")
                sign("84965262308")  # 上午第一节中处
                sleep(5220)
                limit_of_time += 1

        if 598 <= sumNumber <= 685:
            if limit_of_time <= 1:
                print(myTime() + f"开始上周五上午第二节道法,limit_of_time={limit_of_time},本节课不需要登录腾讯会议,开始睡眠,预计将在{sumNumber + 87}苏醒")
                # 上午第二节道法
                sleep(5220)
                limit_of_time += 1
        print(f"{myTime()},脱离周五循环")
        # sleep(120)
    sleep(120)
# Monday :      英语 08:20 - 09:45 8786998539
#               民法 10:00 - 11:25 73713214298
#               民法 14:35 - 15:55 96627959698
# Tuesday:      思想 10:00 - 11:25 无
#               视听 13:00 - 14:20 4551453138
# Wednesday:    信息 08:20 - 09:45 97018438
#               体育 10:00 - 11:25 无
#               中华 13:00 - 14:20 80574557409
#               信息 14:35 - 15:55 97018438
# Thursday      英语 08:20 - 09:45 8786998539
#               法导 13:00 - 14:20 68014439420
# Friday        中处 08:20 - 09:45 84965262308
#               道法 10:00 - 11:25 无

  • 27
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Python微信小程序脚本是一种使用Python编写的针对微信小程序的脚本工具。通过这种脚本,开发者可以通过Python语言来实现对微信小程序的各种操作和功能。 Python微信小程序脚本具有以下特点和功能: 1. 自动化操作:通过Python脚本,可以模拟用户在微信小程序中的操作,比如实现自动登录、自动发送消息、自动点击等。这样可以减少开发者手动操作的时间和工作量。 2. 数据抓取和分析:Python脚本可以通过网络请求获取微信小程序的数据,并进行处理和分析。开发者可以使用Python的数据处理和分析库对微信小程序的数据进行抓取、清洗、统计等操作,以便进行更深入的数据分析和挖掘。 3. 测试和调试:Python脚本可以用于进行微信小程序的测试和调试。开发者可以编写脚本来模拟用户的各种操作,以便进行功能和性能的测试,并快速定位和解决问题。 4. 功能扩展:通过Python脚本,可以扩展微信小程序的功能。开发者可以通过Python来编写微信小程序的后台逻辑、定时任务等,以及与其他系统的对接,实现更复杂和强大的功能。 需要注意的是,使用Python微信小程序脚本时需要先了解微信小程序的开发规范和接口,以及Python相关的库和框架。通过合理使用Python脚本,可以提高开发效率、简化操作流程、增强小程序的功能和性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值