前言:本人python菜鸟一枚,所以原理不难,也很粗糙,欢迎大佬指点,下文除了有代码内容还有我实现这个想法的阶段

最近刚处了个对象,身为大学程序猿的我也不懂制造浪漫,于是一个远古想法重新浮现了出来——在我小时候非常迷恋钢铁侠,对于他的Jarvis系统更是无比羡慕,早上睁开眼睛,自动播报天气预报,窗帘缓缓打开,播放音乐,这是多么令人向往的生活。不过,理想很丰满,现实很骨感,很显然我没那个能耐写出个Jarvis出来,但是一个天气预报还是可以的。

首先我的第一个想法是,微信,据我所知,在我刚接触python的时候,有个很好用的微信库叫wxpy,里面的功能很丰富,没记错的话除了能发消息还能看有谁单删了你之类的,不过这都有一个大前提,就是这个库依赖于网页版微信,但很遗憾的是现在腾讯已经封掉了网页版微信

目前也未知原因,这就导致了wxpy这个库彻底没用了,同时也包括itchat(其实我还在知乎看到了解决方法以及替代品,只是由于有点复杂,就没用了,有兴趣的大佬可以尝试一下,原文链接

基于hook的python机器人,彻底取代itchat - 知乎本文档部分由itchat与wxpy的开发文档修改得出 https://github.com/smallevilbeast/wechat_pc_api已经有人做了更好的机器人,本文停更 本文链接: https://zhuanlan.zhihu.com/p/114214846 禁止不规范转载WechatBot…https://zhuanlan.zhihu.com/p/114214846

后面我还有另一个想法,就是自动发短信,为此我也尝试了不少网站,像twilio以及一些国内的验证码平台,但这些都几乎有一个共同特点,不仅收费而且短信都会带上网站的前缀名字,twilio是我第一个尝试的也是网上推荐最多的,但是它有一个缺点是收发验证码的双方手机号都必须是在该网站注册过的才可以,还要注册这么麻烦就没有惊喜可言了嘛,当然我也想过直接用自己手机发,但是我甚至还不会如何在手机执行python程序。。。因此也否掉了,那是不是就没有其他方法了?

后来我突然想起来,在我以前学爬虫的时候有一个案例,就是自动发微信qq的,但是当初试验的时候,有太多的不方便和漏洞了,首先会有无法发送的情况,原因可能是鼠标光标定位问题,其次是这个方法有点笨拙,因为必须得打开到微信的个人聊条框,才可以执行,但是事已至此,这貌似也是目前最简单最可行的方法了

最终我在万能的csdn上找到了一个实现这个操作的代码再加以修改,终于实现了自动发微信的效果(由于年代久远,我找不到原文章了,但是这个代码也是我自己优化过的,如果原作者看到了可以联系我)

代码如下:

import win32api, win32gui, win32con
import win32clipboard as clipboard# 查找微信窗口,如果最小化则还原(需要固定位置)
title_name = '文件传输助手'  # 单独打开,好友名称
win = win32gui.FindWindow('ChatWnd', title_name)
print("找到句柄:%x" % win)
if win != 0:left, top, right, bottom = win32gui.GetWindowRect(win)print(left, top, right, bottom)  # 最小化为负数## 最小化时点击还原,下面为单个窗口if top < 0:# 鼠标点击,还原窗口win32api.SetCursorPos([190, 1040])  # 鼠标定位到(190,1040)win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP | win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)######点击完成一次time.sleep(0.5)left, top, right, bottom = win32gui.GetWindowRect(win)  # 取数## 最小时点击还原窗口,下面一节为多个窗口,依次点击打开。k = 1040  # 最小化后的纵坐标,横坐标约为190while top < 0 and k > 800:  # 并设定最多6次,防止死循环time.sleep(1)win32api.SetCursorPos([180, k - 40])  # 鼠标定位菜单第一个win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP | win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)######点击完成一次time.sleep(1)  # 等待窗口出现left, top, right, bottom = win32gui.GetWindowRect(win)  # 取数if top > 0:  # 判断是否还原breakelse:k -= 40  # 菜单上移一格win32api.SetCursorPos([190, 1040])  # 重新打开菜单win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP | win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)win32gui.SetForegroundWindow(win)  # 获取控制time.sleep(0.5)
else:print('找不到【%s】这个人(或群),请打开聊天框' % title_name)

这里以“文件传输助手”作为例子,以上为消息发送的原理部分,包含了定位窗口及鼠标操作,下面是消息粘贴部分

def send_m():# 以下为“CTRL+V”组合键,回车发送,(方法一)win32api.keybd_event(17, 0, 0, 0)  # 有效,按下CTRLtime.sleep(1)  # 延时win32gui.SendMessage(win, win32con.WM_KEYDOWN, 86, 0)  # Vwin32api.keybd_event(17, 0, win32con.KEYEVENTF_KEYUP, 0)  # 放开CTRLtime.sleep(1)  # 缓冲时间win32gui.SendMessage(win, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)  # 回车发送returndef txt_ctrl_v(txt_str):# 定义文本信息,将信息缓存入剪贴板clipboard.OpenClipboard()clipboard.EmptyClipboard()clipboard.SetClipboardData(win32con.CF_UNICODETEXT, txt_str)clipboard.CloseClipboard()return

至于发送内容,使用到的是百度天气的一个api,但是由于返回的值里面内容不是特别丰富,于是手动添加了一些词汇,当然这个功能还是很局限的,所以目前仅展示天气数据的收集部分,后面的穿衣建议可以由大家手动添加或者寻找其他api

import requestsclass Weather(object):def weather_data(self):city_id = 330100 #查询地区编码请前往https://blog.csdn.net/Madman_long/article/details/83374400ak = 'HELaVmuS91N8z1IjE9i3m2uAVFWGMVBU' #你的akurl = 'http://api.map.baidu.com/weather/v1/?district_id=%d&data_type=all&ak=%s'%(city_id,ak)result = requests.get(url).json()['result']['forecasts'][0]date = result['date'] #当天日期text_day = result['text_day'] #白天天气text_night = result['text_night'] #晚上天气high_temp = result['high'] #当天最高温度℃low_temp = result['low'] #当天最低温度℃wc_day = result['wc_day'] #风力wd_day = result['wd_day'] #风# suggest = result['index']data = [date, text_day, text_night, high_temp, low_temp, wc_day, wd_day]return data

最后就是消息内容的整合和内容发送模块啦,由于这是给对象发的,所以我还在前面添加了纪念日模块,记录我们是在一起的多少天

def count_day():pre = datetime(2021, 11, 18)  # 年月日时分秒 微秒now = datetime.now()dst = now - preday = str(dst).split(' ')return day[0]def read_sen():with open('love.txt', 'r', encoding='utf-8') as file:contents = file.readlines()day = count_day()wt = Weather()suggest = wt.suggest()date = (str(datetime.now()).split(' ')[0]).split('-')content = f'早上好!今天是{date[0]}年{date[1]}月{date[2]}日,是我们在一起的第 {day} 天~\n\n' + suggest + '\n\n' + contents[random.randint(0, 82)]txt_ctrl_v(content)send_m()print(content)

至于定时发送,也是困扰了我很久的问题,由于我打算设定的时间是每天早上七点,如果我才用python内置的sched模块,那意味着我需要整晚开启电脑,这多少还是有点不方便的,对电脑也不好,于是我采用的是windows自带的任务计划程序和python的sched相结合的方式(事实上不需要sched的,但是为了避免我这台电脑偶尔的抽风,比如连接WiFi的时间过长,所以才添加的)下面是windows任务计划程序使用的教程

一、右击win,找到计算机管理

二、打开后找到系统工具➡任务计划程序➡任务计划程序库

三、在右边“操作”那一栏找到创建基本任务

。。。。。

不好意思,懒得写了,参考这篇文章吧

Win10如何设置定时开关机休眠唤醒?设置定时开关机休眠唤醒的方法 - 系统之家现在大部分人都在使用Win10系统,因为这个是最新的系统,而且功能多。我们在没有硬件支持的情况下,可以利用Wndows系统自带的任务计划程序和休眠功能,实现计算的定时开关机,解决休眠重启问题。那要如何设置定时开关机休眠唤醒呢?http://www.xitongzhijia.net/xtjc/20160718/78112.html

注意使用的是休眠,如果是重启的话微信界面就会没了的,因此这也是这个程序弱智的地方,在休眠之前必须得把聊天窗口挂在最前面

然后重复这个任务计划程序的方法,计划执行python主程序,就可以啦

最后演示一遍这套程序的最终效果以及流程

首先在睡前将需要发送的人的窗口打开,最好放置在最前面

然后直接休眠,最后的效果长这样

最后的话:这是csdn小白第一次写文章,可能写的不够详细,有些当初遇到的问题也由于时代久远不太记得了,所以有什么问题可以私信我,多多担待多多支持呀~

如何利用python给女友制造惊喜(微信每日weather report)相关推荐

  1. 如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下)

    前天给大家分享了如何利用Python网络爬虫爬取微信朋友圈数据的上篇(理论篇),今天给大家分享一下代码实现(实战篇),接着上篇往下继续深入. 一.代码实现 1.修改Scrapy项目中的items.py ...

  2. python朋友圈动态_如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下)

    前天给大家分享了如何利用Python网络爬虫爬取微信朋友圈数据的上篇(理论篇),今天给大家分享一下代码实现(实战篇),接着上篇往下继续深入. 一.代码实现 1.修改Scrapy项目中的items.py ...

  3. python展示全部好友_利用Python网络爬虫抓取微信好友的签名及其可视化展示

    前几天给大家分享了如何利用Python词云和wordart可视化工具对朋友圈数据进行可视化,利用Python网络爬虫抓取微信好友数量以及微信好友的男女比例,以及利用Python网络爬虫抓取微信好友的所 ...

  4. python抓取朋友圈动态_如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下)...

    原标题:如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下) 前天给大家分享了如何利用Python网络爬虫爬取微信朋友圈数据的上篇(理论篇),今天给大家分享一下代码实现(实战篇),接着上篇往 ...

  5. python爬虫微信朋友圈怎么发文字_如何利用Python网络爬虫抓取微信朋友圈的动态(上)...

    今天小编给大家分享一下如何利用Python网络爬虫抓取微信朋友圈的动态信息,实际上如果单独的去爬取朋友圈的话,难度会非常大,因为微信没有提供向网易云音乐这样的API接口,所以很容易找不到门.不过不要慌 ...

  6. python爬虫好友聊天记录_利用Python网络爬虫抓取微信好友的签名及其可视化展示...

    前几天给大家分享了如何利用Python词云和wordart可视化工具对朋友圈数据进行可视化,利用Python网络爬虫抓取微信好友数量以及微信好友的男女比例,以及利用Python网络爬虫抓取微信好友的所 ...

  7. python抓取微信朋友圈动态_2018最全如何利用Python网络爬虫抓取微信朋友圈的动态...

    今天小编给大家分享一下如何利用Python网络爬虫抓取微信朋友圈的动态信息,实际上如果单独的去爬取朋友圈的话,难度会非常大,因为微信没有提供向网易云音乐这样的API接口,所以很容易找不到门.不过不要慌 ...

  8. python爬虫能爬取微信密码吗_如何利用Python网络爬虫抓取微信好友数量以及微信好友的男女比例...

    今天我们继续focus on微信,不过这次给大家带来的是利用Python网络爬虫抓取微信好友总数量和微信好友男女性别的分布情况.代码实现蛮简单的,具体的教程如下. 相信大家都知道,直接通过网页抓取微信 ...

  9. 2018最全如何利用Python网络爬虫抓取微信朋友圈的动态

    今天小编给大家分享一下如何利用Python网络爬虫抓取微信朋友圈的动态信息,实际上如果单独的去爬取朋友圈的话,难度会非常大,因为微信没有提供向网易云音乐这样的API接口,所以很容易找不到门.不过不要慌 ...

最新文章

  1. 6425C-Lab2 安全高效地管理AD
  2. C语言 使用指针对两个变量的数值进行互换
  3. python练习程序(批量重命名)
  4. mysql 临时表 heap_mysql优化: 内存表和临时表
  5. ipywidgets_未来价值和Ipywidgets
  6. linux+硬盘rd5,Raid磁盘阵列
  7. 代码检验方案:前端代码w3c校验
  8. Hat’s Words (分成两个字符串考虑)
  9. Mac电脑的12个神奇隐藏功能
  10. 使用Scylla进行OSINT信息收集
  11. 3D打印设计软件 FreeCAD 入门
  12. Java、JSP网上音像管理系统的设计与实现
  13. Sopcast for linux更新至3.01!
  14. 使用Gson序列化对象将属性值中“=”转为“\u003d”问题及解决
  15. c语言容斥原理求素数,容斥定理相关题目讲解
  16. 浅谈人脸识别技术的方法和应用
  17. ckfinder 配置 php,GitHub - itxq/ckfinder: CkFinder3.5.1 for PHP 优化版 (添加又拍云存储)...
  18. Java资深开发:这不得40k起步呀
  19. 【无标题】人工智能的定义
  20. 闲聊HTTP/2.0

热门文章

  1. 算法基础: 什么是红黑树?
  2. 教你安装Weblogic
  3. 保障4-0521任务打卡
  4. DDR3 出线 走线方法
  5. Hadamard Transform
  6. 速来接好运!工作2年获得阿里内推名额,历经阿里4面成功拿下offer!
  7. 刨根问底,5问分析法
  8. 使用JSP从服务器下载文件的示例
  9. 【Ubuntu】命令行的使用
  10. 上传即可使用的在线壁纸采集网页源码