
在这里,我们需要用墨迹天气
和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) # 按下回车键
这里我们再来看看最终效果,
基本效果是有了,但是还有很多细节需要处理的,这个在后面再慢慢完善吧,是不是觉得挺好玩的呢?反正我是越学越带劲了
我只是记录我的学习过程,由于书读的少,可能很多地方表述或者是理解得不对,请轻喷并指正。