飞雪团队

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

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

[复制链接]

7884

主题

7972

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

' `7 ~1 z2 z8 v) `1 K<p>事情是这样的:今天晚上,女朋友让我十二点催她睡觉。<br>
8 e) n. X% {7 ^<img src="https://img-blog.csdnimg.cn/28feb6811cc142f5b0e38e81e73d5043.png" ><br>5 F5 L# Z& }6 b
不过,可是我实在太困了,熬不下去…… 是吧?女朋友哪有睡觉重要?<br>1 H$ N) S0 J- j* N
<img src="https://img-blog.csdnimg.cn/ddf8351a359e45218952d4d3962ff278.jpg" ><br>
* G+ f9 V7 G4 j# o6 b但,女朋友的命令,我是不敢违抗的……<br>& R; r: I. I! E# z9 H: ^. ]
<img src="https://img-blog.csdnimg.cn/87fe69f100904f4782a720254ef49191.png" ><br>! a* ]) s! l5 }( x8 v* m
但是睡觉也不能缺!</p>  H& U1 o$ L# U: ]8 ], _6 R
<p>这时候我们该怎么办呢?是时候让Python登场了!</p>
( |/ x8 `  f; ]8 ]+ D. h<h1 id="python登场">Python登场</h1>
% ~) \, A% I/ B; z' b7 u<p>这次我们来做一个自动发送微信的程序,在深夜十二点的时候给女朋友发去消息,也算是尽了一个男朋友的义务了。</p>
' C9 M7 r4 @* x: l, c<h2 id="安装和导入">安装和导入</h2>. x1 q( z6 h" R1 g7 ], y
<p>我们需要两个模块:<strong>apscheduler</strong>,<strong>pyautogui</strong></p>
6 x; |* {% f1 T" w4 Q; L/ K4 R+ \<p>快捷键 Windows+r 打开运行控制框,输入 cmd,进入命令行,输入:</p>' O3 g8 _, D$ l
<pre><code class="language-p">pip install apscheduler
0 ?% b* d! f) B. |# m. ~( e! o. npip install pyautogui( w2 ~* w4 e5 l/ D
</code></pre>; k  K! G5 p: S  N( S, `
<p>导入:</p>% O1 X: Y8 a- w; `/ k
<pre><code class="language-python">import pyautogui) }6 m" ~  G5 Q0 y! ?
from datetime import datetime
( K; y* g( P( V" \& R- hfrom apscheduler.schedulers.blocking import BlockingScheduler # 阻塞当前进程的调度器
2 L. t7 X8 C+ |7 A: Y( u5 ?4 q# blocking类型调度器会阻塞当前进程,若你想要后台运行的调度器,可以使用以下代码:* {# k# ~2 t' D" c$ R. W0 l! L' V- n
# from apscheduler.schedulers.background import BackgroundScheduler/ I* o0 h" }0 K0 k
</code></pre>4 H+ @8 p, [$ e% n0 k2 i
<h1 id="pyautogui">pyautogui</h1>
- U/ M: U% B  H<p>首先我们来实现自动发送消息</p>
4 z- C: K: v1 D! u  Q+ X<p>pyautogui 是一个非常强大的库,可以操作鼠标和键盘。我们将用它来完成自动操作电脑。</p>
" ~: w+ v4 E, ?- Q" J<p>先来做一些基本设置:</p>
- ~' K  |: q( C3 b; E/ H2 w<pre><code class="language-python">pyautogui.PAUSE = 1 # 设置每一步操作的间隔(秒),可防止操作太快
7 i: u0 p: l/ Z& p3 ^' V</code></pre>+ ~6 T+ v) f  f. h) G
<p>然后我们登录微信,最小化。</p>
# n) ~! v. n+ J5 M<p>接下来我们把鼠标放到微信的任务栏图标上,运行以下语句,获取此时光标的坐标,返回一个Point对象:</p>: N: v4 M3 i/ n3 w' p" J7 D
<pre><code class="language-python">print(pyautogui.position()) # 打印坐标,Point(x=148, y=879)
0 M% a6 T1 `; Zicon_position = pyautogui.position() # Point(x=148, y=879)
3 }, q2 u1 ^0 |# U8 ^$ C- m</code></pre>) i; N8 ?3 {# G4 m! q
<p>打开微信,选择女朋友的回话窗口,将鼠标放在输入框上,同样获取光标坐标,为了将焦点锁定到输入框以方便待会的输入。<br>
+ q+ l* }" c8 }) h1 a' a+ b7 L$ H<img src="https://img-blog.csdnimg.cn/4809ee2ce93b40a0828717f811b02599.png" ></p>& T* e# C+ b& ~8 t% a
<pre><code class="language-python">print(pyautogui.position()) # 打印坐标,Point(x=174, y=751). a7 o! @! D8 F7 `
entry_position = pyautogui.position() # Point(x=174, y=751)- \  o/ g  t% Z
</code></pre>
# p& t; }+ Z7 u9 h1 e4 f<p>接下来,控制程序依次点击这两个点:</p>
! ~+ M% I1 ]3 a$ e$ }4 @8 x<pre><code class="language-python">pyautogui.click(icon_position) # 默认左键单击
  o1 G) y* b' h1 J! j4 p5 L# pyautogui.click(148, 879)
$ {  m' n/ i1 v7 E/ spyautogui.click(entry_position)
9 x! M; z4 O9 P: m6 A" y' c# a# pyautogui.click(174, 751)2 m/ |; c2 K5 Y% k
</code></pre>
7 i" z3 S* ^  C* h0 n# ]<p>打开微信并锁定焦点后,我们开始输入文本。</p>
# g! F- U/ N$ m& f; j2 {<p>输入文本可以有两种方式:</p>
, K# v9 M% y' M* q<ul>
0 y" ^/ s2 b" p1 s<li>
' x- W5 b; m( [) E7 l<p><code>pyautogui.typewrite(['o', 'n', 'e', 'enter'])</code></p>
* \  T: p5 F5 U  a9 W2 y3 N<p>在方法中传入一个列表,里面每一元素都是单个字母或特殊按键</p>
$ V, I) R; n/ U</li>) t0 `4 u) ~& M) |
<li>
# ~6 Y8 o2 Q+ Z7 u* n3 R" a. k<p><code>pyautogui.typewrite('You can type multiple letters in this way')</code></p>
! r# M( u& c  f# l- j7 {<p>传入字符串,但不能同时打印字母和特殊按键。</p>
1 Q- S8 l, X! t</li>
$ g7 t  A4 z1 f! {</ul>! N- N3 y  @7 ?- @$ R+ l
<p>这两种方式都不能直接输入中文,所以只能依靠你的输入法来输入中文了。</p>
3 S5 X) Z1 f( F9 g: t% A2 W; U8 f  M<pre><code class="language-python">pyautogui.typewrite([*list('zhengzai '), *list('jinxing '), 'shift', *list('pyautogui'), 'shift', *list('shiyan '), 'enter'], 0.1) # 第一个参数是输入文本,第二个是输入每个字符的间隔时间# @% @" S5 R7 L2 P6 b4 z* G3 J
</code></pre># s+ y/ r- t% A5 c
<p>为了使我们的操作更加 <s>人模狗样</s> 像人的操作,我么来加上移动鼠标的代码:</p>1 X. x  R8 ^% ^9 j( P$ T- Y# G
<pre><code class="language-python">pyautogui.moveTo(icon_position, duration=2) # duration为执行时长,可选
; H; p" V5 N8 y7 V( |$ rpyautogui.click(icon_position); }+ B) T3 b- z8 D
pyautogui.moveTo(entry_position, duration=2)
; n( ^( a% P2 y2 t2 |pyautogui.click(entry_position)& Y' p, ~! Z# ^. a" w' |8 d0 B4 o
pyautogui.typewrite([*list('zhengzai '), *list('jinxing '), 'shift', *list('pyautogui'), 'shift', *list('shiyan '), 'enter'], 0.1) # 第二个参数为按下每一个字母的间隔,可选
/ k- T, Y. }$ b# E</code></pre>
/ d" P, E+ t3 t( y/ I<p>看看效果:<br>
3 Q4 I$ Q% r! [9 b6 b<img src="https://img-blog.csdnimg.cn/88126f4b522c4584a3de07c4c35a808d.gif" ><br>
5 J9 [  R: ]" M. w) w' K' }+ F# \# N当然,若是你要输入的内容实在很多,又嫌麻烦,可以通过复制粘贴来实现:</p>+ s7 U8 w. a, r8 p0 }  j# c
<pre><code class="language-python">import pyperclip; w1 ^- ~7 h: i' V, t# ]
9 y7 R+ x2 B2 |3 f. x" G" }
pyperclip.copy('正在进行发中文试验,看到请忽略,更不要骂傻逼') # 复制
/ x1 W( s. H1 }: N) W( D: t& |pyautogui.hotkey('ctrl', 'v') # 按下组合键的方法,ctrl+v粘贴! y" ^& x! u) U' ~
pyautogui.press('enter') # 按下按键
; v# H# |! ~4 L+ L; U) x3 D</code></pre>6 o8 ^. z0 \$ W* J9 y( u
<p><img src="https://img-blog.csdnimg.cn/d178d71e5d564893a1aee8672841c76a.gif" ><br># O5 [% H. e1 _8 N0 Y
这样,我们便完成了自动发送微信消息的功能了。</p>
% o  q2 S' [, i2 ?% O$ S<h1 id="apscheduler">apscheduler</h1>9 t) l2 j8 F% H
<p>APScheduler 是一个Python库,可实现延迟调度要执行Python代码的功能,可以只执行一次,也可以定期执行。可以随时添加新任务或删除旧任务。能够十分方便地进行定时任务。</p>
" v$ p9 }. ]: f) ^8 S<pre><code class="language-python">scheduler = BlockingScheduler() # 实例化一个调度器
: _* T* A# Q1 F& b% b8 K& C7 cscheduler.add_job(main, 'date', run_date=datetime(2021, 8, 18, 24, 00, 00)) # 添加任务
" X4 u% w* x" s  j0 d9 I) F/ ]scheduler.start()
- q, M  z5 \% R: t) p& m  o</code></pre>
- p7 J' v! T  }0 R3 M' a( l# Y% M% A<p>add_job 方法在这里传了 3 个参数,第一个为到时间后要执行的函数,第二个为触发器的类型。这里选用的是 date 触发器,特定的时间点触发,作业任务只会执行一次。第三个参数 run_date 就是执行的时间。在这前我已经把自动发送消息的代码封装为了 main 函数,只需到时后调用即可。</p>7 p; g9 l. |" j! }; [  |) ?1 N# l
<h1 id="完整代码">完整代码</h1>0 @3 [! R& p& `; R+ d
<pre><code class="language-python">import pyautogui8 k8 V" R3 a3 T2 V, c0 Q5 e, w
import pyperclip
: T$ S$ J# M; `9 }! b0 S5 l' V, S3 \from datetime import datetime
, p, q8 m4 O3 X) \; `4 O4 kfrom apscheduler.schedulers.blocking import BlockingScheduler* j& \$ X# B0 I! A8 v
) t/ y9 |5 o* \1 a  C
def main():
. q! F! ?' h) q2 c4 W        pyautogui.PAUSE = 0
' @3 L1 p. t  w' S; V
2 K+ S0 N. b0 `/ w2 L! K0 j' ~! l3 S        icon_position = pyautogui.Point(x=148, y=879) # 任务栏图标位置. q1 F0 D' z) M2 _4 W
        entry_position = pyautogui.Point(x=174, y=751) # 输入框位置
. x) t% J: W' ^1 @& s, R: g
% {6 A( g* M) J& h9 L        pyautogui.moveTo(icon_position, duration=1) # duration为执行时长,可选% Y' ~( V, @( }9 s' l8 [7 m& q
        pyautogui.click(icon_position)
/ |2 @- {/ t9 S        pyautogui.moveTo(entry_position, duration=0.7), N$ J. j$ C3 T9 v
        pyautogui.click(entry_position)
- W0 S; r9 T8 }6 ]! h& M# A        pyperclip.copy('快去睡觉')
' w& A0 Q# ~; a8 Q4 M; L" x        pyautogui.hotkey('ctrl', 'v')2 L" ^& h. \+ w+ m* v5 M. L5 C
        pyautogui.press('enter')3 i$ H5 t' z6 p6 K$ u" D
    pyperclip.copy('笨猪')
7 m( L" }, E- U) R' Q/ F' z2 b        pyautogui.hotkey('ctrl', 'v')3 w4 X( j3 E  J9 Y' ]# o6 n/ @
        pyautogui.press('enter')
% _  m  N/ v8 G' U: K- j. a' E" e   
  ~, ^) ]  `0 {* j( S) p. Z( Vscheduler = BlockingScheduler() # 实例化
. _5 j5 G! M5 v* {# h! Nscheduler.add_job(main, 'date', run_date=datetime(2021, 8, 18, 24, 00, 00)) # 添加任务5 ^* W% [6 S/ y. l9 E
scheduler.start()1 U" D1 {, H1 Q1 b! w9 n6 m8 A
</code></pre>( Q. r4 r' m' C! r& }- I
<p>完成啦!现在可以去睡觉了。</p>
/ A3 z/ d) @8 ]& x. }<h1 id="结果">结果</h1>4 O8 L) }# `" ~: @5 @! S+ s
<p>第二天早上起床,我被我妈妈骂了一顿,问我为什么午夜12点的时候电脑还亮着,而且还在自己发微信!</p>
+ d3 I/ W6 s" f- V<p>不过,好在女朋友没丢,我成功完成了女朋友的任务!<br>+ r. L9 J$ x9 l( {% O
<img src="https://img-blog.csdnimg.cn/111c7494bd6e4371bbd541529c48b776.gif" ></p>2 u) m# X1 C! H5 j
<hr>
2 J) E5 N3 p4 O6 d" w<h1 id="---the-end---">-- the End --</h1>
2 S8 S. Q( b1 [6 E1 ?<p>好啦,这篇文章就到这里了。以上就是我分享的全部内容,感谢阅读!</p>
/ R/ C: |$ {! ^/ O. j( L/ H( F! j<p>打个小广告:作者CSDN博客主页:<br>
: Y8 Q8 U" f6 b2 i* h<a  href="https://blog.csdn.net/weixin_52132159">https://blog.csdn.net/weixin_52132159</a></p>
3 a1 D) f2 c6 W( p  D& b( n4 B
) \* v8 |' l& S6 f* \0 P. V
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-11-15 21:09 , Processed in 0.076828 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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