飞雪团队

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

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

[复制链接]

8126

主题

8214

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26708
发表于 2022-2-12 14:35:43 | 显示全部楼层 |阅读模式
1 E$ T6 o" ?' P8 M$ i3 V6 t
<p>事情是这样的:今天晚上,女朋友让我十二点催她睡觉。<br>8 F& D# X& x- l/ S- N2 [  e) |; y+ [
<img src="https://img-blog.csdnimg.cn/28feb6811cc142f5b0e38e81e73d5043.png" ><br>
3 b/ q7 j. t# p! L2 }不过,可是我实在太困了,熬不下去…… 是吧?女朋友哪有睡觉重要?<br>: A6 |& z3 j) W
<img src="https://img-blog.csdnimg.cn/ddf8351a359e45218952d4d3962ff278.jpg" ><br>
" A" P! f0 U2 y4 H* F$ ~. N但,女朋友的命令,我是不敢违抗的……<br>" ?9 W, Z8 }+ n' U8 ~
<img src="https://img-blog.csdnimg.cn/87fe69f100904f4782a720254ef49191.png" ><br>
0 ^) P; K* |+ p7 w' @1 `3 n但是睡觉也不能缺!</p>
4 o" [: g1 v- E& z. J4 e<p>这时候我们该怎么办呢?是时候让Python登场了!</p>1 {% [! ?3 I2 I. {3 g+ q& Z
<h1 id="python登场">Python登场</h1>& p! A  F. x! O6 G1 E9 H
<p>这次我们来做一个自动发送微信的程序,在深夜十二点的时候给女朋友发去消息,也算是尽了一个男朋友的义务了。</p>
( b4 D1 w' ?  _  i1 O  Z) e<h2 id="安装和导入">安装和导入</h2>3 |! C3 ^, C9 }$ |  ?: V- I0 d
<p>我们需要两个模块:<strong>apscheduler</strong>,<strong>pyautogui</strong></p>0 w: l) Z5 D+ h! A$ v
<p>快捷键 Windows+r 打开运行控制框,输入 cmd,进入命令行,输入:</p>
- }" B: w3 u5 @1 a<pre><code class="language-p">pip install apscheduler
0 O8 V/ Z8 M+ y) ]) npip install pyautogui
1 g/ C2 d+ l# d- A  `</code></pre>
& j$ Y/ U& ?# S0 \7 Z  p- E5 ^<p>导入:</p>
) M' M- D3 f0 m) U" I* S( C* R* {0 S<pre><code class="language-python">import pyautogui  z6 M8 @" b$ }5 U; c
from datetime import datetime
' W* M) [* a: {& m9 Xfrom apscheduler.schedulers.blocking import BlockingScheduler # 阻塞当前进程的调度器7 s& W3 S$ H6 e2 k: h
# blocking类型调度器会阻塞当前进程,若你想要后台运行的调度器,可以使用以下代码:
. y  i' j" f1 h4 W8 R# from apscheduler.schedulers.background import BackgroundScheduler) e" i: R0 `$ M/ p: z$ w) U: I
</code></pre>2 `6 A6 X- R; F2 x
<h1 id="pyautogui">pyautogui</h1>
8 g. U$ i2 V2 E& i<p>首先我们来实现自动发送消息</p>; `7 i) C. _3 D" t) H  C. D
<p>pyautogui 是一个非常强大的库,可以操作鼠标和键盘。我们将用它来完成自动操作电脑。</p>
6 U, h8 z: @! v* c6 L: }. @<p>先来做一些基本设置:</p>
2 a  E/ g, ~8 c6 h<pre><code class="language-python">pyautogui.PAUSE = 1 # 设置每一步操作的间隔(秒),可防止操作太快& s+ Q6 C0 `" n6 P; A) r% c& Y: P
</code></pre>8 e' {2 l8 l% j8 D6 w" w
<p>然后我们登录微信,最小化。</p>1 N% s  G- X1 D1 |5 l1 L
<p>接下来我们把鼠标放到微信的任务栏图标上,运行以下语句,获取此时光标的坐标,返回一个Point对象:</p>" k4 h/ i* n) r! P1 i; I
<pre><code class="language-python">print(pyautogui.position()) # 打印坐标,Point(x=148, y=879): H) b: n9 Z# l' M" @0 D
icon_position = pyautogui.position() # Point(x=148, y=879)
. a; A: u$ c0 Y3 D</code></pre>
- U! Z$ S8 A$ H5 I<p>打开微信,选择女朋友的回话窗口,将鼠标放在输入框上,同样获取光标坐标,为了将焦点锁定到输入框以方便待会的输入。<br>7 b, |( o5 A& F% W9 ~" A/ d/ k
<img src="https://img-blog.csdnimg.cn/4809ee2ce93b40a0828717f811b02599.png" ></p>
! b2 i: i2 V1 z" l<pre><code class="language-python">print(pyautogui.position()) # 打印坐标,Point(x=174, y=751)
) [4 E$ y: |# E, E1 Y- o1 Gentry_position = pyautogui.position() # Point(x=174, y=751)  ?; V8 y& C  i$ C% F
</code></pre>! w5 a- [9 i  m
<p>接下来,控制程序依次点击这两个点:</p>
( Q. f4 U( C8 }<pre><code class="language-python">pyautogui.click(icon_position) # 默认左键单击. Y4 o3 T) h$ v+ i8 d# E
# pyautogui.click(148, 879)4 O6 {. }) s. \0 n4 h1 a
pyautogui.click(entry_position)
* ^. U. L5 `' o' n4 e7 ^6 y9 d$ f  N# pyautogui.click(174, 751)/ P* P2 c1 W) e
</code></pre>; P  K5 v; {; i) x: Y) o4 I
<p>打开微信并锁定焦点后,我们开始输入文本。</p>
, c; U: K: @4 l! K<p>输入文本可以有两种方式:</p>
+ o' F: J6 |) n- }5 _6 e2 G' h3 S<ul>
4 }) n+ ]4 _% z+ Q6 ?<li>
" r% I" l2 T: B$ O7 K% @<p><code>pyautogui.typewrite(['o', 'n', 'e', 'enter'])</code></p>: M- ~% ?' g( Q7 `9 I
<p>在方法中传入一个列表,里面每一元素都是单个字母或特殊按键</p>5 B% W! m( B, x" ~+ s/ y' I
</li>9 M  ?" Y/ N- ]; g/ `& \2 r. L) P9 K
<li>/ R9 x7 I3 y8 }. F- @! \8 {  M
<p><code>pyautogui.typewrite('You can type multiple letters in this way')</code></p>1 y; Y. j2 q( j2 m
<p>传入字符串,但不能同时打印字母和特殊按键。</p>: E: {+ e" ^, o) f8 E! r
</li>
9 p7 m) e& i0 K9 r3 w</ul>
4 h. C. t3 g6 W' A<p>这两种方式都不能直接输入中文,所以只能依靠你的输入法来输入中文了。</p>
4 G6 f1 Z4 ?/ C<pre><code class="language-python">pyautogui.typewrite([*list('zhengzai '), *list('jinxing '), 'shift', *list('pyautogui'), 'shift', *list('shiyan '), 'enter'], 0.1) # 第一个参数是输入文本,第二个是输入每个字符的间隔时间
! v6 k7 @( E- u3 y( a: }5 F* K</code></pre>1 q! s' N5 c0 X  R0 D, C" J9 U, q
<p>为了使我们的操作更加 <s>人模狗样</s> 像人的操作,我么来加上移动鼠标的代码:</p>$ c# d3 X, h; q( @) F
<pre><code class="language-python">pyautogui.moveTo(icon_position, duration=2) # duration为执行时长,可选2 d3 V! Z8 B5 |' Z
pyautogui.click(icon_position)
/ ]% v( u% ]: d$ O# U$ kpyautogui.moveTo(entry_position, duration=2), S8 C1 }0 [  p! Q% T+ f# e; }
pyautogui.click(entry_position)
/ p; y2 _. ?7 A% qpyautogui.typewrite([*list('zhengzai '), *list('jinxing '), 'shift', *list('pyautogui'), 'shift', *list('shiyan '), 'enter'], 0.1) # 第二个参数为按下每一个字母的间隔,可选
3 Y0 |- k% l& U9 J+ |5 E</code></pre>
1 e* r# [6 Q, A8 O/ S: B<p>看看效果:<br>1 Y' F: D/ h* {" R
<img src="https://img-blog.csdnimg.cn/88126f4b522c4584a3de07c4c35a808d.gif" ><br>, z3 r7 q% |. \- n, T% r
当然,若是你要输入的内容实在很多,又嫌麻烦,可以通过复制粘贴来实现:</p>
& |% D* U7 j" {$ U/ j4 n<pre><code class="language-python">import pyperclip/ S' p+ _. w/ }# B8 C1 U
, A" `6 W% u% U" |
pyperclip.copy('正在进行发中文试验,看到请忽略,更不要骂傻逼') # 复制! Q1 @* K- C* Y+ u- ^
pyautogui.hotkey('ctrl', 'v') # 按下组合键的方法,ctrl+v粘贴% v& r, A2 Y  T# v% {0 h3 V# y
pyautogui.press('enter') # 按下按键2 `( t: H# F1 v1 X+ U
</code></pre>
" \, ~9 U2 ^1 ]. z<p><img src="https://img-blog.csdnimg.cn/d178d71e5d564893a1aee8672841c76a.gif" ><br>6 \  P1 i8 ^( ~
这样,我们便完成了自动发送微信消息的功能了。</p>
3 K5 o" m- P+ u0 f2 O<h1 id="apscheduler">apscheduler</h1>
- m0 z1 A: h  g" d! |<p>APScheduler 是一个Python库,可实现延迟调度要执行Python代码的功能,可以只执行一次,也可以定期执行。可以随时添加新任务或删除旧任务。能够十分方便地进行定时任务。</p>
" E. J! F2 O  d" x<pre><code class="language-python">scheduler = BlockingScheduler() # 实例化一个调度器
( \$ F( z8 k; [3 Z+ oscheduler.add_job(main, 'date', run_date=datetime(2021, 8, 18, 24, 00, 00)) # 添加任务  \" ]( c" F) o5 R
scheduler.start()1 t1 {. r( G: G+ d6 A
</code></pre>
& F# u! p6 Y( s" L% c6 O- a! o) a9 }<p>add_job 方法在这里传了 3 个参数,第一个为到时间后要执行的函数,第二个为触发器的类型。这里选用的是 date 触发器,特定的时间点触发,作业任务只会执行一次。第三个参数 run_date 就是执行的时间。在这前我已经把自动发送消息的代码封装为了 main 函数,只需到时后调用即可。</p>
$ [$ V. Q4 Y' C$ x- w% H1 I<h1 id="完整代码">完整代码</h1>3 I; Y& ]5 c7 q$ d9 G
<pre><code class="language-python">import pyautogui' A. Q7 V- ~  `. G2 K5 j+ W
import pyperclip; u" O- f5 |3 r, d3 \
from datetime import datetime
. Y$ l& ]  u4 g# N! k2 U0 {3 Ffrom apscheduler.schedulers.blocking import BlockingScheduler- @$ X/ @9 A2 ?

* C2 E: _, W( G# r. Y& vdef main():
) s8 A! m) T! b% Y        pyautogui.PAUSE = 07 H3 c7 ^; r/ X5 O1 O' X  D8 ?
' k9 X& Y& {5 A8 ?4 @
        icon_position = pyautogui.Point(x=148, y=879) # 任务栏图标位置+ x6 }* Y- D1 M  k9 o2 V: ]
        entry_position = pyautogui.Point(x=174, y=751) # 输入框位置: k7 U+ B- j! P6 u

) y/ }$ p8 o/ E+ D        pyautogui.moveTo(icon_position, duration=1) # duration为执行时长,可选5 D" h2 Z: q/ m6 g7 F; h8 x/ [* Y
        pyautogui.click(icon_position)
  ^2 n5 H5 F9 q        pyautogui.moveTo(entry_position, duration=0.7)
; e& _* e. w: @5 U        pyautogui.click(entry_position)
# o0 O$ ^/ w' _- ~        pyperclip.copy('快去睡觉')$ E9 z# G+ L' k, e4 s, @
        pyautogui.hotkey('ctrl', 'v')# P# [, f2 S! I, V. h) d
        pyautogui.press('enter')2 o) m( j/ j! F7 A# c5 h
    pyperclip.copy('笨猪')
+ X2 V" H2 E8 j( e        pyautogui.hotkey('ctrl', 'v')
4 y2 s$ N: P9 v- {5 U        pyautogui.press('enter')5 P& [6 ?9 \% U; K6 |9 s1 i
    5 O' F- z9 i" ]# H0 ^
scheduler = BlockingScheduler() # 实例化6 D1 N1 R, D4 P7 S
scheduler.add_job(main, 'date', run_date=datetime(2021, 8, 18, 24, 00, 00)) # 添加任务. p2 t: j% \' Z
scheduler.start()2 h+ l) h4 G4 e+ W: f% h% _
</code></pre>
1 ]" {; H' X; ?# Q" h; M  ~<p>完成啦!现在可以去睡觉了。</p>
* I$ r+ f* j, U5 O9 N* o<h1 id="结果">结果</h1>& e' k4 y/ R, j' b. y
<p>第二天早上起床,我被我妈妈骂了一顿,问我为什么午夜12点的时候电脑还亮着,而且还在自己发微信!</p>
# c6 I1 {$ \, l, Q6 Z- W; B<p>不过,好在女朋友没丢,我成功完成了女朋友的任务!<br>
! l* h6 o: o( G: b8 }! {<img src="https://img-blog.csdnimg.cn/111c7494bd6e4371bbd541529c48b776.gif" ></p>  A7 k, h5 g. [- }
<hr>
6 q5 M; E) ~/ y2 ~; Q<h1 id="---the-end---">-- the End --</h1>
2 W3 _7 w/ w- H  w3 o<p>好啦,这篇文章就到这里了。以上就是我分享的全部内容,感谢阅读!</p>
( I) z' a0 c$ a! m2 ]<p>打个小广告:作者CSDN博客主页:<br>
5 |" X6 }4 h0 T) d! j<a  href="https://blog.csdn.net/weixin_52132159">https://blog.csdn.net/weixin_52132159</a></p>
3 e. S9 z. U+ }8 \. y7 T1 }
8 G8 u8 r8 g$ a
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-26 00:54 , Processed in 0.067308 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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