飞雪团队

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

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

[复制链接]

7903

主题

7991

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26039
发表于 2022-2-12 14:35:43 | 显示全部楼层 |阅读模式
( ^7 r- b2 ?$ V& x9 j. \
<p>事情是这样的:今天晚上,女朋友让我十二点催她睡觉。<br>& o; L) H4 ~- G& v
<img src="https://img-blog.csdnimg.cn/28feb6811cc142f5b0e38e81e73d5043.png" ><br>
9 Y- I- ?" Q) D* G4 t不过,可是我实在太困了,熬不下去…… 是吧?女朋友哪有睡觉重要?<br>
! j  u$ ^# a" s<img src="https://img-blog.csdnimg.cn/ddf8351a359e45218952d4d3962ff278.jpg" ><br>
! E8 K% R- e5 ?% F9 U# b- j4 D但,女朋友的命令,我是不敢违抗的……<br>
( @* E9 R. H8 a  J) w& I& v5 f<img src="https://img-blog.csdnimg.cn/87fe69f100904f4782a720254ef49191.png" ><br>, Y6 W5 j8 [+ E3 G
但是睡觉也不能缺!</p>
0 c) `8 i# E6 s$ L& }6 [7 O/ Y<p>这时候我们该怎么办呢?是时候让Python登场了!</p>
( m2 T" g% W8 e; {/ q<h1 id="python登场">Python登场</h1>
) `- X% x  U5 U- w* L( X<p>这次我们来做一个自动发送微信的程序,在深夜十二点的时候给女朋友发去消息,也算是尽了一个男朋友的义务了。</p>+ _* t) V$ Q, j/ _: U
<h2 id="安装和导入">安装和导入</h2>
& H% M) X& U8 k( I6 _5 L- V( Z3 E<p>我们需要两个模块:<strong>apscheduler</strong>,<strong>pyautogui</strong></p>
9 `9 _/ C8 B$ _. h<p>快捷键 Windows+r 打开运行控制框,输入 cmd,进入命令行,输入:</p>
' t( ]/ J! p" g( L<pre><code class="language-p">pip install apscheduler
* @! _. X" m7 Q0 _* F* D. ~  bpip install pyautogui
* K7 }) _# S, q$ l8 B' H; l5 N6 ?3 _7 h</code></pre>; W6 Z5 j0 q" \8 `/ L8 R) ]
<p>导入:</p>
1 {% \/ L% _( N' b( }# a- l( C<pre><code class="language-python">import pyautogui1 i! x  z6 c5 \4 n
from datetime import datetime5 C5 Q1 n; d. H* |, L
from apscheduler.schedulers.blocking import BlockingScheduler # 阻塞当前进程的调度器
( A+ ?. q" ~3 ]" `% D# Q7 R3 z8 N; O# blocking类型调度器会阻塞当前进程,若你想要后台运行的调度器,可以使用以下代码:9 Z4 N+ x7 s5 Q& }& @9 ]
# from apscheduler.schedulers.background import BackgroundScheduler+ {6 s$ [. o' l* ~4 ^4 [
</code></pre># w. |1 L) J) {. k  m+ A' Z8 R0 B
<h1 id="pyautogui">pyautogui</h1>- N. @8 W2 \, ~7 }" E- x0 V+ m0 J
<p>首先我们来实现自动发送消息</p>
# j: ~9 u/ o; N4 j2 p% s8 G<p>pyautogui 是一个非常强大的库,可以操作鼠标和键盘。我们将用它来完成自动操作电脑。</p>
) _: H5 w7 c* g% x2 W- x; H5 l( l<p>先来做一些基本设置:</p>1 [" b6 }( \9 b0 }
<pre><code class="language-python">pyautogui.PAUSE = 1 # 设置每一步操作的间隔(秒),可防止操作太快: b* w1 M' C# \) L/ a6 ~
</code></pre>
' q6 |$ f# z' i<p>然后我们登录微信,最小化。</p>5 h3 C- S. F6 K: z- V, ~
<p>接下来我们把鼠标放到微信的任务栏图标上,运行以下语句,获取此时光标的坐标,返回一个Point对象:</p>, v' j4 e0 G; b4 X) q" K& r
<pre><code class="language-python">print(pyautogui.position()) # 打印坐标,Point(x=148, y=879)5 r* \% p; q! |1 ?+ X/ B: b% `
icon_position = pyautogui.position() # Point(x=148, y=879)
% m" Q! w% T  P$ k! ?0 R</code></pre>. ^$ x7 @8 ?! p6 U9 P
<p>打开微信,选择女朋友的回话窗口,将鼠标放在输入框上,同样获取光标坐标,为了将焦点锁定到输入框以方便待会的输入。<br>
1 a3 w- D& }: K) X* Y% [3 L" _<img src="https://img-blog.csdnimg.cn/4809ee2ce93b40a0828717f811b02599.png" ></p>
1 j1 v! `( @4 b; `8 L<pre><code class="language-python">print(pyautogui.position()) # 打印坐标,Point(x=174, y=751)# ?2 H% S# q* T0 {. t! i- f/ N: k+ k
entry_position = pyautogui.position() # Point(x=174, y=751)
( k2 v. S6 h% u1 N  b" d</code></pre>
% t+ d: V7 N, P7 r& E<p>接下来,控制程序依次点击这两个点:</p>% S0 Q$ O$ n8 b: O' G
<pre><code class="language-python">pyautogui.click(icon_position) # 默认左键单击" ?; W! l8 J+ g$ t" y: h1 \
# pyautogui.click(148, 879)
7 i* R) V2 i. A$ xpyautogui.click(entry_position)
; Y* v" p3 b, V% p9 H5 u8 U# pyautogui.click(174, 751)
6 o" S  L, L# }/ J4 C! \( o. g</code></pre>
! C6 z& @8 U) C2 G5 r<p>打开微信并锁定焦点后,我们开始输入文本。</p>
. w3 ~3 i3 X. u9 g% e7 t0 X<p>输入文本可以有两种方式:</p>
6 [+ G4 d5 r( M5 @* u<ul>' _; M9 Q5 v$ o: J" `  s: z
<li>' ?' n4 J7 x* I
<p><code>pyautogui.typewrite(['o', 'n', 'e', 'enter'])</code></p>
4 s% Z$ R, I+ k<p>在方法中传入一个列表,里面每一元素都是单个字母或特殊按键</p>
( z5 u: S/ H# [  `% [0 {/ ^</li>
2 y4 |- g- h2 [<li>+ t7 P" O/ a- j* z8 l- s8 n
<p><code>pyautogui.typewrite('You can type multiple letters in this way')</code></p>
  u2 e* S7 S; d5 z6 t) r( f6 w( G& d<p>传入字符串,但不能同时打印字母和特殊按键。</p>+ M, [+ Q! M1 e! ?
</li>
# L, @' R3 ]: Z</ul>
8 l% E' ?3 K$ N6 Z! |2 L, C<p>这两种方式都不能直接输入中文,所以只能依靠你的输入法来输入中文了。</p>3 \& i& \$ B& S  @" I
<pre><code class="language-python">pyautogui.typewrite([*list('zhengzai '), *list('jinxing '), 'shift', *list('pyautogui'), 'shift', *list('shiyan '), 'enter'], 0.1) # 第一个参数是输入文本,第二个是输入每个字符的间隔时间3 @, P& Z  g5 S' N1 z4 I
</code></pre>/ A; E) g2 a% |' D9 ~0 N
<p>为了使我们的操作更加 <s>人模狗样</s> 像人的操作,我么来加上移动鼠标的代码:</p>
8 c$ u* L  ]2 h( [5 h) H<pre><code class="language-python">pyautogui.moveTo(icon_position, duration=2) # duration为执行时长,可选9 j+ I3 J7 `; X4 g) C
pyautogui.click(icon_position)
! F1 Y3 D& \9 L; S5 O  H# qpyautogui.moveTo(entry_position, duration=2)# R4 ]2 F) O* d" E" y0 Z: w5 c
pyautogui.click(entry_position)
. f5 ?' o9 g* k$ Wpyautogui.typewrite([*list('zhengzai '), *list('jinxing '), 'shift', *list('pyautogui'), 'shift', *list('shiyan '), 'enter'], 0.1) # 第二个参数为按下每一个字母的间隔,可选
/ K+ l3 i+ U) g</code></pre>
! `2 Q3 s9 \% V( a) ^<p>看看效果:<br>
1 y$ U: ?9 u0 a<img src="https://img-blog.csdnimg.cn/88126f4b522c4584a3de07c4c35a808d.gif" ><br>2 E7 a8 w  A1 s4 {; G
当然,若是你要输入的内容实在很多,又嫌麻烦,可以通过复制粘贴来实现:</p>
8 o0 T0 y( v- u! g1 a* D<pre><code class="language-python">import pyperclip
% o1 {; t& _$ e0 ?, [
; O$ L% d5 J( O2 A2 hpyperclip.copy('正在进行发中文试验,看到请忽略,更不要骂傻逼') # 复制
, P$ Q: O) I8 {7 \: B- w; v; i1 Opyautogui.hotkey('ctrl', 'v') # 按下组合键的方法,ctrl+v粘贴
& x* @, t3 H6 g8 ~: w3 ]# g8 Upyautogui.press('enter') # 按下按键( f' ?( _, z5 T8 B7 c- f% u
</code></pre>
) O  @  S' Y3 j8 o<p><img src="https://img-blog.csdnimg.cn/d178d71e5d564893a1aee8672841c76a.gif" ><br>2 Z; L) k5 n1 b" n6 h  Z. j
这样,我们便完成了自动发送微信消息的功能了。</p>7 |7 o9 g$ H# |; R
<h1 id="apscheduler">apscheduler</h1>5 _# T; c1 w. D5 n$ F9 n( g
<p>APScheduler 是一个Python库,可实现延迟调度要执行Python代码的功能,可以只执行一次,也可以定期执行。可以随时添加新任务或删除旧任务。能够十分方便地进行定时任务。</p>0 }( v0 x9 d: r+ N" Q+ E  ]
<pre><code class="language-python">scheduler = BlockingScheduler() # 实例化一个调度器1 d8 a) Y: r2 {4 D( D
scheduler.add_job(main, 'date', run_date=datetime(2021, 8, 18, 24, 00, 00)) # 添加任务
% w  v4 ^. F# N# E/ K$ N" ?, Escheduler.start()
( ^5 M* y6 \2 y" f( K1 {</code></pre>
# k9 @% v; Z+ J1 l: o<p>add_job 方法在这里传了 3 个参数,第一个为到时间后要执行的函数,第二个为触发器的类型。这里选用的是 date 触发器,特定的时间点触发,作业任务只会执行一次。第三个参数 run_date 就是执行的时间。在这前我已经把自动发送消息的代码封装为了 main 函数,只需到时后调用即可。</p>4 w; R5 l4 |& v
<h1 id="完整代码">完整代码</h1>
; Q# e$ R; Q6 \0 e# q3 T" K<pre><code class="language-python">import pyautogui2 p6 c5 _8 ^5 M6 k: P7 Q9 Y* }! Y8 j
import pyperclip
5 A1 k! P) x! p; c5 Q% t! xfrom datetime import datetime
$ `) m. M) D5 L0 W+ |) qfrom apscheduler.schedulers.blocking import BlockingScheduler
8 d. e& I, [' A5 s# ?2 u8 d8 R( N$ ]
def main():
7 y. n* e% s6 }  k3 }        pyautogui.PAUSE = 0
5 d" Y7 J; z* c* w9 s5 ]8 d8 z( y" j: P9 Q
        icon_position = pyautogui.Point(x=148, y=879) # 任务栏图标位置
) e: O/ k0 [% B        entry_position = pyautogui.Point(x=174, y=751) # 输入框位置
1 r1 n  d  o9 J, p2 t
" \  G$ x. D. @. E6 V3 i: C        pyautogui.moveTo(icon_position, duration=1) # duration为执行时长,可选
2 d$ N3 x! }9 O9 S8 Q        pyautogui.click(icon_position)
- i5 J  s" t* C( A  a+ {        pyautogui.moveTo(entry_position, duration=0.7)+ \" @, V; ?' I, _2 \
        pyautogui.click(entry_position)0 M9 }5 u/ d' V
        pyperclip.copy('快去睡觉')
7 V+ R4 q) P7 G, V8 N        pyautogui.hotkey('ctrl', 'v')
3 O: [# }0 Q8 j) V) ~6 w        pyautogui.press('enter')
# V% B1 M3 C$ R7 J6 e7 V    pyperclip.copy('笨猪')
$ ]) Q0 T& J2 z) ^, P; l3 X3 ~        pyautogui.hotkey('ctrl', 'v')0 W9 c# I9 s3 @# y6 H* G3 B
        pyautogui.press('enter')
# T# u' D) W0 y! g, r  j   
2 j) ?9 ~& K! n! E9 Y' g+ Lscheduler = BlockingScheduler() # 实例化
" l- l& a5 k- v9 I& [( Z$ Cscheduler.add_job(main, 'date', run_date=datetime(2021, 8, 18, 24, 00, 00)) # 添加任务' D4 O# f% d* [: a1 ~
scheduler.start()3 a4 k0 Q$ n% X
</code></pre>; }- R1 y( L' K! [0 n4 G; Y
<p>完成啦!现在可以去睡觉了。</p>
, A8 F  I1 F& n( c<h1 id="结果">结果</h1>
4 q, V6 X" G8 a2 D<p>第二天早上起床,我被我妈妈骂了一顿,问我为什么午夜12点的时候电脑还亮着,而且还在自己发微信!</p>9 I+ L: c; C0 J' L
<p>不过,好在女朋友没丢,我成功完成了女朋友的任务!<br>
9 P1 ^+ X0 }) B, e8 H<img src="https://img-blog.csdnimg.cn/111c7494bd6e4371bbd541529c48b776.gif" ></p>
; x) u2 x. ~1 l( k0 Y/ ]<hr>3 D* T& @! O3 O3 p
<h1 id="---the-end---">-- the End --</h1>
( e6 S5 o  V: z<p>好啦,这篇文章就到这里了。以上就是我分享的全部内容,感谢阅读!</p>
! X9 t' T% V! H) O+ H<p>打个小广告:作者CSDN博客主页:<br>) w, F8 \3 @5 {1 i
<a  href="https://blog.csdn.net/weixin_52132159">https://blog.csdn.net/weixin_52132159</a></p>$ Q" P2 s8 a* z/ }
& D# T, d$ t! S' c7 K6 n: ^  C
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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