飞雪团队

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 15027|回复: 0

女朋友让我深夜十二点催她睡觉,我有Python我就不干

[复制链接]

7982

主题

8070

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26276
发表于 2022-2-12 14:35:43 | 显示全部楼层 |阅读模式
' A8 A+ j4 L: K0 Z% Y
<p>事情是这样的:今天晚上,女朋友让我十二点催她睡觉。<br>. A# @4 ]0 k# _/ e+ G, a* Q" n/ N
<img src="https://img-blog.csdnimg.cn/28feb6811cc142f5b0e38e81e73d5043.png" ><br>7 j9 r5 Z- {( o/ y) p
不过,可是我实在太困了,熬不下去…… 是吧?女朋友哪有睡觉重要?<br>% @3 ?: Y) d# w) j; U
<img src="https://img-blog.csdnimg.cn/ddf8351a359e45218952d4d3962ff278.jpg" ><br>
- g" d& g+ t9 T2 c. H! G4 h, l1 C但,女朋友的命令,我是不敢违抗的……<br>
% j! J9 d: v, B. d/ }4 p& w! d<img src="https://img-blog.csdnimg.cn/87fe69f100904f4782a720254ef49191.png" ><br>
" p; X& l' d( u/ b9 A8 |但是睡觉也不能缺!</p>
& W4 `: @. ^( A: I<p>这时候我们该怎么办呢?是时候让Python登场了!</p>
, @1 F5 |( p2 Z- ~# O<h1 id="python登场">Python登场</h1>
! X1 m; v$ x2 I<p>这次我们来做一个自动发送微信的程序,在深夜十二点的时候给女朋友发去消息,也算是尽了一个男朋友的义务了。</p>
% w/ u. o% p8 b& w+ o<h2 id="安装和导入">安装和导入</h2>2 @+ D5 B- P, @- F( r" X* W5 \
<p>我们需要两个模块:<strong>apscheduler</strong>,<strong>pyautogui</strong></p>$ B# t4 P/ Q  {+ W
<p>快捷键 Windows+r 打开运行控制框,输入 cmd,进入命令行,输入:</p>
6 ~3 P& ^9 S1 Y' Z8 U# ]" G/ h9 c' ]- @<pre><code class="language-p">pip install apscheduler0 f4 L( a6 W( x, I; q$ ]8 ^7 a" \
pip install pyautogui" a8 X% L. F7 y3 t6 r. f
</code></pre>0 @9 B. H9 R; i) \
<p>导入:</p>$ i# i' x9 O" z/ }' _2 w
<pre><code class="language-python">import pyautogui0 o8 v+ i3 U. |2 b
from datetime import datetime
9 `8 g* i: I* j+ t/ }! }from apscheduler.schedulers.blocking import BlockingScheduler # 阻塞当前进程的调度器. Z/ _: C0 Y( j
# blocking类型调度器会阻塞当前进程,若你想要后台运行的调度器,可以使用以下代码:
: ]9 R" R! e& g$ j( r; G/ w$ S# from apscheduler.schedulers.background import BackgroundScheduler
) k* I* B$ G& j& h</code></pre>; W. ]0 j) h6 K$ e% x* m8 O; @9 i  Q: F
<h1 id="pyautogui">pyautogui</h1>
+ X; q0 z; H5 ~7 Q<p>首先我们来实现自动发送消息</p>
" J7 l0 w: `. T) U3 I/ r8 [# l( }<p>pyautogui 是一个非常强大的库,可以操作鼠标和键盘。我们将用它来完成自动操作电脑。</p>
7 I  ^; A) V! K1 d0 d<p>先来做一些基本设置:</p>
6 [) @7 a+ D- \! n<pre><code class="language-python">pyautogui.PAUSE = 1 # 设置每一步操作的间隔(秒),可防止操作太快7 _5 |  w7 U7 M% }
</code></pre>; q7 X3 d) u4 l; j  Z0 E, b& s
<p>然后我们登录微信,最小化。</p>' B& o0 L0 N! `: I) C  F' J1 A/ _
<p>接下来我们把鼠标放到微信的任务栏图标上,运行以下语句,获取此时光标的坐标,返回一个Point对象:</p>
0 u2 Z$ ]+ l. g8 G<pre><code class="language-python">print(pyautogui.position()) # 打印坐标,Point(x=148, y=879)8 K: @1 ]; d4 ]# s! j1 k6 b* K
icon_position = pyautogui.position() # Point(x=148, y=879)
6 I7 p' J0 g$ R* z</code></pre>& h+ h8 r, X% y5 @# W2 R( o
<p>打开微信,选择女朋友的回话窗口,将鼠标放在输入框上,同样获取光标坐标,为了将焦点锁定到输入框以方便待会的输入。<br>
6 Y5 a" D" n' e. S! D; O9 E! o<img src="https://img-blog.csdnimg.cn/4809ee2ce93b40a0828717f811b02599.png" ></p>
6 |# U+ Q4 G. l7 `3 R$ W* B<pre><code class="language-python">print(pyautogui.position()) # 打印坐标,Point(x=174, y=751)+ ~. ~0 k% ?! `/ h. P
entry_position = pyautogui.position() # Point(x=174, y=751)
8 s+ ]1 Q' A2 `4 y4 i</code></pre>; d) ]7 d  a! x1 ?- i" ?  H
<p>接下来,控制程序依次点击这两个点:</p>
4 \9 v- c0 o7 ?* \5 z<pre><code class="language-python">pyautogui.click(icon_position) # 默认左键单击
/ o1 _, l; M* c+ ^- i7 T& H# pyautogui.click(148, 879)$ T* Z% j5 T; y
pyautogui.click(entry_position)
4 C+ y; a0 |" q6 v$ n/ r# pyautogui.click(174, 751), n5 i% p4 c) z9 k% E1 N. h! p* l
</code></pre>3 K2 `4 e6 f9 {0 b
<p>打开微信并锁定焦点后,我们开始输入文本。</p>
* o6 a8 H: `' u1 ]$ T<p>输入文本可以有两种方式:</p>$ ^4 G* a. k9 o' |( P  c0 h
<ul>
) U# j& N# F5 E/ s8 J<li>
$ D7 Y% g2 z: |# Z<p><code>pyautogui.typewrite(['o', 'n', 'e', 'enter'])</code></p>
5 I) x! n9 F. }! R<p>在方法中传入一个列表,里面每一元素都是单个字母或特殊按键</p>8 [0 A) j. C# S# y- S- [
</li>( i+ s/ u" a$ V  R. P
<li>
, L+ A- \! U- M! U1 m# n8 ^<p><code>pyautogui.typewrite('You can type multiple letters in this way')</code></p>1 k* g6 O- z3 o) Z0 e' I2 r4 F
<p>传入字符串,但不能同时打印字母和特殊按键。</p># ~$ \2 D$ i: D/ z' u
</li># m* R# X+ ?5 p0 ~0 k
</ul>" g* G: ?$ s1 n- @& O4 j
<p>这两种方式都不能直接输入中文,所以只能依靠你的输入法来输入中文了。</p>: z8 v4 g" j: n: K8 M) T3 w
<pre><code class="language-python">pyautogui.typewrite([*list('zhengzai '), *list('jinxing '), 'shift', *list('pyautogui'), 'shift', *list('shiyan '), 'enter'], 0.1) # 第一个参数是输入文本,第二个是输入每个字符的间隔时间% A2 y, b  {! f# t! r' {
</code></pre>( a  R8 a9 T+ C* e$ _, s8 B. p
<p>为了使我们的操作更加 <s>人模狗样</s> 像人的操作,我么来加上移动鼠标的代码:</p>; N7 ~, ]& @! q5 j" z0 {
<pre><code class="language-python">pyautogui.moveTo(icon_position, duration=2) # duration为执行时长,可选
1 ~7 @, G( C; ]# F5 o7 u, }pyautogui.click(icon_position). e! n/ j7 O0 E" l( ^( u
pyautogui.moveTo(entry_position, duration=2)9 ~4 r1 E1 Q% v* K$ g# C
pyautogui.click(entry_position)6 k1 W; z6 J' W% Z& C
pyautogui.typewrite([*list('zhengzai '), *list('jinxing '), 'shift', *list('pyautogui'), 'shift', *list('shiyan '), 'enter'], 0.1) # 第二个参数为按下每一个字母的间隔,可选" \: c6 }( }0 Z$ {) l7 M
</code></pre>2 t, g' N7 N8 k% i2 p3 e. f! H
<p>看看效果:<br>& F; R9 j/ t8 G9 ?1 S+ a- Z
<img src="https://img-blog.csdnimg.cn/88126f4b522c4584a3de07c4c35a808d.gif" ><br>
2 J$ m2 t* q4 v4 ?* ?3 G  U0 O$ R/ v当然,若是你要输入的内容实在很多,又嫌麻烦,可以通过复制粘贴来实现:</p>6 n4 S5 X5 q( o% ^7 P" ?* H1 f
<pre><code class="language-python">import pyperclip
2 p7 s/ [) Q+ L2 r6 O
3 ~+ u0 O2 y+ ], {pyperclip.copy('正在进行发中文试验,看到请忽略,更不要骂傻逼') # 复制
% g& e" x+ `+ G$ ]$ T) f0 jpyautogui.hotkey('ctrl', 'v') # 按下组合键的方法,ctrl+v粘贴
- F4 ]8 f3 N, D, @# q/ l; |, Epyautogui.press('enter') # 按下按键
+ t9 ]/ t3 q. D0 B  `</code></pre>8 H& w% o" ?5 H3 U
<p><img src="https://img-blog.csdnimg.cn/d178d71e5d564893a1aee8672841c76a.gif" ><br>7 V8 y0 C- y0 h! l, J0 b
这样,我们便完成了自动发送微信消息的功能了。</p>8 @& U7 V/ u+ l- W5 l- O+ t7 V
<h1 id="apscheduler">apscheduler</h1>
; m& |* [1 ]1 X( p, a* T/ R<p>APScheduler 是一个Python库,可实现延迟调度要执行Python代码的功能,可以只执行一次,也可以定期执行。可以随时添加新任务或删除旧任务。能够十分方便地进行定时任务。</p>6 w& j0 q0 G/ C+ q: b8 ^: F
<pre><code class="language-python">scheduler = BlockingScheduler() # 实例化一个调度器- V0 J  k7 t- p4 P" p) a
scheduler.add_job(main, 'date', run_date=datetime(2021, 8, 18, 24, 00, 00)) # 添加任务% {. K* }" O5 w9 W) y5 d% y) b
scheduler.start()
3 s5 J" J6 E" a0 S</code></pre>
  n, s& R! N& M3 P<p>add_job 方法在这里传了 3 个参数,第一个为到时间后要执行的函数,第二个为触发器的类型。这里选用的是 date 触发器,特定的时间点触发,作业任务只会执行一次。第三个参数 run_date 就是执行的时间。在这前我已经把自动发送消息的代码封装为了 main 函数,只需到时后调用即可。</p>& A+ n" u' F9 U/ H1 Z+ @: B. Y# s
<h1 id="完整代码">完整代码</h1>- w9 S( p& T' R5 H
<pre><code class="language-python">import pyautogui2 n) J( }/ m6 w+ f
import pyperclip
* u* g" f+ _8 L  W$ Afrom datetime import datetime
& t9 |9 e  a! W) d! Ofrom apscheduler.schedulers.blocking import BlockingScheduler, j2 U  C5 J7 _

  r  _0 n  z& j4 X% {, z4 Ydef main():
1 g* {! [4 K# N; |" u        pyautogui.PAUSE = 0
2 M# W0 E9 j0 q+ O! J
2 Z8 T9 [& e1 z* Y        icon_position = pyautogui.Point(x=148, y=879) # 任务栏图标位置
# d9 S% j; S" m) ]! F        entry_position = pyautogui.Point(x=174, y=751) # 输入框位置
) O( g! k1 ?2 `- j
3 a6 d3 C+ K( ~" p5 L9 @2 n5 `        pyautogui.moveTo(icon_position, duration=1) # duration为执行时长,可选- n: d0 M% p3 c1 ^$ q
        pyautogui.click(icon_position)
/ }5 k# I$ `. I. q        pyautogui.moveTo(entry_position, duration=0.7)
( M5 K( |; [: l& q" k        pyautogui.click(entry_position)
9 z4 b5 |) x+ H3 Y        pyperclip.copy('快去睡觉')
3 N+ W. ~8 c' [  t; H/ d        pyautogui.hotkey('ctrl', 'v')  X4 ^3 m! B  S. C/ Z# j
        pyautogui.press('enter')% \3 J# C. n4 J- m+ X5 p& @5 S# S+ G
    pyperclip.copy('笨猪')
. V4 L0 Z5 D& o6 R2 F1 h        pyautogui.hotkey('ctrl', 'v')
* o% s; y# C% t6 [        pyautogui.press('enter')
# `2 x5 H+ z, t0 A3 f! D   
$ l* V, C: g! r4 @% D8 j( {scheduler = BlockingScheduler() # 实例化5 ^! Z6 W+ M8 g7 g8 P
scheduler.add_job(main, 'date', run_date=datetime(2021, 8, 18, 24, 00, 00)) # 添加任务3 E6 j9 M, T% O. y# V/ m: r
scheduler.start()7 |& i3 H6 @* w0 @2 s' I
</code></pre>) t7 h: r7 P5 M
<p>完成啦!现在可以去睡觉了。</p>! z& p& i1 |5 R5 d
<h1 id="结果">结果</h1>' @3 X  V, M% B' P: g$ x) \
<p>第二天早上起床,我被我妈妈骂了一顿,问我为什么午夜12点的时候电脑还亮着,而且还在自己发微信!</p>
; Q, _/ F1 ^/ J5 r<p>不过,好在女朋友没丢,我成功完成了女朋友的任务!<br>
( r- i( l" I$ J' B<img src="https://img-blog.csdnimg.cn/111c7494bd6e4371bbd541529c48b776.gif" ></p>& h9 W) P6 d4 h$ c2 F' X
<hr>/ n  t/ ~" Y9 n8 q9 x2 O
<h1 id="---the-end---">-- the End --</h1>
9 a" P3 `# x2 U) ^! f' i8 V, N) T<p>好啦,这篇文章就到这里了。以上就是我分享的全部内容,感谢阅读!</p>
3 r( A8 {; Q& T' f0 q( H<p>打个小广告:作者CSDN博客主页:<br>: T# @- \7 Y( H1 R4 i% H8 J2 ~9 Z
<a  href="https://blog.csdn.net/weixin_52132159">https://blog.csdn.net/weixin_52132159</a></p>4 m+ _$ ~6 N% E& ]: C- r
3 V3 r: X/ t0 {2 t4 g
回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|飞雪团队

GMT+8, 2025-11-26 23:31 , Processed in 0.108887 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表