飞雪团队

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

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

[复制链接]

8114

主题

8202

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

' ~  b( R* _5 m8 d. t. c<p>事情是这样的:今天晚上,女朋友让我十二点催她睡觉。<br>0 J* ]$ Q( S; y# n2 @' e
<img src="https://img-blog.csdnimg.cn/28feb6811cc142f5b0e38e81e73d5043.png" ><br>
" Q; N7 Y  f; l, o不过,可是我实在太困了,熬不下去…… 是吧?女朋友哪有睡觉重要?<br>8 O: \% X" T5 Z) x. a7 V& S
<img src="https://img-blog.csdnimg.cn/ddf8351a359e45218952d4d3962ff278.jpg" ><br>9 @4 x. A$ {. }* |7 Q
但,女朋友的命令,我是不敢违抗的……<br>; }5 {% |; k3 G$ F0 x" ]6 b7 Y
<img src="https://img-blog.csdnimg.cn/87fe69f100904f4782a720254ef49191.png" ><br>
- q* H: h% H# X9 A$ }但是睡觉也不能缺!</p>
7 s4 ^: q! ]  {6 u. X* J, {<p>这时候我们该怎么办呢?是时候让Python登场了!</p>
5 `/ h/ ~; W6 z  P) n. x<h1 id="python登场">Python登场</h1>" |3 I" J, k( C; E, |4 z# X8 R
<p>这次我们来做一个自动发送微信的程序,在深夜十二点的时候给女朋友发去消息,也算是尽了一个男朋友的义务了。</p>
: p4 a. D( f6 _9 E$ l$ W* n<h2 id="安装和导入">安装和导入</h2>
' {3 ~" H8 ~( W7 z4 k<p>我们需要两个模块:<strong>apscheduler</strong>,<strong>pyautogui</strong></p>2 ?! ~/ M# G: C- E0 P3 Z
<p>快捷键 Windows+r 打开运行控制框,输入 cmd,进入命令行,输入:</p>8 ]1 v% A& H) m9 p" Q
<pre><code class="language-p">pip install apscheduler1 R* p0 r8 F, h  N* ^
pip install pyautogui3 _" ~- A$ l! T
</code></pre>
) T& `1 T( w" `- \<p>导入:</p>
  j' o" Y8 n8 ]- l8 [4 U/ ~' Q5 X1 `<pre><code class="language-python">import pyautogui
1 ?  I7 C+ A* \: ifrom datetime import datetime1 b7 [) u9 I  N
from apscheduler.schedulers.blocking import BlockingScheduler # 阻塞当前进程的调度器
) y3 F& i3 Q/ C# blocking类型调度器会阻塞当前进程,若你想要后台运行的调度器,可以使用以下代码:2 s" _. L8 p. l' u4 x
# from apscheduler.schedulers.background import BackgroundScheduler
* A) g' L4 w9 f1 i* B</code></pre>) \8 i4 Y1 W# s1 a8 _& ^" M& q1 D
<h1 id="pyautogui">pyautogui</h1>, U% Z; K' t( J8 ?; Q  A, p* D5 d
<p>首先我们来实现自动发送消息</p>
* ?  E' s% o& V% \. l<p>pyautogui 是一个非常强大的库,可以操作鼠标和键盘。我们将用它来完成自动操作电脑。</p>) I" ~$ R& P. E: \! N8 z7 A
<p>先来做一些基本设置:</p>2 ~6 {. o5 E( o" w% r/ b9 g
<pre><code class="language-python">pyautogui.PAUSE = 1 # 设置每一步操作的间隔(秒),可防止操作太快
. c9 D& o* d" V$ l/ f; X9 }. `8 Q</code></pre>) J. b8 k* }% d1 D
<p>然后我们登录微信,最小化。</p>9 A- ]2 M8 y" G
<p>接下来我们把鼠标放到微信的任务栏图标上,运行以下语句,获取此时光标的坐标,返回一个Point对象:</p>8 `' S2 \$ x4 H  k
<pre><code class="language-python">print(pyautogui.position()) # 打印坐标,Point(x=148, y=879)' {. [$ W  n% a5 I  H( `
icon_position = pyautogui.position() # Point(x=148, y=879)
) l; C9 G" b+ Y& l0 e</code></pre>  R- S+ V" J7 f6 v" i3 A
<p>打开微信,选择女朋友的回话窗口,将鼠标放在输入框上,同样获取光标坐标,为了将焦点锁定到输入框以方便待会的输入。<br>
5 c! x/ i: Z& s# _* p! V' B4 T<img src="https://img-blog.csdnimg.cn/4809ee2ce93b40a0828717f811b02599.png" ></p>8 j3 N: i" ?+ \  D
<pre><code class="language-python">print(pyautogui.position()) # 打印坐标,Point(x=174, y=751)
, x( j$ q% u3 o0 e: c$ W. Mentry_position = pyautogui.position() # Point(x=174, y=751)
4 W7 B  P" @2 n$ q</code></pre>/ L. F5 ]* Y6 F5 `
<p>接下来,控制程序依次点击这两个点:</p>
1 k" @; h+ ?% L<pre><code class="language-python">pyautogui.click(icon_position) # 默认左键单击. `0 w+ a: ~& I, S9 [5 [) ]9 N
# pyautogui.click(148, 879)2 I9 s) H8 H: `6 p
pyautogui.click(entry_position)
8 A# I8 C2 t4 q9 z+ p4 ?# pyautogui.click(174, 751)
, q) ?# H$ V* X( t</code></pre>
$ h; W' {( D5 s/ m# T: x<p>打开微信并锁定焦点后,我们开始输入文本。</p>/ V( \! F; K9 [& Y1 Z' R
<p>输入文本可以有两种方式:</p>
; r! }3 O. F+ {' a7 W<ul>% e- U; v7 m; }+ a; ?/ e  |8 _
<li>
4 {4 v& @! m+ W6 q% W<p><code>pyautogui.typewrite(['o', 'n', 'e', 'enter'])</code></p>9 |# p; w* ]6 P
<p>在方法中传入一个列表,里面每一元素都是单个字母或特殊按键</p>
1 G* P0 m# u$ v' [</li>% d8 u4 y0 ^$ `
<li>1 ?1 S9 {: o- r
<p><code>pyautogui.typewrite('You can type multiple letters in this way')</code></p>
. b( ~3 K' h- Y2 f1 P" F<p>传入字符串,但不能同时打印字母和特殊按键。</p>
1 P# O) ]4 `, y' _- h% y) S& V- m' L</li>2 a9 O4 O+ h# j8 ]2 t/ f3 \5 A0 l
</ul># [  F6 N5 @/ ?/ N) W
<p>这两种方式都不能直接输入中文,所以只能依靠你的输入法来输入中文了。</p>* n% m' w0 M* ^
<pre><code class="language-python">pyautogui.typewrite([*list('zhengzai '), *list('jinxing '), 'shift', *list('pyautogui'), 'shift', *list('shiyan '), 'enter'], 0.1) # 第一个参数是输入文本,第二个是输入每个字符的间隔时间* H  K, z. Z1 o; y, R4 h
</code></pre>
; Q" U* Y: C) L<p>为了使我们的操作更加 <s>人模狗样</s> 像人的操作,我么来加上移动鼠标的代码:</p>
$ M/ o: t+ ^0 f5 w9 ~7 G<pre><code class="language-python">pyautogui.moveTo(icon_position, duration=2) # duration为执行时长,可选3 Q5 v" H0 X% O
pyautogui.click(icon_position)0 [4 U6 y$ e' `# p: D2 C( l% V* ~
pyautogui.moveTo(entry_position, duration=2); k4 V8 z0 S: b9 d; [. g
pyautogui.click(entry_position)
/ m% q4 ?1 Z7 r4 }pyautogui.typewrite([*list('zhengzai '), *list('jinxing '), 'shift', *list('pyautogui'), 'shift', *list('shiyan '), 'enter'], 0.1) # 第二个参数为按下每一个字母的间隔,可选
( C+ _, E+ G! r8 E$ ]/ c  c</code></pre>5 x4 Y" E" c9 U; l; O
<p>看看效果:<br>0 z6 ^$ d) X0 c. }# K$ j0 M" m
<img src="https://img-blog.csdnimg.cn/88126f4b522c4584a3de07c4c35a808d.gif" ><br>
+ \, m& {9 e2 T当然,若是你要输入的内容实在很多,又嫌麻烦,可以通过复制粘贴来实现:</p># i+ ]! E) z$ u0 A
<pre><code class="language-python">import pyperclip
; Y5 G9 q- T* W8 |( I' W& B) x$ |
pyperclip.copy('正在进行发中文试验,看到请忽略,更不要骂傻逼') # 复制/ x; T- E) S/ v+ |; ^
pyautogui.hotkey('ctrl', 'v') # 按下组合键的方法,ctrl+v粘贴0 Z# S: s' s" M5 t% c% F
pyautogui.press('enter') # 按下按键, M: d$ J1 X% T1 w( }' n' b
</code></pre>
; j1 i  p" V' y<p><img src="https://img-blog.csdnimg.cn/d178d71e5d564893a1aee8672841c76a.gif" ><br>1 |+ B  p$ v7 ?1 p  Y5 f" w: [
这样,我们便完成了自动发送微信消息的功能了。</p>* p5 `1 N. n5 _
<h1 id="apscheduler">apscheduler</h1>
+ N# s$ v( D0 s5 X<p>APScheduler 是一个Python库,可实现延迟调度要执行Python代码的功能,可以只执行一次,也可以定期执行。可以随时添加新任务或删除旧任务。能够十分方便地进行定时任务。</p>
# u" J6 E" M: n" h8 a. ^2 ]( S9 s<pre><code class="language-python">scheduler = BlockingScheduler() # 实例化一个调度器. s: |' b% q; A. \9 C
scheduler.add_job(main, 'date', run_date=datetime(2021, 8, 18, 24, 00, 00)) # 添加任务
5 P  ^' j) l- |$ S) \scheduler.start()
* r3 @) `$ M1 U& V8 e) {</code></pre>
# Q  X1 _5 e; Y<p>add_job 方法在这里传了 3 个参数,第一个为到时间后要执行的函数,第二个为触发器的类型。这里选用的是 date 触发器,特定的时间点触发,作业任务只会执行一次。第三个参数 run_date 就是执行的时间。在这前我已经把自动发送消息的代码封装为了 main 函数,只需到时后调用即可。</p>0 ~* C- |7 b8 X' w5 w
<h1 id="完整代码">完整代码</h1>. Y( ~5 _& o: N4 J1 u: h
<pre><code class="language-python">import pyautogui9 d& f3 q7 v* f+ Z' l6 ^
import pyperclip
, I/ K9 _( L: r! Y& A  R  }) Q+ ?from datetime import datetime
0 ?* r0 Z, a% b% x' u$ }1 q) b. afrom apscheduler.schedulers.blocking import BlockingScheduler
6 P# V$ l7 G6 L; ]0 |6 [# |0 y2 L* i, r- g, ]
def main():& T: Y7 o4 u3 t0 R7 m+ \% G
        pyautogui.PAUSE = 0: M' ^6 w) S8 v" a) H
- b% ]. U$ s! k2 c6 Q- e/ }# G8 Z
        icon_position = pyautogui.Point(x=148, y=879) # 任务栏图标位置0 @( g+ y, d3 a* r
        entry_position = pyautogui.Point(x=174, y=751) # 输入框位置
  V, L) E( L# v/ s. B
- p$ T; Z  ^* G% o  N9 e1 E+ V5 Z6 M        pyautogui.moveTo(icon_position, duration=1) # duration为执行时长,可选
/ ?2 K2 Z: g* l        pyautogui.click(icon_position)4 q; x1 n6 @# r# Y% k
        pyautogui.moveTo(entry_position, duration=0.7)4 E' i7 W( Y0 f  O& W+ X
        pyautogui.click(entry_position)0 T" k" V% e; g
        pyperclip.copy('快去睡觉')5 s7 s& t3 g  }5 i
        pyautogui.hotkey('ctrl', 'v')/ i# L5 M- e0 C  ]8 W
        pyautogui.press('enter')# V4 l% x# K% A. z
    pyperclip.copy('笨猪')
6 _1 o2 S. G  z7 j        pyautogui.hotkey('ctrl', 'v')) k7 S) Z5 w) \5 x1 K7 y: Y
        pyautogui.press('enter')+ K1 i, O; S% B5 j* }# o
    $ [( b& `+ T5 o' p- k! A
scheduler = BlockingScheduler() # 实例化
% L9 i( u# x3 C& yscheduler.add_job(main, 'date', run_date=datetime(2021, 8, 18, 24, 00, 00)) # 添加任务( N& ~4 D* B  V6 j. p; Q0 @. ^4 R& K
scheduler.start()3 B5 P: h  B0 y
</code></pre>
. K: U6 m( a  F' J" w<p>完成啦!现在可以去睡觉了。</p>$ t# r9 @; A- z) ~( y8 K
<h1 id="结果">结果</h1>! {/ S$ t3 B2 r1 m. b9 Y
<p>第二天早上起床,我被我妈妈骂了一顿,问我为什么午夜12点的时候电脑还亮着,而且还在自己发微信!</p>
( ?, m8 y1 J7 y<p>不过,好在女朋友没丢,我成功完成了女朋友的任务!<br>
! r$ U) N$ r( P0 v1 `<img src="https://img-blog.csdnimg.cn/111c7494bd6e4371bbd541529c48b776.gif" ></p>8 ~# ~7 Y- b; |; C+ W4 f% c3 h, X/ y! `
<hr>
2 v  G! q: z+ a5 p( `<h1 id="---the-end---">-- the End --</h1>5 x: I4 ~, J7 D+ t" _- c& {1 {
<p>好啦,这篇文章就到这里了。以上就是我分享的全部内容,感谢阅读!</p>, R! j) g# Y6 [! U
<p>打个小广告:作者CSDN博客主页:<br>3 y/ H* X+ B+ C+ \$ {  g
<a  href="https://blog.csdn.net/weixin_52132159">https://blog.csdn.net/weixin_52132159</a></p>
% q( `6 L: q0 o& d4 i# w# G) a. o% Q" ~! u- G3 ^6 T  s% `8 U1 E
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-19 23:33 , Processed in 0.063273 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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