飞雪团队

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

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

[复制链接]

8059

主题

8147

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26507
发表于 2022-2-12 14:35:43 | 显示全部楼层 |阅读模式

) a* ~/ V3 S/ t2 b4 T% J0 N  J<p>事情是这样的:今天晚上,女朋友让我十二点催她睡觉。<br>! @! ^' ^0 p) s7 q2 C
<img src="https://img-blog.csdnimg.cn/28feb6811cc142f5b0e38e81e73d5043.png" ><br>0 |! c# z" d( M; r% o1 T1 [$ T
不过,可是我实在太困了,熬不下去…… 是吧?女朋友哪有睡觉重要?<br>
6 C# u. |3 Z9 l2 O<img src="https://img-blog.csdnimg.cn/ddf8351a359e45218952d4d3962ff278.jpg" ><br># l8 R: `7 @  L
但,女朋友的命令,我是不敢违抗的……<br>
8 f' s$ k+ f+ J+ l% ]<img src="https://img-blog.csdnimg.cn/87fe69f100904f4782a720254ef49191.png" ><br>
  e) p3 p" F7 r1 y) E% h( l但是睡觉也不能缺!</p>
% ?0 S8 Q# n* Y) g' s% ^<p>这时候我们该怎么办呢?是时候让Python登场了!</p>3 A2 r5 b" K6 p% u1 o) ]
<h1 id="python登场">Python登场</h1>) D( [6 w5 g& V; j5 [- X3 |
<p>这次我们来做一个自动发送微信的程序,在深夜十二点的时候给女朋友发去消息,也算是尽了一个男朋友的义务了。</p>6 e) X. l8 e+ C* J' V
<h2 id="安装和导入">安装和导入</h2>
3 Y1 C) d8 Q$ }/ h6 k/ o<p>我们需要两个模块:<strong>apscheduler</strong>,<strong>pyautogui</strong></p>
+ x7 Z( [7 m7 s' ~( Y7 r1 W<p>快捷键 Windows+r 打开运行控制框,输入 cmd,进入命令行,输入:</p>$ ^5 `7 M2 g) o+ R& U
<pre><code class="language-p">pip install apscheduler. _5 Q  O% d9 ]# B$ U1 f
pip install pyautogui
1 ?) p( c- G. F  M% ?9 e. u$ Z/ x</code></pre>
" \% l( Y& M4 W6 g) Q. }7 n<p>导入:</p>
3 I" t& ^2 j4 x. u<pre><code class="language-python">import pyautogui
* P5 L4 Y4 t# i2 vfrom datetime import datetime
1 q$ g9 V4 M3 o: R% qfrom apscheduler.schedulers.blocking import BlockingScheduler # 阻塞当前进程的调度器! p. \. K% G8 D* |3 D, A
# blocking类型调度器会阻塞当前进程,若你想要后台运行的调度器,可以使用以下代码:- U& K: ?3 a' j
# from apscheduler.schedulers.background import BackgroundScheduler2 I+ j( p- ?4 D$ I5 G! N& Q8 E
</code></pre>' L' k  k" N/ y# |/ f1 e7 C  M2 i
<h1 id="pyautogui">pyautogui</h1>
5 W' C6 z( N0 b7 @  U8 n8 S<p>首先我们来实现自动发送消息</p>7 {: M4 p3 z8 H9 p9 o; U+ d
<p>pyautogui 是一个非常强大的库,可以操作鼠标和键盘。我们将用它来完成自动操作电脑。</p>
& a* L' ~! r. b8 `1 {9 W" P! _" m<p>先来做一些基本设置:</p>
. T! i/ ^6 }4 p! W# u<pre><code class="language-python">pyautogui.PAUSE = 1 # 设置每一步操作的间隔(秒),可防止操作太快
8 _: E  I" W9 N* }" Z0 E</code></pre>* u. J* A/ t8 j  X4 L) I
<p>然后我们登录微信,最小化。</p>" Y  V, @5 y7 v+ a1 S
<p>接下来我们把鼠标放到微信的任务栏图标上,运行以下语句,获取此时光标的坐标,返回一个Point对象:</p>3 T5 @5 c$ ]$ G! F6 P1 C4 C
<pre><code class="language-python">print(pyautogui.position()) # 打印坐标,Point(x=148, y=879)! _9 Y& l! a0 C. S% ^9 i. N  |
icon_position = pyautogui.position() # Point(x=148, y=879)3 r: ^  H: @' h* `9 M8 a
</code></pre>
9 N  [  v& ~% X+ {$ |<p>打开微信,选择女朋友的回话窗口,将鼠标放在输入框上,同样获取光标坐标,为了将焦点锁定到输入框以方便待会的输入。<br>$ O" e2 }8 C$ n9 L4 D3 f1 S
<img src="https://img-blog.csdnimg.cn/4809ee2ce93b40a0828717f811b02599.png" ></p>; y6 E4 L6 J7 m0 ?3 Y+ [
<pre><code class="language-python">print(pyautogui.position()) # 打印坐标,Point(x=174, y=751)
5 f! r* o$ K: K  h/ R; z- Rentry_position = pyautogui.position() # Point(x=174, y=751)
: F8 N3 A$ I" ^0 @! i</code></pre>* c: x8 R# a; y3 U. r4 T6 Y
<p>接下来,控制程序依次点击这两个点:</p>
9 q' _2 z# {& S/ s6 H# _1 s<pre><code class="language-python">pyautogui.click(icon_position) # 默认左键单击
0 l5 r3 c6 U) a0 u# pyautogui.click(148, 879)4 E+ ]# J3 W+ s, Z; m- U
pyautogui.click(entry_position): l: `. c2 z" r; `8 H
# pyautogui.click(174, 751)
( l2 v  o/ h% J' H9 a</code></pre>1 C# u5 a5 J3 E) \# t& E' ]
<p>打开微信并锁定焦点后,我们开始输入文本。</p>
( K( @/ w, L( h- W) D6 v+ L<p>输入文本可以有两种方式:</p>/ V, `' D) B" Y4 L5 \+ t
<ul>
8 w; f! P3 e  C<li>
, j6 d; Z& @( @' t) U<p><code>pyautogui.typewrite(['o', 'n', 'e', 'enter'])</code></p>' N3 @7 S; _* v0 {2 f) C' k+ N; Q8 q
<p>在方法中传入一个列表,里面每一元素都是单个字母或特殊按键</p>; x) K' q! L9 c8 ]' N
</li>
9 t% f1 e: b1 K4 R& d# b& \. F3 J<li>+ [! W+ ]: t8 J0 {5 q
<p><code>pyautogui.typewrite('You can type multiple letters in this way')</code></p>
+ r+ G- K4 o/ y: H<p>传入字符串,但不能同时打印字母和特殊按键。</p>
7 \( ]2 W) t5 B1 G</li>: g0 k- |$ O4 L2 X1 p
</ul>7 Y3 }, V1 z8 I  j( j
<p>这两种方式都不能直接输入中文,所以只能依靠你的输入法来输入中文了。</p>
  `6 Q% G+ D. W1 T+ _<pre><code class="language-python">pyautogui.typewrite([*list('zhengzai '), *list('jinxing '), 'shift', *list('pyautogui'), 'shift', *list('shiyan '), 'enter'], 0.1) # 第一个参数是输入文本,第二个是输入每个字符的间隔时间: G" }, k: Q& D) }  j4 {
</code></pre>! k9 d+ o* n, z; T& i; R
<p>为了使我们的操作更加 <s>人模狗样</s> 像人的操作,我么来加上移动鼠标的代码:</p>) X$ l( ]9 L! A# r6 u# j0 T& j6 G
<pre><code class="language-python">pyautogui.moveTo(icon_position, duration=2) # duration为执行时长,可选
1 F8 E3 L4 U2 B, H0 Wpyautogui.click(icon_position)/ B/ i: P  Y/ U2 U1 b* `8 L
pyautogui.moveTo(entry_position, duration=2)/ o. K" w+ f! J( }+ d
pyautogui.click(entry_position)% b9 [4 L: j* y8 u
pyautogui.typewrite([*list('zhengzai '), *list('jinxing '), 'shift', *list('pyautogui'), 'shift', *list('shiyan '), 'enter'], 0.1) # 第二个参数为按下每一个字母的间隔,可选: i, T- v5 i2 ~% p
</code></pre>
' s/ y- _$ u7 R2 U( D/ t/ @<p>看看效果:<br>
0 Y, K5 \( H+ j. D) ~2 V9 G<img src="https://img-blog.csdnimg.cn/88126f4b522c4584a3de07c4c35a808d.gif" ><br>, l  ^8 F) }8 ^. s; \2 ^+ V
当然,若是你要输入的内容实在很多,又嫌麻烦,可以通过复制粘贴来实现:</p>0 k. W3 G0 W9 d. F: @  X  ^' r
<pre><code class="language-python">import pyperclip
# D4 v2 M2 q7 l9 }; M! U, P/ b: g% d
pyperclip.copy('正在进行发中文试验,看到请忽略,更不要骂傻逼') # 复制
, i& G0 H& c8 r7 q5 u# G% h5 Ipyautogui.hotkey('ctrl', 'v') # 按下组合键的方法,ctrl+v粘贴
! u7 u5 }) N/ O& O  X# dpyautogui.press('enter') # 按下按键
% G- f0 I6 \6 I' ]$ N0 q</code></pre>
* _$ e! G: [3 y% ^. W<p><img src="https://img-blog.csdnimg.cn/d178d71e5d564893a1aee8672841c76a.gif" ><br>
7 P. h8 u' s) Z$ {# z" g8 S这样,我们便完成了自动发送微信消息的功能了。</p>
$ W4 Z; g# W* X8 Q  j# Z# d" y<h1 id="apscheduler">apscheduler</h1>
" ]2 {( j& l% ~1 K<p>APScheduler 是一个Python库,可实现延迟调度要执行Python代码的功能,可以只执行一次,也可以定期执行。可以随时添加新任务或删除旧任务。能够十分方便地进行定时任务。</p>
! B; R5 Q: {* n<pre><code class="language-python">scheduler = BlockingScheduler() # 实例化一个调度器
* t. `. k0 ]* ?  }1 J2 |scheduler.add_job(main, 'date', run_date=datetime(2021, 8, 18, 24, 00, 00)) # 添加任务
5 y0 V) x3 Q$ b+ bscheduler.start()) [2 x5 F6 f# \2 x# `, m. n
</code></pre>9 N, F( B% q! M$ I' |( T; ^# \/ U0 G
<p>add_job 方法在这里传了 3 个参数,第一个为到时间后要执行的函数,第二个为触发器的类型。这里选用的是 date 触发器,特定的时间点触发,作业任务只会执行一次。第三个参数 run_date 就是执行的时间。在这前我已经把自动发送消息的代码封装为了 main 函数,只需到时后调用即可。</p>2 o+ I$ p" ]4 }. ^
<h1 id="完整代码">完整代码</h1>2 O, j' `( I+ m1 p4 @
<pre><code class="language-python">import pyautogui& ]  H6 a8 I* l, L; \6 M0 p
import pyperclip
5 b8 y# m$ j: ?2 k: r( D! N& hfrom datetime import datetime" S) b- `9 m% x$ F1 z1 c" I
from apscheduler.schedulers.blocking import BlockingScheduler, Q" J9 g/ x2 A3 t2 t" q

) O6 j% g0 [& xdef main():& p. O. z* J) B
        pyautogui.PAUSE = 06 E% y7 D" o6 G$ _' t" W
8 r; |# S7 }( D0 C6 D2 `
        icon_position = pyautogui.Point(x=148, y=879) # 任务栏图标位置
" f0 M0 r8 i  g4 ?0 m# J: ~0 s        entry_position = pyautogui.Point(x=174, y=751) # 输入框位置  A% r2 P2 l" D, u! {. W

7 {% W( F6 f1 P2 d5 C" Z        pyautogui.moveTo(icon_position, duration=1) # duration为执行时长,可选% M2 r+ {, Z7 U4 K
        pyautogui.click(icon_position)" z3 ?4 B* u; k; x2 T% f3 Y
        pyautogui.moveTo(entry_position, duration=0.7)
4 B4 \% O( S3 m$ r* a  N0 Y        pyautogui.click(entry_position)' G4 h* U: x3 |: r
        pyperclip.copy('快去睡觉'); r4 C  }( G6 L
        pyautogui.hotkey('ctrl', 'v')
6 g% c" C4 y) h3 B2 k2 w        pyautogui.press('enter')
4 \0 K% ]. H- x$ x5 C    pyperclip.copy('笨猪')
0 q7 ~. a0 N# J8 |0 q        pyautogui.hotkey('ctrl', 'v')0 O! W' n$ {1 s; G, B
        pyautogui.press('enter')
6 i- {9 ?+ p% t6 s0 A( O+ }2 p4 ]    6 u+ k% i' |" q# i' G1 k$ G" s# R
scheduler = BlockingScheduler() # 实例化
2 I( R5 X7 X) V8 xscheduler.add_job(main, 'date', run_date=datetime(2021, 8, 18, 24, 00, 00)) # 添加任务
8 P" Z6 z- c  K! L$ mscheduler.start()
; y2 G* K; s2 |1 x6 r</code></pre>) R* U+ n$ y* w& S8 y5 D0 }& g
<p>完成啦!现在可以去睡觉了。</p># @6 [+ l5 y6 ]
<h1 id="结果">结果</h1>
: q& k" ^& p/ `: e- U) c8 B<p>第二天早上起床,我被我妈妈骂了一顿,问我为什么午夜12点的时候电脑还亮着,而且还在自己发微信!</p>
. G; Y* ?3 ^4 K<p>不过,好在女朋友没丢,我成功完成了女朋友的任务!<br>* i* |5 D5 v" L1 p, _4 m: I& d) h/ ?
<img src="https://img-blog.csdnimg.cn/111c7494bd6e4371bbd541529c48b776.gif" ></p>% Q, U; E% z) Z
<hr>
9 D# m; \3 j: G- ~! R( m<h1 id="---the-end---">-- the End --</h1>( y9 t' q  M$ @
<p>好啦,这篇文章就到这里了。以上就是我分享的全部内容,感谢阅读!</p>5 d$ o' m" Y% U2 G# V0 d. S7 n
<p>打个小广告:作者CSDN博客主页:<br>7 J" _; w1 }  G! D/ p9 r
<a  href="https://blog.csdn.net/weixin_52132159">https://blog.csdn.net/weixin_52132159</a></p>: V' O5 K3 b) _1 ~/ x2 P& N0 h0 s
* g/ d' B. f; ]& v) E% w
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-15 05:13 , Processed in 0.066754 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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