飞雪团队

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

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

[复制链接]

8087

主题

8175

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26591
发表于 2022-2-12 14:35:43 | 显示全部楼层 |阅读模式
0 X) E: q8 d- J" \
<p>事情是这样的:今天晚上,女朋友让我十二点催她睡觉。<br>
, `# G* ^6 e( `  k+ Z8 Y7 D& e) K4 i<img src="https://img-blog.csdnimg.cn/28feb6811cc142f5b0e38e81e73d5043.png" ><br>
' I8 T$ g" o7 f- s* }不过,可是我实在太困了,熬不下去…… 是吧?女朋友哪有睡觉重要?<br>
: L6 w/ R* V. I- P<img src="https://img-blog.csdnimg.cn/ddf8351a359e45218952d4d3962ff278.jpg" ><br>
* O! m) d8 \% i( V5 N但,女朋友的命令,我是不敢违抗的……<br>) T+ x" e; c  R
<img src="https://img-blog.csdnimg.cn/87fe69f100904f4782a720254ef49191.png" ><br>
) {) o4 w/ v# f/ |1 N但是睡觉也不能缺!</p>! _- g# B0 @9 ?, O1 S% z
<p>这时候我们该怎么办呢?是时候让Python登场了!</p>
% M6 ^/ y) U/ k* t5 ]& _<h1 id="python登场">Python登场</h1>
0 d1 t: J* }& J; m: R<p>这次我们来做一个自动发送微信的程序,在深夜十二点的时候给女朋友发去消息,也算是尽了一个男朋友的义务了。</p>3 W5 y" T4 h$ ~* ]! |
<h2 id="安装和导入">安装和导入</h2>
' K; }: c, x$ A: h: m9 D  ^<p>我们需要两个模块:<strong>apscheduler</strong>,<strong>pyautogui</strong></p>
) p0 b( \: u+ u3 V) G2 y7 j) @<p>快捷键 Windows+r 打开运行控制框,输入 cmd,进入命令行,输入:</p>
; y4 A7 J/ n) u6 m8 A5 K$ C2 [<pre><code class="language-p">pip install apscheduler
' I2 ^* b0 ^+ j+ w  C+ V9 w# Hpip install pyautogui
) n5 k' c: g7 s, i% I3 t: W, j7 Q</code></pre>
: H# D; w3 U. [3 F6 q" m, u<p>导入:</p>
* I  d, f9 e  i( R9 W. T<pre><code class="language-python">import pyautogui
: N) e/ p6 `2 Z" D* ofrom datetime import datetime) o& D& d5 \* N" D) a- [/ x7 u
from apscheduler.schedulers.blocking import BlockingScheduler # 阻塞当前进程的调度器
) }( j0 N* d2 F/ h9 w$ N2 _! V. i9 B# blocking类型调度器会阻塞当前进程,若你想要后台运行的调度器,可以使用以下代码:: Y% C) x3 q0 q8 c. V" X; P2 I
# from apscheduler.schedulers.background import BackgroundScheduler
9 J, C) u# K0 `</code></pre>/ c3 {/ B# `- g# ^: S7 t- p
<h1 id="pyautogui">pyautogui</h1>
% h9 `# \( q; D8 ?/ {+ J  {<p>首先我们来实现自动发送消息</p>& A' U1 g+ b% Z) T, j
<p>pyautogui 是一个非常强大的库,可以操作鼠标和键盘。我们将用它来完成自动操作电脑。</p>
  E4 _& v9 l8 l1 d! r: w<p>先来做一些基本设置:</p># L- X- t, y5 O$ Z( W" A/ x
<pre><code class="language-python">pyautogui.PAUSE = 1 # 设置每一步操作的间隔(秒),可防止操作太快, \1 w: P3 K8 U, R3 ]5 w7 E
</code></pre>
8 b4 C1 M( i0 |2 P<p>然后我们登录微信,最小化。</p>) Z. P% v, l4 B  v4 B
<p>接下来我们把鼠标放到微信的任务栏图标上,运行以下语句,获取此时光标的坐标,返回一个Point对象:</p>5 i: d/ z' x+ N3 H
<pre><code class="language-python">print(pyautogui.position()) # 打印坐标,Point(x=148, y=879)3 u) u2 ^( z; ^# H. ^+ k, \* s' o, X
icon_position = pyautogui.position() # Point(x=148, y=879)
) j( f" U/ K# J</code></pre>  j+ c4 X4 {; u0 m: m9 e
<p>打开微信,选择女朋友的回话窗口,将鼠标放在输入框上,同样获取光标坐标,为了将焦点锁定到输入框以方便待会的输入。<br>
1 }! r6 T$ b: D* g. Q* t<img src="https://img-blog.csdnimg.cn/4809ee2ce93b40a0828717f811b02599.png" ></p>. b$ Z* u3 l" [9 f" P1 T
<pre><code class="language-python">print(pyautogui.position()) # 打印坐标,Point(x=174, y=751)
* T3 ]7 P- V4 P8 P8 O7 fentry_position = pyautogui.position() # Point(x=174, y=751)
( a$ ~7 O# Z# c! J</code></pre>
$ F# S  `2 p6 {<p>接下来,控制程序依次点击这两个点:</p>
) L4 Q' X; A7 u8 {<pre><code class="language-python">pyautogui.click(icon_position) # 默认左键单击
. F7 T- C: E. H7 H, Q# pyautogui.click(148, 879)  A! j$ Z, [% k  K
pyautogui.click(entry_position)4 A# l- B3 A( p; c+ F* e$ j
# pyautogui.click(174, 751)' S9 G% @, w* C1 _9 T) r, U
</code></pre>1 B$ |, I, R- x/ ~# t; B5 t" w
<p>打开微信并锁定焦点后,我们开始输入文本。</p>* ~% |( [3 h+ _0 G5 V
<p>输入文本可以有两种方式:</p>9 t8 `) @- r: Z, N9 X' |: x1 b. `
<ul>! U0 r( U2 U% K# D" t
<li>2 `$ m  @# y5 D
<p><code>pyautogui.typewrite(['o', 'n', 'e', 'enter'])</code></p>
& ~1 v( C: x! L5 W& P2 w<p>在方法中传入一个列表,里面每一元素都是单个字母或特殊按键</p>
" b- R2 b& ^/ w1 M</li>  V& Q- F% a9 M" n/ R. m7 t
<li>) o! L9 n2 n7 [  _8 f
<p><code>pyautogui.typewrite('You can type multiple letters in this way')</code></p>) b4 A0 q6 G+ W$ u2 I7 ]
<p>传入字符串,但不能同时打印字母和特殊按键。</p>: @1 q8 i8 y( g
</li>0 G8 j7 A: \9 f7 r; Z
</ul>
# K0 o4 k' Z2 J/ e1 @. B<p>这两种方式都不能直接输入中文,所以只能依靠你的输入法来输入中文了。</p>' }# D2 ~; d% u" U. u
<pre><code class="language-python">pyautogui.typewrite([*list('zhengzai '), *list('jinxing '), 'shift', *list('pyautogui'), 'shift', *list('shiyan '), 'enter'], 0.1) # 第一个参数是输入文本,第二个是输入每个字符的间隔时间, V9 \/ r2 R! J# J
</code></pre>
: l( s3 ]% e9 J  T1 g<p>为了使我们的操作更加 <s>人模狗样</s> 像人的操作,我么来加上移动鼠标的代码:</p>4 e9 V2 L' j3 o3 A; o* Q* |. p
<pre><code class="language-python">pyautogui.moveTo(icon_position, duration=2) # duration为执行时长,可选$ Z5 F+ l7 [+ D& j
pyautogui.click(icon_position), l, U3 ?+ F, |  s6 z
pyautogui.moveTo(entry_position, duration=2)
: h' i" H' g. n6 Y9 {pyautogui.click(entry_position)
/ B  Q( w# E+ ]+ F* ^2 H6 F9 O2 W" f1 ?) ipyautogui.typewrite([*list('zhengzai '), *list('jinxing '), 'shift', *list('pyautogui'), 'shift', *list('shiyan '), 'enter'], 0.1) # 第二个参数为按下每一个字母的间隔,可选( v; f& p% F" ]$ |
</code></pre>7 `3 ]" N( w% B* V6 U) A4 P
<p>看看效果:<br>
3 J& _$ q8 Z* k<img src="https://img-blog.csdnimg.cn/88126f4b522c4584a3de07c4c35a808d.gif" ><br>
' ^6 }& V( S" `' F# w当然,若是你要输入的内容实在很多,又嫌麻烦,可以通过复制粘贴来实现:</p>; ?' e& w3 I4 G/ g3 x1 g
<pre><code class="language-python">import pyperclip
: }, `$ ]: i, m7 e0 C' ]2 X2 M) p: o0 h& f- A1 X( j! G
pyperclip.copy('正在进行发中文试验,看到请忽略,更不要骂傻逼') # 复制0 k5 D6 P  e. Q6 H# u& Q
pyautogui.hotkey('ctrl', 'v') # 按下组合键的方法,ctrl+v粘贴
; ^; o# H( _$ {$ Epyautogui.press('enter') # 按下按键! s4 Y' _, S7 g1 T
</code></pre>
3 l5 F" G( P% ^<p><img src="https://img-blog.csdnimg.cn/d178d71e5d564893a1aee8672841c76a.gif" ><br>
# t: n* X! K3 Q- J这样,我们便完成了自动发送微信消息的功能了。</p>; H' J; L$ L3 p; L
<h1 id="apscheduler">apscheduler</h1>0 b: J, I, |* h
<p>APScheduler 是一个Python库,可实现延迟调度要执行Python代码的功能,可以只执行一次,也可以定期执行。可以随时添加新任务或删除旧任务。能够十分方便地进行定时任务。</p>; X  s. [! A! \. @
<pre><code class="language-python">scheduler = BlockingScheduler() # 实例化一个调度器7 B) D; Q/ q/ v8 D9 x3 {
scheduler.add_job(main, 'date', run_date=datetime(2021, 8, 18, 24, 00, 00)) # 添加任务* a8 w5 W6 t" ?1 D  v
scheduler.start()6 a8 _  T% P  I3 W; }% k# G
</code></pre>
5 P' W5 |0 N2 g& V" h<p>add_job 方法在这里传了 3 个参数,第一个为到时间后要执行的函数,第二个为触发器的类型。这里选用的是 date 触发器,特定的时间点触发,作业任务只会执行一次。第三个参数 run_date 就是执行的时间。在这前我已经把自动发送消息的代码封装为了 main 函数,只需到时后调用即可。</p>$ T7 D2 x0 F2 h+ B
<h1 id="完整代码">完整代码</h1>7 W9 R/ u/ q/ [* C* V, [
<pre><code class="language-python">import pyautogui
, Q. O/ y) {' ]4 X) N. u* eimport pyperclip
. d. v: B# f; z+ |% {( A" e$ yfrom datetime import datetime& r1 e* V4 `- Y, f* p
from apscheduler.schedulers.blocking import BlockingScheduler7 _; a0 s5 N3 q4 A+ d) d
$ P1 d" k! u5 Q; S' S1 A/ T7 y
def main():
  }1 T% d/ Z/ }        pyautogui.PAUSE = 0% a3 ]' I- u- f! o
9 d0 O6 g7 X! V, v/ q: K9 F7 C  a! J
        icon_position = pyautogui.Point(x=148, y=879) # 任务栏图标位置1 r; g& K: v4 y8 Q6 _9 G
        entry_position = pyautogui.Point(x=174, y=751) # 输入框位置: s. {8 r! g" e: x; v7 L

& N! p  Q1 @2 `( h: R        pyautogui.moveTo(icon_position, duration=1) # duration为执行时长,可选  R( {1 l0 i' ~& t2 a
        pyautogui.click(icon_position)
" H  B2 ^/ Z4 e. z$ _7 S; j3 @        pyautogui.moveTo(entry_position, duration=0.7)+ v$ N& H. p1 y/ K
        pyautogui.click(entry_position)
0 u# N! C! x  G5 S2 D6 D        pyperclip.copy('快去睡觉')) w" Q& Y  `: ]' H& l- [3 G6 K9 o- c6 f: P
        pyautogui.hotkey('ctrl', 'v')+ N7 G2 ]9 \. q$ R2 ^, s9 q
        pyautogui.press('enter')" w, E3 s+ R9 j2 @+ s7 m7 z
    pyperclip.copy('笨猪')3 K/ e$ a! x- o; C$ Q' j
        pyautogui.hotkey('ctrl', 'v')- T+ U% H: N; E4 S1 x2 N- k9 S7 r
        pyautogui.press('enter')
/ ^  k" [. |! W- E9 X; `   
, B1 \+ Y- {$ l) w* a  k4 Y# [scheduler = BlockingScheduler() # 实例化
2 I; f8 q) s, [6 _scheduler.add_job(main, 'date', run_date=datetime(2021, 8, 18, 24, 00, 00)) # 添加任务3 ?6 r' d. p; U6 X$ v: u
scheduler.start()
: d4 x+ ^: [* J</code></pre>8 {1 r5 T7 T% [
<p>完成啦!现在可以去睡觉了。</p>9 X- @8 \& s- b3 Y+ }  \2 N
<h1 id="结果">结果</h1># n; }* r. y& L, m* w
<p>第二天早上起床,我被我妈妈骂了一顿,问我为什么午夜12点的时候电脑还亮着,而且还在自己发微信!</p># F9 D5 a3 R5 W
<p>不过,好在女朋友没丢,我成功完成了女朋友的任务!<br>3 l3 }! q  L  K- C9 G  z& _/ W0 A
<img src="https://img-blog.csdnimg.cn/111c7494bd6e4371bbd541529c48b776.gif" ></p>
5 c$ l3 @/ P& w3 x7 u' ~<hr>
$ A0 Y; z: j/ x+ @3 C- P0 F<h1 id="---the-end---">-- the End --</h1>  a0 Q2 a* Z1 z4 E4 N
<p>好啦,这篇文章就到这里了。以上就是我分享的全部内容,感谢阅读!</p>1 u% F1 @: Y3 b: J2 S) b7 d
<p>打个小广告:作者CSDN博客主页:<br>! J- E# v: i1 E+ s7 h$ }
<a  href="https://blog.csdn.net/weixin_52132159">https://blog.csdn.net/weixin_52132159</a></p>  P! c6 J( i8 l7 m6 X( u' O2 }' m; v

! W, o6 N3 z8 r
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-17 18:36 , Processed in 0.069942 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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