飞雪团队

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

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

[复制链接]

7893

主题

7981

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26009
发表于 2022-2-12 14:35:43 | 显示全部楼层 |阅读模式
9 r1 T3 w: q# V  C- W
<p>事情是这样的:今天晚上,女朋友让我十二点催她睡觉。<br>
4 G4 S% ^8 u7 D. F+ V<img src="https://img-blog.csdnimg.cn/28feb6811cc142f5b0e38e81e73d5043.png" ><br>
% T; {8 \* M$ N1 C不过,可是我实在太困了,熬不下去…… 是吧?女朋友哪有睡觉重要?<br>. b3 i4 m& A9 I
<img src="https://img-blog.csdnimg.cn/ddf8351a359e45218952d4d3962ff278.jpg" ><br>
9 e- p+ g) I4 S3 _1 H& D1 _& H但,女朋友的命令,我是不敢违抗的……<br>
$ Q$ B% S1 X! ~/ I7 P0 `! u+ b<img src="https://img-blog.csdnimg.cn/87fe69f100904f4782a720254ef49191.png" ><br>) q* ?5 h/ D9 z7 K3 Q5 B/ C
但是睡觉也不能缺!</p>  w7 [! U% v  r& b, j
<p>这时候我们该怎么办呢?是时候让Python登场了!</p>$ X, {# A* H; W1 B, d# a
<h1 id="python登场">Python登场</h1>9 b: v5 b, \  t# }  I, `# f
<p>这次我们来做一个自动发送微信的程序,在深夜十二点的时候给女朋友发去消息,也算是尽了一个男朋友的义务了。</p>  y" A2 A. F; L- ]2 l" {
<h2 id="安装和导入">安装和导入</h2>$ I3 O( b! e% c9 [6 Z6 z
<p>我们需要两个模块:<strong>apscheduler</strong>,<strong>pyautogui</strong></p>/ a2 r5 t9 l  b% `1 F4 e$ Y( {
<p>快捷键 Windows+r 打开运行控制框,输入 cmd,进入命令行,输入:</p>; |0 A9 k: Q3 s2 F
<pre><code class="language-p">pip install apscheduler/ B' I% n5 D9 w! d0 l2 X
pip install pyautogui# p9 ^3 K4 ?$ B- ^1 S* k* h
</code></pre>: J3 S" F' P+ |+ t% L
<p>导入:</p>3 t* y/ ?& G3 J; h5 H  L
<pre><code class="language-python">import pyautogui+ g* T& r1 L8 b+ r
from datetime import datetime
, @6 K/ q, n7 @3 _- b9 \from apscheduler.schedulers.blocking import BlockingScheduler # 阻塞当前进程的调度器6 J& x2 H  b) O* Z2 F9 ~8 z
# blocking类型调度器会阻塞当前进程,若你想要后台运行的调度器,可以使用以下代码:
8 U* D' d: A+ ~3 G/ m% r. Q/ @: v# from apscheduler.schedulers.background import BackgroundScheduler
3 k3 U/ f2 {4 |# w( Z) H, F% O0 D: Y</code></pre>
: Z) ~7 E9 }7 D/ b' P: N<h1 id="pyautogui">pyautogui</h1>
: U( B9 J8 i) z/ l! V. z2 f0 u6 v<p>首先我们来实现自动发送消息</p>* m9 _6 i- h6 }" q3 k5 p4 D: {
<p>pyautogui 是一个非常强大的库,可以操作鼠标和键盘。我们将用它来完成自动操作电脑。</p>- N8 t$ k- y1 ]' W0 O; b  u
<p>先来做一些基本设置:</p>
! P9 r& O% Y3 R9 S# G& X/ X, h. H) @<pre><code class="language-python">pyautogui.PAUSE = 1 # 设置每一步操作的间隔(秒),可防止操作太快! e7 J- m# F" L- T
</code></pre>- L# J$ Z( p7 b: Q/ r- V
<p>然后我们登录微信,最小化。</p>
. z+ d% W6 H, s<p>接下来我们把鼠标放到微信的任务栏图标上,运行以下语句,获取此时光标的坐标,返回一个Point对象:</p># Q4 \* b/ l& P7 e* g% Z% o
<pre><code class="language-python">print(pyautogui.position()) # 打印坐标,Point(x=148, y=879), @7 k) f0 ~4 @  G
icon_position = pyautogui.position() # Point(x=148, y=879)0 g. ]# T6 B0 O1 z
</code></pre>5 R% E4 ~4 d: b4 P* }+ D, K; j
<p>打开微信,选择女朋友的回话窗口,将鼠标放在输入框上,同样获取光标坐标,为了将焦点锁定到输入框以方便待会的输入。<br>) A: Q  s) E8 i0 |) b
<img src="https://img-blog.csdnimg.cn/4809ee2ce93b40a0828717f811b02599.png" ></p>
0 \2 r! a5 r; ]1 @. |1 m2 Y! [. R<pre><code class="language-python">print(pyautogui.position()) # 打印坐标,Point(x=174, y=751)
! D: P# m& H0 _& t" U2 bentry_position = pyautogui.position() # Point(x=174, y=751), k+ n/ o9 S# [; D* _% S) W
</code></pre>
+ a9 T4 w- j7 k3 d<p>接下来,控制程序依次点击这两个点:</p>
5 x3 W; T* o8 n<pre><code class="language-python">pyautogui.click(icon_position) # 默认左键单击
8 S/ g3 |$ T& ?: M6 u. S3 R- i# pyautogui.click(148, 879)( e- n/ c8 {7 g
pyautogui.click(entry_position)
$ n+ `1 b, W: X! d# pyautogui.click(174, 751)
. B! Z' @& s' s# E, @</code></pre>
% \: K, o5 `' Z6 S' o6 a<p>打开微信并锁定焦点后,我们开始输入文本。</p>
2 X+ k* {! n. ]. _4 B% F<p>输入文本可以有两种方式:</p>
2 r% T% b) I/ O7 H$ C8 }<ul>& X' [! a2 m( H( c$ b4 j! L1 u
<li>
1 ?9 M4 }8 Z& c8 Z$ ?<p><code>pyautogui.typewrite(['o', 'n', 'e', 'enter'])</code></p>
( O+ b8 [6 G+ ?  C<p>在方法中传入一个列表,里面每一元素都是单个字母或特殊按键</p>& `0 [: K$ q. K; p0 K
</li>7 h9 C- `' V# r8 |. A
<li>  |  H4 y2 h/ H2 x$ k
<p><code>pyautogui.typewrite('You can type multiple letters in this way')</code></p>
: R5 v2 r3 K7 P& e% Y  R  Q/ L! \" S<p>传入字符串,但不能同时打印字母和特殊按键。</p>: D. c/ r: x% k& e; J" k
</li>3 }. d* P$ h* K* I, _
</ul>
& C! P* `/ m9 r8 o/ A: [1 L  [. M<p>这两种方式都不能直接输入中文,所以只能依靠你的输入法来输入中文了。</p>
3 o2 t1 ]3 S3 ?9 E7 u7 x( [2 n/ g- V<pre><code class="language-python">pyautogui.typewrite([*list('zhengzai '), *list('jinxing '), 'shift', *list('pyautogui'), 'shift', *list('shiyan '), 'enter'], 0.1) # 第一个参数是输入文本,第二个是输入每个字符的间隔时间  Q9 D0 Q" D2 r" x3 O+ V
</code></pre>& w# t& t2 Q3 {( }* g" I8 D% f
<p>为了使我们的操作更加 <s>人模狗样</s> 像人的操作,我么来加上移动鼠标的代码:</p>
4 W, H1 ?4 r$ d  Y: G2 C<pre><code class="language-python">pyautogui.moveTo(icon_position, duration=2) # duration为执行时长,可选
( p1 ^8 W: X: Tpyautogui.click(icon_position)# o0 ]1 T5 `: ~" S
pyautogui.moveTo(entry_position, duration=2). S) |" M3 _3 t6 W" z* _
pyautogui.click(entry_position)- q) w" ?" q6 Q2 }
pyautogui.typewrite([*list('zhengzai '), *list('jinxing '), 'shift', *list('pyautogui'), 'shift', *list('shiyan '), 'enter'], 0.1) # 第二个参数为按下每一个字母的间隔,可选* ^9 S. i7 ^; g/ Y& A! F
</code></pre>
8 g: V, z1 C+ Q, v5 q( \# Q<p>看看效果:<br>
# s; |% ~+ W/ L" G) V  ?* q; Y<img src="https://img-blog.csdnimg.cn/88126f4b522c4584a3de07c4c35a808d.gif" ><br>2 W/ s, z4 @" n( F3 k
当然,若是你要输入的内容实在很多,又嫌麻烦,可以通过复制粘贴来实现:</p>
7 v9 n( s9 n  C; m3 ^- c7 _<pre><code class="language-python">import pyperclip
* O# i# K/ `$ M4 \) a5 H8 ^- {/ U% d  e7 g$ a
pyperclip.copy('正在进行发中文试验,看到请忽略,更不要骂傻逼') # 复制! p- L! h' v7 Y3 _- v) f, z* `5 H5 A
pyautogui.hotkey('ctrl', 'v') # 按下组合键的方法,ctrl+v粘贴
9 p; b2 x) i6 l. d' Y7 M* Spyautogui.press('enter') # 按下按键4 Z9 Q! U4 y# G. N& d& }
</code></pre>; w( j; ^  i$ f2 h7 o  n0 \9 ~
<p><img src="https://img-blog.csdnimg.cn/d178d71e5d564893a1aee8672841c76a.gif" ><br>0 E& T4 ]" e5 n; h' D, S% r2 I
这样,我们便完成了自动发送微信消息的功能了。</p>
! q. b3 A# b5 Z4 W: d% {<h1 id="apscheduler">apscheduler</h1>
  @) k8 G4 ?" F+ Y4 A8 x) w; }<p>APScheduler 是一个Python库,可实现延迟调度要执行Python代码的功能,可以只执行一次,也可以定期执行。可以随时添加新任务或删除旧任务。能够十分方便地进行定时任务。</p>
$ h" E; t+ R9 s/ ]4 u<pre><code class="language-python">scheduler = BlockingScheduler() # 实例化一个调度器
. F  E" S" y  \0 F! tscheduler.add_job(main, 'date', run_date=datetime(2021, 8, 18, 24, 00, 00)) # 添加任务
6 E  H' G- J# H, gscheduler.start()
1 p! y1 B+ G- O# y$ @% w8 F% Q</code></pre>
9 f' K9 p0 u" T  {<p>add_job 方法在这里传了 3 个参数,第一个为到时间后要执行的函数,第二个为触发器的类型。这里选用的是 date 触发器,特定的时间点触发,作业任务只会执行一次。第三个参数 run_date 就是执行的时间。在这前我已经把自动发送消息的代码封装为了 main 函数,只需到时后调用即可。</p>
6 N% ~9 G- \1 @0 T- p<h1 id="完整代码">完整代码</h1>
. g: o3 H6 D. A# }% ^<pre><code class="language-python">import pyautogui
6 b3 C' [% w& Timport pyperclip
* W: b- T& R/ m2 ]/ }7 W' Dfrom datetime import datetime0 R4 V% S5 C7 Q; q5 k7 S4 q$ G/ N
from apscheduler.schedulers.blocking import BlockingScheduler5 h) S1 ]! {% R0 r

/ |4 ]; e, o8 y) k1 sdef main():' ?( i+ V/ ]4 y9 D' z1 i
        pyautogui.PAUSE = 0
" i7 P% U2 E: E5 [+ ]0 j7 g6 A+ U/ v" V+ ~( V
        icon_position = pyautogui.Point(x=148, y=879) # 任务栏图标位置8 V! b- |) E' T  W2 [# _* k. ?
        entry_position = pyautogui.Point(x=174, y=751) # 输入框位置3 ]- _$ O+ s0 E& @% y

) F7 F3 _, m% B        pyautogui.moveTo(icon_position, duration=1) # duration为执行时长,可选
/ k. [" H9 |/ L7 S        pyautogui.click(icon_position)
$ s7 ~% |5 J- F5 `        pyautogui.moveTo(entry_position, duration=0.7)
1 R. ~5 [+ x) j/ l% q        pyautogui.click(entry_position)
/ ~. G  ^5 ^8 `& N9 l- e" f        pyperclip.copy('快去睡觉')
* l# H- \  s: l5 P* Z        pyautogui.hotkey('ctrl', 'v')
' c+ C6 a* W0 V0 U) }        pyautogui.press('enter')
3 R( P7 O: N* D    pyperclip.copy('笨猪')
. O9 \7 Y. R0 p* U) d( X        pyautogui.hotkey('ctrl', 'v')% p% V6 G* O& t
        pyautogui.press('enter')* k2 |5 H' \. a& a/ g  n! E! B' E
    6 ~' q8 A; k& m9 x4 Y( {3 ~
scheduler = BlockingScheduler() # 实例化- x0 @: |! |1 v
scheduler.add_job(main, 'date', run_date=datetime(2021, 8, 18, 24, 00, 00)) # 添加任务
8 X5 Z) A$ M4 E$ L! Xscheduler.start(), s; h6 N7 b0 e
</code></pre>
% m: C4 b4 ]9 U) d. t<p>完成啦!现在可以去睡觉了。</p>
& h/ R1 R4 d# c: H- J<h1 id="结果">结果</h1>
3 c/ S+ l/ L  ^! ^5 k<p>第二天早上起床,我被我妈妈骂了一顿,问我为什么午夜12点的时候电脑还亮着,而且还在自己发微信!</p>
" ?7 O3 j$ H2 h( @: L5 w<p>不过,好在女朋友没丢,我成功完成了女朋友的任务!<br>) R9 x  ~2 ~4 B% ^! W
<img src="https://img-blog.csdnimg.cn/111c7494bd6e4371bbd541529c48b776.gif" ></p>
0 g7 ]  t0 }+ g6 l8 A; L<hr>
, o+ W9 V5 Y" \6 R! k& m1 @5 ~<h1 id="---the-end---">-- the End --</h1>% q9 A# U7 ^+ b" w- D
<p>好啦,这篇文章就到这里了。以上就是我分享的全部内容,感谢阅读!</p>
: X( ~3 X4 X3 _! W<p>打个小广告:作者CSDN博客主页:<br>; B! t0 P8 m) g5 P
<a  href="https://blog.csdn.net/weixin_52132159">https://blog.csdn.net/weixin_52132159</a></p>2 R. [$ G- k3 O1 d0 _* @
( [1 F( h) p. |6 @3 @  a+ ^
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-11-18 05:05 , Processed in 0.067086 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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