最近,女友奇奇怪怪的要求越来越多了。竟然要我每天晚上十二点准时给她发晚安!
但是拥有 Python 的我怎么可能忍受得了这种煎熬呢!于是,我立马用 Python 做了一个自动发晚安神器!
pyautogui 库是一个可以控制键盘、鼠标的库。我们可以利用它实现自动发消息。
pyperclip 库可以将文本复制到剪贴板。
apscheduler 库可以创建定时任务
安装:
pip install pyautogui
pip install apscheduler
导入:
import pyautogui as pg
import pyperclip as pc
from apscheduler.schedulers.blocking import BlockingScheduler
打开微信设置,点击快捷键设置,我们会发现默认打开微信的快捷键是 “Ctrl + Alt + W”。因此,我们可以输入快捷键来打开微信。
快捷键格式:
pg.hotkey(*keys)
我们输入打开微信的快捷键。
pg.hotkey('ctrl', 'alt', 'w')
进入微信后,按下快捷键 “Ctrl + F” 即可打开搜索界面。

pg.hotkey('ctrl', 'f')
然后,在这里输入你的女朋友的昵称,按下回车键即可进入聊天。

在 pyautogui 中,有以下几种方式输入字符:
# 输入多个英文字母,不能同时输入字母和特殊键位
pg.typewrite('keys')
# 输入单个字母,可以按下特殊键位
pg.typewrite(['k', 'e', 'y', 's', 'enter'])
# 只能输入一个字母或特殊键
pg.press('enter')
但是以上方法都无法输入中文。
一种解决方式是使用你的输入法输入中文。
pg.typewrite('nvpengyou ')# 空格用于选中第一项

另一种是用 pyperclip 库复制中文,再用快捷键粘贴。
pc.copy('女朋友')
pg.hotkey('ctrl', 'v')

我们选择使用第二种。
然后,我们按下 Enter 键,选择聊天。
pg.press('enter')
同样,我们首先复制要发送的消息,然后粘贴按下 Enter 发送。
pc.copy('晚安')
pg.hotkey('ctrl', 'v')
pg.press('enter')

发完消息后,别忘了隐藏微信。因为打开微信、隐藏微信用的都是同一快捷键,如果不隐藏,那么下次发时将会隐藏微信,什么也发不出去。
pg.hotkey('ctrl', 'alt', 'w')
我们将上面的代码封装到一个函数 main() 中。然后,通过调度器实现定时任务。
scheduler = BlockingScheduler() # 实例化一个调度器
scheduler.add_job(main, 'cron', hour=0, minute=0) # 添加任务
scheduler.start()
添加任务中,cron 表示重复在指定时间执行任务。如上面代码则是每天 0 时 0 分执行任务。
import pyautogui as pg
import pyperclip as pc
from apscheduler.schedulers.blocking import BlockingScheduler
# 操作间隔为1秒
pg.PAUSE = 1
name = '女朋友'
msg = '晚安'
def main():
# 打开微信
pg.hotkey('ctrl', 'alt', 'w')
pg.hotkey('ctrl', 'f')
# 找到女朋友
pc.copy(name)
pg.hotkey('ctrl', 'v')
pg.press('enter')
# 发送消息
pc.copy(msg)
pg.hotkey('ctrl', 'v')
pg.press('enter')
# 隐藏微信
pg.hotkey('ctrl', 'alt', 'w')
if __name__ == '__main__':
scheduler = BlockingScheduler() # 实例化一个调度器
scheduler.add_job(main, 'cron', hour=0, minute=0) # 添加任务
scheduler.start()
此代码在 Windows7 Python3.8.6 下调试通过。
效果:

录屏的可能有些不清晰。
感谢阅读!
原创不易,期待你的点赞、收藏与关注!
本文收录于专栏 Python。
关注作者,互助交流,学习更多 Python 知识!
https://blog.csdn.net/weixin_48448842
推荐阅读
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我是rails的新手,想在form字段上应用验证。myviewsnew.html.erb.....模拟.rbclassSimulation{:in=>1..25,:message=>'Therowmustbebetween1and25'}end模拟Controller.rbclassSimulationsController我想检查模型类中row字段的整数范围,如果不在范围内则返回错误信息。我可以检查上面代码的范围,但无法返回错误消息提前致谢 最佳答案 关键是您使用的是模型表单,一种显示ActiveRecord模型实例属性的表单。c
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht
我的工作要求我为某些测试自动生成电子邮件。我一直在四处寻找,但未能找到可以快速实现的合理解决方案。它需要在outlook而不是其他邮件服务器中,因为我们有一些奇怪的身份验证规则,我们需要保存草稿而不是仅仅发送邮件的选项。显然win32ole可以做到这一点,但我找不到任何相当简单的例子。 最佳答案 假设存储了Outlook凭据并且您设置为自动登录到Outlook,WIN32OLE可以很好地完成此操作:require'win32ole'outlook=WIN32OLE.new('Outlook.Application')message=
我正在使用Ruby,我正在与一个网络端点通信,该端点在发送消息本身之前需要格式化“header”。header中的第一个字段必须是消息长度,它被定义为网络字节顺序中的2二进制字节消息长度。比如我的消息长度是1024。如何将1024表示为二进制双字节? 最佳答案 Ruby(以及Perl和Python等)中字节整理的标准工具是pack和unpack。ruby的packisinArray.您的长度应该是两个字节长,并且按网络字节顺序排列,这听起来像是n格式说明符的工作:n|Integer|16-bitunsigned,network(bi
华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o
我想解析一个已经存在的.mid文件,改变它的乐器,例如从“acousticgrandpiano”到“violin”,然后将它保存回去或作为另一个.mid文件。根据我在文档中看到的内容,该乐器通过program_change或patch_change指令进行了更改,但我找不到任何在已经存在的MIDI文件中执行此操作的库.他们似乎都只支持从头开始创建的MIDI文件。 最佳答案 MIDIpackage会为您完成此操作,但具体方法取决于midi文件的原始内容。一个MIDI文件由一个或多个音轨组成,每个音轨是十六个channel中任何一个上的
本文主要介绍在使用Selenium进行自动化测试或者任务时,对于使用了iframe的页面,如何定位iframe中的元素文章目录场景描述解决方案具体代码场景描述当我们在使用Selenium进行自动化测试的时候,可能会遇到一些界面或者窗体是使用HTML的iframe标签进行承载的。对于iframe中的标签,如果直接查找是无法找到的,会抛出没有找到元素的异常。比如近在咫尺的例子就是,CSDN的登录窗体就是使用的iframe,大家可以尝试通过F12开发者模式查看到的tag_name,class_name,id或者xpath来定位中的页面元素,会抛出NoSuchElementException异常。解决
如果我在模型中设置验证消息validates:name,:presence=>{:message=>'Thenamecantbeblank.'}我如何让该消息显示在闪光警报中,这是我迄今为止尝试过的方法defcreate@message=Message.new(params[:message])if@message.valid?ContactMailer.send_mail(@message).deliverredirect_to(root_path,:notice=>"Thanksforyourmessage,Iwillbeintouchsoon")elseflash[:error]