用Python实现对好友发送轰炸信息

Admin 2022-12-24 群英技术资讯 340 次浏览

这篇文章主要讲解了“用Python实现对好友发送轰炸信息”,文中的讲解内容简单、清晰、详细,对大家学习或是工作可能会有一定的帮助,希望大家阅读完这篇文章能有所收获。下面就请大家跟着小编的思路一起来学习一下吧。

目录
  • 爆炸信息窗口
    • 设计思路
    • 模块准备
    • 删除好友警告
  • 源代码
    • 批量获取表情包

      爆炸信息窗口

      适当娱乐,请勿打扰他人正常生活哦

      设计思路

      我是这样想的,如果只简单的写一个单一信息发送就太无趣了,于是我就像每次得发不同的话,那才有意思,于是就想到了txt文件,但是,只有文字是不是效果不强,于是想到了下最流行的交流方式:表情包,诶~这就齐了(当然各位还有其他的idear可以在评论区里评论哈)

      模块准备

      tkinter?不行,窗口界面差点意思,那就用 ttkbootstrap模块,ttkbootstrap 是一个基于 tkinter 的界面美化库,使用这个工具可以开发出类似前端 bootstrap 风格的 tkinter 桌面程序,但是还是得用到tkinter中的文件读取函数

      pynput模块,pynput是一个监听、操作键盘鼠标库,主要用来实现消息的发送,咱们的招数能不能放出去就靠它了

      time模块,time用来控制放招的间隔,咱们得讲究攻守进退呀!

      ctypes模块,

      os模块,主要用来查找文件,配合ttkbootstrap,擦出大火花

      PIL模块,可以叫它图像处理工具包,用来读取表情包

      win32con模块,此模块与pywin32配合使用,模块中定义了Windows下关于图形操作的API

      win32clipboard模块,它的功能主要有剪切中文、图片等信息,表情包能不能发出去就靠它了

      pyautogui模块,主要用来控制按下键盘的Ctrl+V键,相信各位对Ctrl C 和 Ctrl V的操作相当之熟练了吧

      删除好友警告

      先给大家开一下演示结果,带不带劲

      以下高能,娱乐有度️ 请勿频繁使用 ️ 删除好友警告

      第一式:只说一句

      第二式:唐僧念经(发送txt文件中的内容)

      第三式:不说了,扔图(发送表情包)

      源代码

      from tkinter import filedialog, Tk, Label
      import ttkbootstrap as tk
      from ttkbootstrap.constants import *
      from pynput.keyboard import Key, Controller as key
      from pynput.mouse import Button as Bu, Controller as mouse_el
      import time
      from ctypes import *
      import os
      from PIL import Image
      import win32con, win32clipboard
      import pyautogui
      
      
      """
      ============= 窗口设计 ===========
      """
      class Explosion_window(tk.Frame):
          # master等待接收根窗口对象,app等待接收自定义的模块
          def __init__(self, master=None, app=None):
              tk.Frame.__init__(self, master)
              self.master = master
              self.pack()
              # 调用在根窗口创建组件的函数
              self.createWidget()
      
          def createWidget(self):
              tk.Label(self, text='IT工藤新一 爆炸信息窗口', font=('华文行楷', 25)).grid(row=0, column=0, pady=10)
              tk.Button(self, text='第一式:我只说一句', command=self.first_formula, bootstyle=SUCCESS).grid(row=1, column=0, pady=10)
              tk.Button(self, text='第二式:唐僧念经', command=self.second_formula, bootstyle=SUCCESS).grid(row=2, column=0, pady=10)
              tk.Button(self, text='第三式:不说了,扔图', command=self.three_formula, bootstyle=SUCCESS).grid(row=3, column=0, pady=10)
      
          # 第一式
          def first_formula(self):
              root_1 = tk.Toplevel() # 实例化一个顶级类窗口
              root_1.title('第一式')
              root_1.geometry('500x300')
              tk.Label(root_1, text='第一式:我只说一句', font=('华文行楷', 22)).grid(row=0, column=1, pady=10)
              tk.Label(root_1, text='招数内容:', font=('华文行楷', 15)).grid(row=1,column=0)
              tk.Label(root_1, text='放招次数:', font=('华文行楷', 15)).grid(row=2, column=0)
              tk.Label(root_1, text='放招间隔(s):', font=('华文行楷', 15)).grid(row=3, column=0)
      
              words = tk.StringVar() # 接收用户输入的文字
              times = tk.IntVar() # 结束放招次数
              time_interval = tk.IntVar() # 接收放招间隔
      
              tk.Entry(root_1, textvariable=words, font=('黑体', 15)).grid(row=1, column=1, pady=10)
              tk.Entry(root_1, textvariable=times, font=('黑体', 15)).grid(row=2, column=1, pady=10)
              tk.Entry(root_1, textvariable=time_interval, font=('黑体', 15)).grid(row=3, column=1, pady=10)
              tk.Button(root_1, text='确定放招', command=lambda: app.first_move(words.get(), times.get(), time_interval.get(), root_1), bootstyle=(SUCCESS, OUTLINE)).grid(row=4, column=1)
              root_1.mainloop()
      
          def second_formula(self):
              formula = 2
              self.second_three_formula(formula) # 调用放招函数
      
          def three_formula(self):
              formula = 3
              self.second_three_formula(formula)  # 调用放招函数
      
          def second_three_formula(self, formula): # 第二、第三式的窗口一样,为了提高代码的重用性,用选择判断语句进行操作
              root_2 = tk.Toplevel()
      
              if formula == 2:
                  title1 = '第二式:唐僧念经'
                  text1 = '选择txt文件'
                  tk.Button(root_2, text='确定放招', command=lambda: app.second_move(filepath.get(), time_interval.get(), root_2),
                            bootstyle=(SUCCESS, OUTLINE)).grid(row=3, column=1, pady=10)
      
              elif formula == 3:
                  title1 = '第三式:不说了,扔图'
                  text1 = '选择表情包文件夹'
                  tk.Button(root_2, text='确定放招', command=lambda: app.three_move(filepath.get(), time_interval.get(), root_2),
                            bootstyle=(SUCCESS, OUTLINE)).grid(row=3, column=1, pady=10)
      
              root_2.title(title1)
              root_2.geometry('700x190')
              filepath = tk.StringVar()  # 接收路径
              time_interval = tk.IntVar()  # 接收放招间隔
              tk.Label(root_2, text=title1, font=('华文行楷', 22)).grid(row=0, column=1)
              tk.Label(root_2, text='文件路径:', font=('华文行楷', 15)).grid(row=1, column=0)
              tk.Label(root_2, text='放招间隔(s):', font=('华文行楷', 15)).grid(row=2, column=0)
      
              def select_file(filepath):  # 选择
                  # 选择文件夹
                  if formula == 2:
                      select_file_path = filedialog.askopenfilename()  # 使用askopenfilename函数选择单个文件
                  elif formula == 3:
                      select_file_path = filedialog.askdirectory() # askdirectory选择文件夹
                  filepath.set(select_file_path)
      
              tk.Entry(root_2, textvariable=filepath, font=('黑体', 15)).grid(row=1, column=1)
              tk.Entry(root_2, textvariable=time_interval, font=('黑体', 15)).grid(row=2, column=1)
              tk.Button(root_2, text=text1, command=lambda: select_file(filepath)).grid(row=1, column=2, pady=10)
      
          # 倒计时
          def count_down(self, info=None):
              pass
      
      
      """
      =============== 功能实现 ================
      """
      class Send_information(object):
          def __init__(self):
              pass
      
          # 放招函数,用于第一、二式
          def Release_moves(self, words=None, times=0, time_interval=0, txt_li=None): # times接收发送的次数,time_interval接收发送的时间间隔
              keyboard = key()  # 获取键盘权限
              mouse = mouse_el()  # 获取鼠标权限
              mouse.press(Bu.left)  # 鼠标左键点击
              mouse.release(Bu.left)  # 鼠标左键松开
              n = 5
              print('请在五秒内将鼠标放到聊天框内并点击!!!')
              for k in range(5):
                  print(f'倒计时{n - k}秒')
                  time.sleep(1)  # 程序运行等待五秒你是猪
      
              if times == 0:
                  for i in txt_li:
                      keyboard.type(f"{i}")  # 输入框的内容
                      keyboard.press(Key.enter)  # 回车键按下
                      keyboard.release(Key.enter)  # 回车键松开
                      time.sleep(time_interval)
              else:
                  for i in range(times):
                      keyboard.type(f"{words}")  # 输入框的内容
                      keyboard.press(Key.enter)  # 回车键按下
                      keyboard.release(Key.enter)  # 回车键松开
                      time.sleep(time_interval)
      
      
          # 接收用户输入的数据
          def first_move(self, words, times, time_interval, root_1):
              root_1.destroy()
              self.Release_moves(words=words, times=times, time_interval=time_interval) # 调用放招函数
      
      
          # 接收用户选择的文件路径
          def second_move(self, txt_path, time_interval, root_2):
              root_2.destroy()
              txt_li = [] # 保存txt中的语句
              with open(txt_path, 'r', encoding='utf-8') as f:
                  for line in f: # 循环遍历输出txt文件内容
                      if line in ['\n', '\r\n']: # 判空处理
                          pass
                      elif line.strip() == "": # 空行直接跳过
                          pass
                      else:
                          txt_li.append(line.strip()) # 将内容保存到txt中
              self.Release_moves(txt_li=txt_li, time_interval=time_interval) # 调用放招哈数
      
      
          # 接收用户选择的图片
          def three_move(self, photo_path, time_interval, root_3):
              root_3.destroy()
              filepath = [photo_path + '/' + file for file in os.listdir(photo_path)] # 拼接路径
              i = 0
              n = 5
              print('请在五秒内将鼠标放到聊天框内并点击!!!')
              for k in range(5):
                  print(f'倒计时{n - k}秒')
                  time.sleep(1)  # 程序运行等待五秒你是猪
      
              # 复制图片
              for path in filepath:
                  try:
                      im = Image.open(path)
                      im.save('11.bmp')
                      aString = windll.user32.LoadImageW(0, r"11.bmp", win32con.IMAGE_BITMAP, 0, 0, win32con.LR_LOADFROMFILE)
                  except:
                      continue
      
                  if aString != 0:  ## 由于图片编码问题  图片载入失败的话  aString 就等于0
                      win32clipboard.OpenClipboard()
                      win32clipboard.EmptyClipboard()
                      win32clipboard.SetClipboardData(win32con.CF_BITMAP, aString)
                      win32clipboard.CloseClipboard()
      
                      keyboard = key()  # 获取键盘权限
                      if i == 0:
                          i += 0
                      pyautogui.hotkey('ctrl', 'v')
                      keyboard.press(Key.enter)  # 回车键按下
                      keyboard.release(Key.enter)  # 回车键松开
                      time.sleep(time_interval)
      
      if __name__ == '__main__':
          root = tk.Window()   # 建立一个根窗口
          root.title('爆炸信息') # 窗口名称
          root.geometry('500x300') # 窗口大小  宽x高
          app = Send_information() # 实例化Send_information对象
          Explosion_window(root, app) # 实例化Explosion_window对象
          root.mainloop()
      

      这时你可能会问

      诶,到了这的小伙伴可能会有些疑问:表情包怎么下载呀?一个个手动下载岂不是太麻烦了呀……

      别担心,我怎么会让你们动手呢,最多动动脑

      来来来!敲黑板了!!!现在布置一个作业!接下来我将放一个批量下载表情包的源码,通过观察源码进行操作,实现图片下载。

      提醒!真相只有一个:只用改url 

      批量获取表情包

      import requests
      from lxml import etree
      import os
      import threading
      
      
      def get_url(url, img_urls): #获取图片url
          res = requests.get(url, headers=headers)    # 发送请求
          html = etree.HTML(res.text)     # 将html元素转换成html对象
          img_urls += html.xpath('//div[@class="thumbnail"]/a/img/@src')
      
      
      def user_choose(): # 用户选择下载图片的页数
          img_urls = []  # 存放图片url
          # 请输入下载网址
          url = 'http://www.bbsnet.com/egao'
          # 用户输入页数
          page = int(input('请输入获取的页数:'))
          for i in range(0, page):
              if page == 0:
                  get_url(url, img_urls)
              elif page >= 1:
                  link = url + f'/page/{i+1}'     # 拼接链接
                  get_url(link, img_urls)   #调用获取图片url的函数
          return img_urls
      
      
      def download_picture(img_url, i, j): # 下载图片
          res = requests.get(img_url, headers)
          with open(f'./表情包/表情包-{i}.{j}', 'wb') as f:
              f.write(res.content)
      
      
      if __name__ == '__main__':
          if not os.path.exists('./表情包'):
              os.makedirs('./表情包')
      
          headers = {
              'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36'
          }
          img_urls = user_choose()
      
          threads = []
          for i in range(len(img_urls)):
              t = threading.Thread(target=download_picture, args=(img_urls[i], i, img_urls[i][-3:]))
              threads.append(t)
          for t in threads:
              t.start()

      到此,关于“用Python实现对好友发送轰炸信息”的学习就结束了,希望能够解决大家的疑惑,另外大家动手实践也很重要,对大家加深理解和学习很有帮助。如果想要学习更多的相关知识,欢迎关注群英网络,小编每天都会给大家分享实用的文章!

      群英智防CDN,智能加速解决方案
      标签: Python发送信息

      免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。

      猜你喜欢

      成为群英会员,开启智能安全云计算之旅

      立即注册
      专业资深工程师驻守
      7X24小时快速响应
      一站式无忧技术支持
      免费备案服务
      免费拨打  400-678-4567
      免费拨打  400-678-4567 免费拨打 400-678-4567 或 0668-2555555
      在线客服
      微信公众号
      返回顶部
      返回顶部 返回顶部
      在线客服
      在线客服