飞雪团队

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

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

[复制链接]

7992

主题

8080

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26306
发表于 2022-2-12 14:35:43 | 显示全部楼层 |阅读模式
+ ^% T' R! _  W7 A' e6 r5 u- t9 O" N
<p>事情是这样的:今天晚上,女朋友让我十二点催她睡觉。<br>8 o; i: U0 @  E) w& R5 _4 E* W
<img src="https://img-blog.csdnimg.cn/28feb6811cc142f5b0e38e81e73d5043.png" ><br>
5 g& ]3 a" K7 r- e6 x2 z不过,可是我实在太困了,熬不下去…… 是吧?女朋友哪有睡觉重要?<br>
, M2 F8 a& o, J2 U1 H1 A/ C<img src="https://img-blog.csdnimg.cn/ddf8351a359e45218952d4d3962ff278.jpg" ><br>
3 H( D' z7 r# }2 d但,女朋友的命令,我是不敢违抗的……<br>
$ ~+ M! G- {) x" U# n$ @<img src="https://img-blog.csdnimg.cn/87fe69f100904f4782a720254ef49191.png" ><br>
6 `* g7 B5 I& x: I, V- c但是睡觉也不能缺!</p>
' ]5 L" p, _+ U) |4 o<p>这时候我们该怎么办呢?是时候让Python登场了!</p>* I3 N- m$ G# i+ y- G. l
<h1 id="python登场">Python登场</h1>8 u8 v: |4 ^2 }7 I" t; F
<p>这次我们来做一个自动发送微信的程序,在深夜十二点的时候给女朋友发去消息,也算是尽了一个男朋友的义务了。</p>
# d. B0 R6 q3 X<h2 id="安装和导入">安装和导入</h2>
9 Q9 {: Q, C1 K, b- `, m) w0 j<p>我们需要两个模块:<strong>apscheduler</strong>,<strong>pyautogui</strong></p>
  M' a: P& e) Y$ |<p>快捷键 Windows+r 打开运行控制框,输入 cmd,进入命令行,输入:</p>
# O6 v0 D- J- ^<pre><code class="language-p">pip install apscheduler; E0 [. ^7 n9 x# \/ P7 O
pip install pyautogui+ E4 {4 D! ~! i, V
</code></pre>6 e- u/ x$ i) @2 D; B
<p>导入:</p># Q! l8 e8 n* F' B* w( x/ v) B
<pre><code class="language-python">import pyautogui9 Y& I8 S) h/ `% n
from datetime import datetime
$ J8 h# V* X' ?- s, Vfrom apscheduler.schedulers.blocking import BlockingScheduler # 阻塞当前进程的调度器
8 F. N6 h# q* K0 @: g% [$ T# blocking类型调度器会阻塞当前进程,若你想要后台运行的调度器,可以使用以下代码:
* [4 x0 L0 f/ t; T/ {! z# from apscheduler.schedulers.background import BackgroundScheduler- o( x, X+ L0 N# T% h# k1 }7 h
</code></pre>
  _- F' g0 z, @9 P5 j<h1 id="pyautogui">pyautogui</h1>
; Y  ?2 z! {) z% D, \# c# g8 k<p>首先我们来实现自动发送消息</p>+ _# p+ {$ c, R, j/ `# |
<p>pyautogui 是一个非常强大的库,可以操作鼠标和键盘。我们将用它来完成自动操作电脑。</p>
! ^+ o4 j2 D& D2 `6 H  P0 [' H<p>先来做一些基本设置:</p>: e! `. N. X& Y  l- p* J: T
<pre><code class="language-python">pyautogui.PAUSE = 1 # 设置每一步操作的间隔(秒),可防止操作太快
/ B5 ~; J, {* u1 h</code></pre>
( B, d8 K. R5 B$ e<p>然后我们登录微信,最小化。</p>  `/ h+ W; Q3 H$ h! P
<p>接下来我们把鼠标放到微信的任务栏图标上,运行以下语句,获取此时光标的坐标,返回一个Point对象:</p>" r" C2 v6 S  j
<pre><code class="language-python">print(pyautogui.position()) # 打印坐标,Point(x=148, y=879)
5 c' N7 M; g, o7 Gicon_position = pyautogui.position() # Point(x=148, y=879)
. K# i+ k% f% C  e4 h) f</code></pre>  }5 @' [3 r) V: L
<p>打开微信,选择女朋友的回话窗口,将鼠标放在输入框上,同样获取光标坐标,为了将焦点锁定到输入框以方便待会的输入。<br>
6 I+ a/ p9 v7 }2 e/ p- H$ }8 p4 k<img src="https://img-blog.csdnimg.cn/4809ee2ce93b40a0828717f811b02599.png" ></p>
5 ~7 v! q2 l7 W# F  N* `6 O# z! ?) L<pre><code class="language-python">print(pyautogui.position()) # 打印坐标,Point(x=174, y=751): E6 m, k( n$ z8 X8 V. ~5 y
entry_position = pyautogui.position() # Point(x=174, y=751)& D9 o/ l# K0 t
</code></pre>0 W7 E* C6 K& Z
<p>接下来,控制程序依次点击这两个点:</p>. l5 K5 p& E5 p3 b
<pre><code class="language-python">pyautogui.click(icon_position) # 默认左键单击
4 X' a3 q( d7 U8 U1 g: T# pyautogui.click(148, 879)
# ~2 z; m. D; k( L7 m2 n9 `( Y3 Wpyautogui.click(entry_position)
7 D: `( E! o. S0 b& M; j# pyautogui.click(174, 751)
5 W5 H4 p9 {# G0 D* S</code></pre>, c" K( d( J7 `) E' e& H
<p>打开微信并锁定焦点后,我们开始输入文本。</p>
; s0 W+ o  j2 g& b$ k- V. J<p>输入文本可以有两种方式:</p>+ j7 q, g+ g7 P# w+ {4 r
<ul>: B3 Y  a, [; c
<li>' e3 h- U, x) s. Z8 b" v
<p><code>pyautogui.typewrite(['o', 'n', 'e', 'enter'])</code></p>" Z/ P7 {* S* V3 k$ D. A6 U
<p>在方法中传入一个列表,里面每一元素都是单个字母或特殊按键</p>
! Z! j& o8 _( k; M5 \</li>
* w8 W0 B, L8 [$ E# Q<li>
$ ~% K% \7 V2 x: N6 ~+ m/ _: u<p><code>pyautogui.typewrite('You can type multiple letters in this way')</code></p>( m3 f3 {+ u* ^
<p>传入字符串,但不能同时打印字母和特殊按键。</p>
* J' P. B. ]' `+ n& k5 F( B</li>
1 u( ]3 o* s, O! z! B</ul>% Q! L4 g$ w5 e* U7 c9 ]
<p>这两种方式都不能直接输入中文,所以只能依靠你的输入法来输入中文了。</p>( Z" O' ~% X6 N0 D* ?7 d4 Z
<pre><code class="language-python">pyautogui.typewrite([*list('zhengzai '), *list('jinxing '), 'shift', *list('pyautogui'), 'shift', *list('shiyan '), 'enter'], 0.1) # 第一个参数是输入文本,第二个是输入每个字符的间隔时间
4 B" ~: Z% {* @1 L</code></pre>
8 _$ h, _6 c7 n$ y4 P9 ?<p>为了使我们的操作更加 <s>人模狗样</s> 像人的操作,我么来加上移动鼠标的代码:</p>6 \7 T: J' \( Z7 A1 N
<pre><code class="language-python">pyautogui.moveTo(icon_position, duration=2) # duration为执行时长,可选2 {, a; k. z& \! |2 D" g2 M2 q
pyautogui.click(icon_position)
( G& R! j4 q7 r1 Q. Gpyautogui.moveTo(entry_position, duration=2)) q- t3 ~2 Z) ~6 C
pyautogui.click(entry_position)( X0 O: W# W) T" H' S5 a5 \* S
pyautogui.typewrite([*list('zhengzai '), *list('jinxing '), 'shift', *list('pyautogui'), 'shift', *list('shiyan '), 'enter'], 0.1) # 第二个参数为按下每一个字母的间隔,可选; U) T- h- f+ E  h& Z- [
</code></pre>
3 M0 o5 Z: `4 v( {7 z2 @<p>看看效果:<br>2 A& Q9 n( V5 m" e& V
<img src="https://img-blog.csdnimg.cn/88126f4b522c4584a3de07c4c35a808d.gif" ><br>5 p; C( o! O3 Z5 I- n7 E5 @/ A
当然,若是你要输入的内容实在很多,又嫌麻烦,可以通过复制粘贴来实现:</p>
! x9 x9 i7 w: h  q<pre><code class="language-python">import pyperclip' O) Q1 ?) y3 U) b

+ T3 P6 \% g. |' R8 v& ?pyperclip.copy('正在进行发中文试验,看到请忽略,更不要骂傻逼') # 复制- f0 |1 e; ^4 A# p( D  L
pyautogui.hotkey('ctrl', 'v') # 按下组合键的方法,ctrl+v粘贴
! h6 v  V# ?* ], e+ Xpyautogui.press('enter') # 按下按键. m- t) |1 }+ o  X
</code></pre>8 d2 [9 m. Z% Y, f  j2 L
<p><img src="https://img-blog.csdnimg.cn/d178d71e5d564893a1aee8672841c76a.gif" ><br>
0 \. Y' B5 c8 r. w1 s% G! X这样,我们便完成了自动发送微信消息的功能了。</p>
5 E) Q& T8 A* i<h1 id="apscheduler">apscheduler</h1>; i5 W9 V' f4 t0 \
<p>APScheduler 是一个Python库,可实现延迟调度要执行Python代码的功能,可以只执行一次,也可以定期执行。可以随时添加新任务或删除旧任务。能够十分方便地进行定时任务。</p>
4 X. T8 Q, P- H" e<pre><code class="language-python">scheduler = BlockingScheduler() # 实例化一个调度器
0 Q$ r* R! ^# }1 d; l( Uscheduler.add_job(main, 'date', run_date=datetime(2021, 8, 18, 24, 00, 00)) # 添加任务
6 z# T. ^9 N2 D$ ~% R% \5 c( u1 o+ ~scheduler.start()
( k; n* }' ~4 l6 F! j</code></pre>" C# U) F) X5 j2 Y1 ]
<p>add_job 方法在这里传了 3 个参数,第一个为到时间后要执行的函数,第二个为触发器的类型。这里选用的是 date 触发器,特定的时间点触发,作业任务只会执行一次。第三个参数 run_date 就是执行的时间。在这前我已经把自动发送消息的代码封装为了 main 函数,只需到时后调用即可。</p>4 P4 _  y' G( e7 P2 A  V
<h1 id="完整代码">完整代码</h1>5 n2 f/ }2 G/ @0 s+ C
<pre><code class="language-python">import pyautogui
2 Z5 y/ t0 b- Y: iimport pyperclip  `1 T2 y. _/ Z6 R
from datetime import datetime
' {$ G5 E( o3 c; l, ?4 T) U2 }from apscheduler.schedulers.blocking import BlockingScheduler
  l$ L; |5 z4 ]+ t7 u  ]5 b3 N  k8 x) j: ?+ w& E
def main():
2 a9 @$ ?) M  q# E$ [0 f0 S! @        pyautogui.PAUSE = 0
. ^* A) g# g/ Y; h! A" m8 G* V& N
' t/ @/ D: a6 j3 V        icon_position = pyautogui.Point(x=148, y=879) # 任务栏图标位置
" _0 E7 p0 `4 ?) ^  i, M$ D7 V        entry_position = pyautogui.Point(x=174, y=751) # 输入框位置1 Q8 z, A+ v+ Y# S: e$ {

3 t7 }' R5 F: ~" R) `. t        pyautogui.moveTo(icon_position, duration=1) # duration为执行时长,可选- ^5 V) D" Z2 [" H: d# I' L8 g
        pyautogui.click(icon_position)8 e3 G' [, `1 d8 y
        pyautogui.moveTo(entry_position, duration=0.7)
, S, U- D+ X' |4 X        pyautogui.click(entry_position)
' n# B: S: i/ L9 u0 F        pyperclip.copy('快去睡觉')$ u3 x  Q4 s8 H) `" `/ |
        pyautogui.hotkey('ctrl', 'v')9 |+ Z( n+ k4 O; I. V- c9 ~* k
        pyautogui.press('enter')) T$ x$ F2 j& G& a. ^
    pyperclip.copy('笨猪')
& M5 Z$ K& T$ p" Q" _& a        pyautogui.hotkey('ctrl', 'v')
1 r  A  t  k4 |3 V7 E( W        pyautogui.press('enter')
3 N' U) J0 C% `7 |; a    $ v; u+ ]3 t7 Q! I/ f
scheduler = BlockingScheduler() # 实例化
" x- e. Z+ S4 a9 X% @scheduler.add_job(main, 'date', run_date=datetime(2021, 8, 18, 24, 00, 00)) # 添加任务8 H  |$ z/ ]/ ?( |. ^1 D
scheduler.start(), Q/ j) n9 ?/ y1 u2 r: ?; y3 J
</code></pre>
% c5 P! s* a, G! b. g<p>完成啦!现在可以去睡觉了。</p>$ J, a+ @( l% g1 l
<h1 id="结果">结果</h1>
9 L* N* ]- z! b7 K- E3 |  ^<p>第二天早上起床,我被我妈妈骂了一顿,问我为什么午夜12点的时候电脑还亮着,而且还在自己发微信!</p>: r- a: o: n: s$ `4 E/ U! Q
<p>不过,好在女朋友没丢,我成功完成了女朋友的任务!<br>! ?# f* q# z' T4 s4 j' P
<img src="https://img-blog.csdnimg.cn/111c7494bd6e4371bbd541529c48b776.gif" ></p>
. T+ d) ?0 E; g" {7 ?<hr>
! c: G% U. P, n  S1 K/ F8 `<h1 id="---the-end---">-- the End --</h1>
" T/ K# {' Q  h; I# v<p>好啦,这篇文章就到这里了。以上就是我分享的全部内容,感谢阅读!</p>
8 W3 s6 z. |2 k0 Q<p>打个小广告:作者CSDN博客主页:<br>: B$ M0 R- @' K
<a  href="https://blog.csdn.net/weixin_52132159">https://blog.csdn.net/weixin_52132159</a></p>! w$ W, s2 n! ~8 G( I

: S6 f; d7 X9 k+ {; j7 Q
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-11-28 23:27 , Processed in 0.072968 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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