中年大叔学编程-用Python每天给他/她的微信发送贴心天气预报

  • Post by eyiadmin
  • May 22, 2020
post-thumb

在这里,我们需要用墨迹天气pywin32两个东西,墨迹天气可能很多人都用过,那么pywin32是个什么东西呢?它是封装了Windows API的Python库

说起操作python操作微信发消息,可能大部分人都知道有个itchat的库,但是这个库是基于web微信的接口开发的,有些账号是限制了登录,比如我的账号就没办法登录web微信,所以只能用pywin32

pywin32的基本操作

首先,我们需要安装pywin32

pip install pywin32

import win32gui
import win32api
import win32con
import win32clipboard
import time

# 将内容复制到剪切板
win32clipboard.OpenClipboard()
win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardData(win32con.CF_UNICODETEXT,"测试发送") 
win32clipboard.CloseClipboard()

win = win32gui.FindWindow('ChatWnd','文件传输助手')  # 查找窗体句柄
win32api.keybd_event(17, 0, 0, 0)  # 17是Control的按键码,这里的作用的按下ctrl键
time.sleep(1) 
win32gui.SendMessage(win, win32con.WM_KEYDOWN, 86, 0)  # 86是v的按键码
win32api.keybd_event(17, 0, win32con.KEYEVENTF_KEYUP, 0)  # 释放CTRL按键
time.sleep(2)  # 等待2s
win32gui.SendMessage(win, win32con.WM_KEYDOWN, 13, 0)  # 按下回车键

来看看效果 这里需要注意的问题是,要发送的窗口必须是单独能查找到的,另外目前这个代码只能是窗口置于顶层,这个也是有办法处理的哟。 在代码中的窗口句柄是怎么获得的呢?这里需要借助一个叫**spy++**工具,来演示一遍

我点击的地方就是分别需要传到win32gui.FindWindow的参数,是不是很简单呢?

获取墨迹天气信息

这里我们可以直接从墨迹天气中获得相应的天气数据

from pyquery import PyQuery as pq

page=pq(url="https://tianqi.moji.com/weather/china/sichuan/chengdu",encoding='utf-8')
tips=page(".wea_tips em")
meta=page("*[name='description']")
print(meta.attr('content'))
print(tips.text())

用微信发送墨迹天气

上面基本把代码都写出来了,现在再来整合一下

import win32gui
import win32api
import win32con
import win32clipboard
import time

from pyquery import PyQuery as pq

page=pq(url="https://tianqi.moji.com/weather/china/sichuan/chengdu",encoding='utf-8')
tips=page(".wea_tips em")
meta=page("*[name='description']")
print(meta.attr('content'))
content=meta.attr('content')+"\n"+tips.text()

# 将内容复制到剪切板
win32clipboard.OpenClipboard()
win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardData(win32con.CF_UNICODETEXT,content) 
win32clipboard.CloseClipboard()

win = win32gui.FindWindow('ChatWnd','文件传输助手')  # 查找窗体句柄
win32api.keybd_event(17, 0, 0, 0)  # 17是Control的按键码,这里的作用的按下ctrl键
time.sleep(1) 
win32gui.SendMessage(win, win32con.WM_KEYDOWN, 86, 0)  # 86是v的按键码
win32api.keybd_event(17, 0, win32con.KEYEVENTF_KEYUP, 0)  # 释放CTRL按键
time.sleep(2)  # 等待2s
win32gui.SendMessage(win, win32con.WM_KEYDOWN, 13, 0)  # 按下回车键

这里我们再来看看最终效果, 基本效果是有了,但是还有很多细节需要处理的,这个在后面再慢慢完善吧,是不是觉得挺好玩的呢?反正我是越学越带劲了

我只是记录我的学习过程,由于书读的少,可能很多地方表述或者是理解得不对,请轻喷并指正。

LATEST POST
  • Post By eyiadmin
  • Apr 18, 2021
.NET5快速接入支付宝扫码支付
  • Post By eyiadmin
  • Apr 18, 2021
uView练手开发-开发一个图片小程序
TAG
CATEGORIES