飞雪团队

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

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

[复制链接]

8038

主题

8126

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26444
发表于 2022-2-12 14:35:43 | 显示全部楼层 |阅读模式
. Q9 q" Z0 T2 e3 d
<p>事情是这样的:今天晚上,女朋友让我十二点催她睡觉。<br>5 q7 ^$ q+ L2 z5 u( i6 f
<img src="https://img-blog.csdnimg.cn/28feb6811cc142f5b0e38e81e73d5043.png" ><br>- c- P- a3 B6 j8 h0 d# L2 ^
不过,可是我实在太困了,熬不下去…… 是吧?女朋友哪有睡觉重要?<br>2 f& {, x: W4 g
<img src="https://img-blog.csdnimg.cn/ddf8351a359e45218952d4d3962ff278.jpg" ><br>
7 ~8 B# j. H+ V1 @' u但,女朋友的命令,我是不敢违抗的……<br>7 Z5 P2 D: g' K& D% B8 D
<img src="https://img-blog.csdnimg.cn/87fe69f100904f4782a720254ef49191.png" ><br>
4 v/ L9 {1 K7 B5 L  X6 X! C+ E8 t9 R但是睡觉也不能缺!</p>4 c, X! Y; o4 a3 D; s( w9 G
<p>这时候我们该怎么办呢?是时候让Python登场了!</p>  M8 Z3 B" I3 D
<h1 id="python登场">Python登场</h1>! P5 f# ~# j* E* O
<p>这次我们来做一个自动发送微信的程序,在深夜十二点的时候给女朋友发去消息,也算是尽了一个男朋友的义务了。</p>6 ?1 c2 L2 y$ w
<h2 id="安装和导入">安装和导入</h2>
0 N! h" D+ H; M6 [<p>我们需要两个模块:<strong>apscheduler</strong>,<strong>pyautogui</strong></p>
0 G" p  B2 W1 z$ I4 {<p>快捷键 Windows+r 打开运行控制框,输入 cmd,进入命令行,输入:</p>
0 @+ f7 a! k# t- b8 t/ x  p<pre><code class="language-p">pip install apscheduler7 f$ [9 B) @: ?; a
pip install pyautogui
  U  T6 w% a: I; f  ?# m</code></pre>
! E0 [4 a( F) d9 c<p>导入:</p>
; F6 T( }9 q$ P$ L, B* f4 `* _* a$ ^<pre><code class="language-python">import pyautogui1 P! i0 z+ t( s' v
from datetime import datetime0 y1 `) Y0 s( ^. A
from apscheduler.schedulers.blocking import BlockingScheduler # 阻塞当前进程的调度器3 f$ ~/ }$ j+ g8 |0 z3 C
# blocking类型调度器会阻塞当前进程,若你想要后台运行的调度器,可以使用以下代码:8 \2 G2 j9 b# G$ @
# from apscheduler.schedulers.background import BackgroundScheduler4 u4 T' E, z! e
</code></pre>, k: l& U+ z; \
<h1 id="pyautogui">pyautogui</h1>
* A& H3 P( U6 W5 w<p>首先我们来实现自动发送消息</p>
( v& _7 P! e7 H  v, d  c<p>pyautogui 是一个非常强大的库,可以操作鼠标和键盘。我们将用它来完成自动操作电脑。</p>. t) L1 {- y& F
<p>先来做一些基本设置:</p>
7 I5 f2 O( W! T<pre><code class="language-python">pyautogui.PAUSE = 1 # 设置每一步操作的间隔(秒),可防止操作太快
% z0 P# ^3 G' x- A; q# q; s( [</code></pre>
4 W9 _1 G% n+ k* T2 R2 C) C<p>然后我们登录微信,最小化。</p>  B% ?; d7 v3 Q* \! t1 h2 K& u
<p>接下来我们把鼠标放到微信的任务栏图标上,运行以下语句,获取此时光标的坐标,返回一个Point对象:</p>3 x2 w: X3 z0 W, w! H8 ?
<pre><code class="language-python">print(pyautogui.position()) # 打印坐标,Point(x=148, y=879)2 Z2 B7 o. w: {" Z, a
icon_position = pyautogui.position() # Point(x=148, y=879)* r0 J- o# h: x% m
</code></pre>
7 _7 h$ p; K. H  O<p>打开微信,选择女朋友的回话窗口,将鼠标放在输入框上,同样获取光标坐标,为了将焦点锁定到输入框以方便待会的输入。<br>
3 p3 P4 l* g+ l( l" J4 J( }<img src="https://img-blog.csdnimg.cn/4809ee2ce93b40a0828717f811b02599.png" ></p># M6 G' F; }: [; X* i
<pre><code class="language-python">print(pyautogui.position()) # 打印坐标,Point(x=174, y=751)' }+ X5 V. M" U
entry_position = pyautogui.position() # Point(x=174, y=751)4 \" E5 m6 i) O9 R, m" A
</code></pre>
$ P3 H7 f4 l2 Z- B% S: J' A<p>接下来,控制程序依次点击这两个点:</p>
8 V; s; Y) h7 R  B% Q1 z8 l( e<pre><code class="language-python">pyautogui.click(icon_position) # 默认左键单击" u1 ~7 Z0 @, Y3 v1 K$ ]8 F7 w" _  n
# pyautogui.click(148, 879)
" D! v9 U0 o  W  Jpyautogui.click(entry_position)% B' {. R) G- Q' O
# pyautogui.click(174, 751)8 a+ Z- X& e1 g) }" z
</code></pre>
0 z; o3 _9 i/ @7 ?, M% t<p>打开微信并锁定焦点后,我们开始输入文本。</p>
. r0 L7 o3 {2 C, Y3 ?<p>输入文本可以有两种方式:</p>
0 j- K, h: H! \: c6 X* r<ul>
! S: {" T" A! v* H/ {<li>) p  l4 B" H- o. q
<p><code>pyautogui.typewrite(['o', 'n', 'e', 'enter'])</code></p>& N  {8 c: \5 Z+ [2 i; q2 E5 _% `1 J
<p>在方法中传入一个列表,里面每一元素都是单个字母或特殊按键</p>
* l2 s+ X( o  s0 W' s1 k</li>" \- f, Z; E$ |3 z) }
<li>& [& {4 I: n: d
<p><code>pyautogui.typewrite('You can type multiple letters in this way')</code></p>( ^; o3 f* V- ~, P  v
<p>传入字符串,但不能同时打印字母和特殊按键。</p>
" U& W2 J) K; h7 A0 d</li>7 j3 H( I3 K+ i3 `# A- s# r7 e1 m# c& O
</ul>5 C  N, ~: a$ ^9 E: h$ p
<p>这两种方式都不能直接输入中文,所以只能依靠你的输入法来输入中文了。</p>
0 n+ I. `5 C9 @4 F& A<pre><code class="language-python">pyautogui.typewrite([*list('zhengzai '), *list('jinxing '), 'shift', *list('pyautogui'), 'shift', *list('shiyan '), 'enter'], 0.1) # 第一个参数是输入文本,第二个是输入每个字符的间隔时间% v  T& K2 J+ r8 ]5 B/ w/ y
</code></pre>
. Y+ o$ g: g, N- g9 ^& _  S3 D- B<p>为了使我们的操作更加 <s>人模狗样</s> 像人的操作,我么来加上移动鼠标的代码:</p>
9 S9 y7 D9 K" s+ Z2 G<pre><code class="language-python">pyautogui.moveTo(icon_position, duration=2) # duration为执行时长,可选; V+ K- p3 \% g% V
pyautogui.click(icon_position)
5 u6 y8 J6 T$ w; l3 ~+ epyautogui.moveTo(entry_position, duration=2)
6 f8 Y9 k( H0 p: X. Tpyautogui.click(entry_position)0 m5 U5 X! g& y; A! z
pyautogui.typewrite([*list('zhengzai '), *list('jinxing '), 'shift', *list('pyautogui'), 'shift', *list('shiyan '), 'enter'], 0.1) # 第二个参数为按下每一个字母的间隔,可选' Q; L# d: D# Z  V
</code></pre>
0 O. x0 m' }( p, t$ x/ h# q3 b<p>看看效果:<br>
& i( F* D6 W; Y, q<img src="https://img-blog.csdnimg.cn/88126f4b522c4584a3de07c4c35a808d.gif" ><br>1 A8 W& M8 `1 b8 G2 V4 V
当然,若是你要输入的内容实在很多,又嫌麻烦,可以通过复制粘贴来实现:</p>- Z! D  B  m8 ^  n6 M
<pre><code class="language-python">import pyperclip
2 v$ y' F- C' `" w* W2 v2 |; u# ~( G8 J+ u
pyperclip.copy('正在进行发中文试验,看到请忽略,更不要骂傻逼') # 复制0 y( D6 u* V/ |( r, m
pyautogui.hotkey('ctrl', 'v') # 按下组合键的方法,ctrl+v粘贴
% Z1 P7 ~  ?7 q$ I# f8 Lpyautogui.press('enter') # 按下按键* t, X. w: S, a  U& x- r. t
</code></pre>; O6 z" A, H; O
<p><img src="https://img-blog.csdnimg.cn/d178d71e5d564893a1aee8672841c76a.gif" ><br>
' C* H4 a: b5 }9 I7 w: \6 G5 Z这样,我们便完成了自动发送微信消息的功能了。</p>
$ Q5 M0 C6 H6 q0 ]<h1 id="apscheduler">apscheduler</h1>
/ e$ [6 W6 @6 E$ v<p>APScheduler 是一个Python库,可实现延迟调度要执行Python代码的功能,可以只执行一次,也可以定期执行。可以随时添加新任务或删除旧任务。能够十分方便地进行定时任务。</p>: ^- B2 ?, a  k
<pre><code class="language-python">scheduler = BlockingScheduler() # 实例化一个调度器
0 E; {/ ^6 A# m( {8 J1 K$ H9 Jscheduler.add_job(main, 'date', run_date=datetime(2021, 8, 18, 24, 00, 00)) # 添加任务7 P! V5 w* p* e. P/ e, a, H
scheduler.start()
& W) O8 L5 h+ B  ~</code></pre>. l- N4 ]1 t# q" A0 n  c$ E
<p>add_job 方法在这里传了 3 个参数,第一个为到时间后要执行的函数,第二个为触发器的类型。这里选用的是 date 触发器,特定的时间点触发,作业任务只会执行一次。第三个参数 run_date 就是执行的时间。在这前我已经把自动发送消息的代码封装为了 main 函数,只需到时后调用即可。</p>
/ X. o& I( G# Z<h1 id="完整代码">完整代码</h1>. ?1 I" n2 y+ q" |6 a9 B
<pre><code class="language-python">import pyautogui
9 C0 }5 l7 Y* k1 _4 pimport pyperclip! ?/ p0 ?3 W& B6 t3 W$ F
from datetime import datetime
- w* K* o9 h7 P2 d8 ^from apscheduler.schedulers.blocking import BlockingScheduler( C, `  `6 [- p

5 h6 g1 \3 }- S. E# fdef main():
8 H9 i5 z: {) N2 T. n; G/ ]        pyautogui.PAUSE = 0% K# ^$ L* v) b6 Q2 q7 H1 K

# g( X" Z" e3 ~4 X        icon_position = pyautogui.Point(x=148, y=879) # 任务栏图标位置
9 b* G: s# Y8 t; y1 t  t) P7 P: o* k, N! g        entry_position = pyautogui.Point(x=174, y=751) # 输入框位置/ o4 H5 I- r3 ^: f- x6 ^) w- F+ B' H) f' P

2 s% u* r' S& D" U* X! _0 O        pyautogui.moveTo(icon_position, duration=1) # duration为执行时长,可选$ |! j4 ]; q& S5 P4 J5 }
        pyautogui.click(icon_position)
  g2 M% P4 s" A        pyautogui.moveTo(entry_position, duration=0.7)
5 v1 n5 W5 F- e! _' S" ?        pyautogui.click(entry_position)
) o1 h& K) t9 \" p. ~        pyperclip.copy('快去睡觉')7 b0 K1 D# @/ X: m; v) |3 C) {3 A
        pyautogui.hotkey('ctrl', 'v')
# @( C7 }3 K$ n        pyautogui.press('enter')
- g  Z3 o3 ?$ H6 s    pyperclip.copy('笨猪')8 V( l; u. ~- J! m1 E! L% r
        pyautogui.hotkey('ctrl', 'v')4 M! |3 L7 ^! t6 l. K6 o3 n
        pyautogui.press('enter')+ m. }# G* m  S& A% ?
   
5 _8 v  D' D8 h! t% Z) C, l4 `scheduler = BlockingScheduler() # 实例化0 r& k" t1 S2 a$ ]2 R, C" V
scheduler.add_job(main, 'date', run_date=datetime(2021, 8, 18, 24, 00, 00)) # 添加任务! ?2 O$ k6 u: ?* t! w* a
scheduler.start()9 E& K* \5 H) R
</code></pre>3 I; m" O" P' e5 [2 z; J) l- [
<p>完成啦!现在可以去睡觉了。</p>
  G- L5 L: W+ [<h1 id="结果">结果</h1>; v) f" r- @- G( Z; n/ \+ g
<p>第二天早上起床,我被我妈妈骂了一顿,问我为什么午夜12点的时候电脑还亮着,而且还在自己发微信!</p>" P' n# m. f& A7 W
<p>不过,好在女朋友没丢,我成功完成了女朋友的任务!<br>
8 x: K, w1 w9 J& ^2 x<img src="https://img-blog.csdnimg.cn/111c7494bd6e4371bbd541529c48b776.gif" ></p>2 i4 ~/ `1 n( g1 E6 ?  K
<hr>6 }% f3 ]+ E5 T9 ]1 ~! k9 E) i
<h1 id="---the-end---">-- the End --</h1>/ H! E6 I! M2 O( T
<p>好啦,这篇文章就到这里了。以上就是我分享的全部内容,感谢阅读!</p># ]! [8 O% S& l& y& n0 \0 z1 R" l
<p>打个小广告:作者CSDN博客主页:<br>
6 X- J% a8 B3 ]! e<a  href="https://blog.csdn.net/weixin_52132159">https://blog.csdn.net/weixin_52132159</a></p>
5 c( E1 J- b4 f$ |# a0 D4 ~3 Z! y9 x3 U: ^' [* C
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-5 23:03 , Processed in 0.067029 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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