飞雪团队

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

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

[复制链接]

8032

主题

8120

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

+ ?1 |- s+ n2 Y2 L6 x- {$ {<p>事情是这样的:今天晚上,女朋友让我十二点催她睡觉。<br>
( I, K/ U. e  e8 \& H3 y<img src="https://img-blog.csdnimg.cn/28feb6811cc142f5b0e38e81e73d5043.png" ><br>7 x9 p2 u3 n$ v: W$ q4 o  I
不过,可是我实在太困了,熬不下去…… 是吧?女朋友哪有睡觉重要?<br>1 |; G! a0 L1 u" ]$ U( U
<img src="https://img-blog.csdnimg.cn/ddf8351a359e45218952d4d3962ff278.jpg" ><br>
5 y0 U: L/ t8 o- s' \5 J但,女朋友的命令,我是不敢违抗的……<br>
; l* F9 V' w; t* c<img src="https://img-blog.csdnimg.cn/87fe69f100904f4782a720254ef49191.png" ><br>3 v# n8 @/ N& R7 s
但是睡觉也不能缺!</p>
3 l) Y) t4 C2 S  l, U2 g$ b( E<p>这时候我们该怎么办呢?是时候让Python登场了!</p>
- x/ L* G* N0 F: O3 ^) J<h1 id="python登场">Python登场</h1>
# k. y) f! T8 t2 q/ O* a<p>这次我们来做一个自动发送微信的程序,在深夜十二点的时候给女朋友发去消息,也算是尽了一个男朋友的义务了。</p>0 F/ a& T/ W9 {% E
<h2 id="安装和导入">安装和导入</h2>( A5 M* s# u7 ]3 _
<p>我们需要两个模块:<strong>apscheduler</strong>,<strong>pyautogui</strong></p>. O) p- f0 A3 e+ x4 _
<p>快捷键 Windows+r 打开运行控制框,输入 cmd,进入命令行,输入:</p>
# G3 ~$ }! D3 @& Y0 m<pre><code class="language-p">pip install apscheduler
3 s: d. @3 @- |8 d. Z6 kpip install pyautogui
* Y. s5 t' {6 q7 R</code></pre>% ?- l7 v6 u0 p; K+ r
<p>导入:</p>& X. N/ W. ~( H% `3 y) a* N
<pre><code class="language-python">import pyautogui
# H8 O+ f- Y2 X- x* _from datetime import datetime# X( J& E5 d. x. @2 }+ D6 w/ B- l
from apscheduler.schedulers.blocking import BlockingScheduler # 阻塞当前进程的调度器
( a* t% c; _  L4 C# blocking类型调度器会阻塞当前进程,若你想要后台运行的调度器,可以使用以下代码:! m9 j- e4 I& `: b! @+ l4 C+ E
# from apscheduler.schedulers.background import BackgroundScheduler
, G, m3 q! \! T0 Q( h' U</code></pre>' y$ P/ [2 O( {1 p
<h1 id="pyautogui">pyautogui</h1>  ^3 F3 `+ ~( E& p; s- A
<p>首先我们来实现自动发送消息</p>" G% u' }1 u' r' S, c3 r
<p>pyautogui 是一个非常强大的库,可以操作鼠标和键盘。我们将用它来完成自动操作电脑。</p>- V3 f1 |# Y" j) i+ F$ X' i
<p>先来做一些基本设置:</p>  ?7 `& t4 V+ L5 E9 U
<pre><code class="language-python">pyautogui.PAUSE = 1 # 设置每一步操作的间隔(秒),可防止操作太快
: ]* d, h5 k0 r</code></pre>" i' S% B) J; X1 P7 \
<p>然后我们登录微信,最小化。</p>9 b, ?) j! b3 I, U2 N- v
<p>接下来我们把鼠标放到微信的任务栏图标上,运行以下语句,获取此时光标的坐标,返回一个Point对象:</p>. J7 F1 y' P. g$ }1 R
<pre><code class="language-python">print(pyautogui.position()) # 打印坐标,Point(x=148, y=879)
1 [, \8 r( n- r" i8 wicon_position = pyautogui.position() # Point(x=148, y=879), e5 ~; [" S$ O" l5 r7 k4 t# Q
</code></pre>( F7 P6 h( p# I5 j* W
<p>打开微信,选择女朋友的回话窗口,将鼠标放在输入框上,同样获取光标坐标,为了将焦点锁定到输入框以方便待会的输入。<br>! _" v; `1 d8 C. Z1 P+ f0 B
<img src="https://img-blog.csdnimg.cn/4809ee2ce93b40a0828717f811b02599.png" ></p>7 }4 E( k1 L+ O9 I. y: _' {- p! m
<pre><code class="language-python">print(pyautogui.position()) # 打印坐标,Point(x=174, y=751)
! X; A) Q, w# q+ b& Y6 ^: \0 ^) Dentry_position = pyautogui.position() # Point(x=174, y=751)
1 l# K  C; i/ Z</code></pre>
% g7 Y! d; H5 f+ T- U<p>接下来,控制程序依次点击这两个点:</p>
: q& o; J7 H8 k  K, U  _<pre><code class="language-python">pyautogui.click(icon_position) # 默认左键单击
9 n$ K: J* J# Q% A# pyautogui.click(148, 879). q. e  M! A7 c; p" N9 v7 B4 P
pyautogui.click(entry_position). E. E& j/ ?1 O( d  g
# pyautogui.click(174, 751)& N. ]) U8 Z0 m
</code></pre>2 q2 t) c$ A& \/ y3 D, X) g
<p>打开微信并锁定焦点后,我们开始输入文本。</p>
. }) k+ K# Y7 C# v) F& M- Z<p>输入文本可以有两种方式:</p>4 y; v$ R2 P6 ~% h+ \6 s/ G0 Z) e
<ul>
" Z0 [& l2 f. V' ]( ]<li>' N# q$ Q5 D* I; b# I, R% z
<p><code>pyautogui.typewrite(['o', 'n', 'e', 'enter'])</code></p>
4 v7 A# s. o3 Y1 F2 u& m<p>在方法中传入一个列表,里面每一元素都是单个字母或特殊按键</p>
6 u5 Q2 k" P- r2 v- v4 W</li>
& {; X. u2 }* u9 P<li>6 U5 }* C7 ]6 {( I6 M' }( B
<p><code>pyautogui.typewrite('You can type multiple letters in this way')</code></p>
* E, ~' k" k+ n<p>传入字符串,但不能同时打印字母和特殊按键。</p>
0 B/ u8 [  ]* _4 Z</li>
" [+ c3 ?) ~1 Q5 X" A4 n+ T</ul>
6 k6 b+ o( j9 j2 c; ]<p>这两种方式都不能直接输入中文,所以只能依靠你的输入法来输入中文了。</p>
; b$ j1 r0 r  D0 B* B4 `0 F<pre><code class="language-python">pyautogui.typewrite([*list('zhengzai '), *list('jinxing '), 'shift', *list('pyautogui'), 'shift', *list('shiyan '), 'enter'], 0.1) # 第一个参数是输入文本,第二个是输入每个字符的间隔时间
( M9 B6 X! U$ n) r" ~& x</code></pre>  b2 [) g. N( y6 i9 B( [# d
<p>为了使我们的操作更加 <s>人模狗样</s> 像人的操作,我么来加上移动鼠标的代码:</p>6 B$ z+ i2 l& W! ^
<pre><code class="language-python">pyautogui.moveTo(icon_position, duration=2) # duration为执行时长,可选# {9 t9 B) A6 s$ ^2 y& w, j5 P8 V3 j
pyautogui.click(icon_position)
: F7 y+ {  b! {3 d" j, y% Hpyautogui.moveTo(entry_position, duration=2)5 e( w, X' A" X1 R+ c
pyautogui.click(entry_position)
1 M0 t( c) Q* \& b7 C% [* ypyautogui.typewrite([*list('zhengzai '), *list('jinxing '), 'shift', *list('pyautogui'), 'shift', *list('shiyan '), 'enter'], 0.1) # 第二个参数为按下每一个字母的间隔,可选
3 b7 i! R" O" V, C8 C: j5 I6 j</code></pre>
6 N! {. z; G* G* l# \4 C<p>看看效果:<br>
9 ]" ^3 m- U7 M/ g/ [# x<img src="https://img-blog.csdnimg.cn/88126f4b522c4584a3de07c4c35a808d.gif" ><br>
! D3 d5 ]6 r( `% q当然,若是你要输入的内容实在很多,又嫌麻烦,可以通过复制粘贴来实现:</p>
1 H$ C4 a' B6 _- m<pre><code class="language-python">import pyperclip2 Y" w  M5 P" W( B8 b3 h

; H4 w# Z. W& w3 D- k6 o3 Wpyperclip.copy('正在进行发中文试验,看到请忽略,更不要骂傻逼') # 复制
) h3 L$ s8 k8 p+ u4 gpyautogui.hotkey('ctrl', 'v') # 按下组合键的方法,ctrl+v粘贴
1 S0 L8 {2 ~/ X/ l, G* h* H% ~pyautogui.press('enter') # 按下按键
) f, Z7 O+ g3 _: Y</code></pre>
/ J0 C- G. M' f: P& _" P! [<p><img src="https://img-blog.csdnimg.cn/d178d71e5d564893a1aee8672841c76a.gif" ><br>
4 {! E5 V" H! \) O' D( p% k这样,我们便完成了自动发送微信消息的功能了。</p>
8 R" `- ^& L9 k# G<h1 id="apscheduler">apscheduler</h1>2 \$ i( i" Q. h
<p>APScheduler 是一个Python库,可实现延迟调度要执行Python代码的功能,可以只执行一次,也可以定期执行。可以随时添加新任务或删除旧任务。能够十分方便地进行定时任务。</p>
/ M/ K1 s1 v2 ~8 P4 j& F, K1 e<pre><code class="language-python">scheduler = BlockingScheduler() # 实例化一个调度器1 [) Z: z' W: [) W5 B" {
scheduler.add_job(main, 'date', run_date=datetime(2021, 8, 18, 24, 00, 00)) # 添加任务
. x8 u. `+ A, }/ Tscheduler.start()! f, |! m8 }1 u3 }7 v, y4 L; z6 N
</code></pre>
8 R2 ^, i+ @, |! |% `( z( j<p>add_job 方法在这里传了 3 个参数,第一个为到时间后要执行的函数,第二个为触发器的类型。这里选用的是 date 触发器,特定的时间点触发,作业任务只会执行一次。第三个参数 run_date 就是执行的时间。在这前我已经把自动发送消息的代码封装为了 main 函数,只需到时后调用即可。</p>
% a) V3 ~8 s: M7 {0 n0 t: T& G<h1 id="完整代码">完整代码</h1>
: b+ w' C% I8 ^$ `; B<pre><code class="language-python">import pyautogui
5 A7 Y2 R) }% ~' C- c* E: L1 jimport pyperclip6 N% n. F; P0 y4 f- o$ i: F
from datetime import datetime
) |  P3 m' F' b4 v1 P4 E9 L# [from apscheduler.schedulers.blocking import BlockingScheduler0 X3 Z% K( T1 ?; h4 B% I# Q8 X

! S* v, u' {1 Q) Adef main():
5 C; q+ E, i" S6 E* i7 N1 T        pyautogui.PAUSE = 0  R2 j" F4 H, a# i) ~8 B4 x

+ l% f/ ~! H4 x2 W! W        icon_position = pyautogui.Point(x=148, y=879) # 任务栏图标位置: \& H/ W# \) T( {0 g, o
        entry_position = pyautogui.Point(x=174, y=751) # 输入框位置5 P; M2 H" X5 q* d- d
6 a: H' L7 G8 H& l
        pyautogui.moveTo(icon_position, duration=1) # duration为执行时长,可选
3 X8 }2 v' E0 t  T, K' d) p0 q        pyautogui.click(icon_position), Z: M. Z. O. M" _. [# ?  p
        pyautogui.moveTo(entry_position, duration=0.7)
( n: N3 D. o. P# g        pyautogui.click(entry_position)9 i+ I8 T( ~2 T0 T* b6 Y0 ?$ E4 p
        pyperclip.copy('快去睡觉')
3 Z2 ~* Q8 l- |0 T        pyautogui.hotkey('ctrl', 'v')8 N% j3 H2 s6 o. M# B
        pyautogui.press('enter')% _6 f. [7 d7 c
    pyperclip.copy('笨猪'); C( s, j6 X3 v  s9 J3 u  U6 q
        pyautogui.hotkey('ctrl', 'v')$ k- M+ e2 Y0 y/ p, b- S5 M
        pyautogui.press('enter')
6 L6 t8 a4 X" T+ O    9 U" \- [! S9 t* {
scheduler = BlockingScheduler() # 实例化. B2 @) ~# _. W; F8 P1 D: B+ {' a7 }& Y
scheduler.add_job(main, 'date', run_date=datetime(2021, 8, 18, 24, 00, 00)) # 添加任务
7 e. Q8 Q" V) }. t8 f! Qscheduler.start()
  `: r( K3 t$ W% c4 a9 i</code></pre>
( _# o3 Y7 Y% f<p>完成啦!现在可以去睡觉了。</p>
3 s3 O) n& _2 F3 S3 T% ?* h<h1 id="结果">结果</h1>) v. a, p* O* w7 U
<p>第二天早上起床,我被我妈妈骂了一顿,问我为什么午夜12点的时候电脑还亮着,而且还在自己发微信!</p>
# K* z+ W2 G" i<p>不过,好在女朋友没丢,我成功完成了女朋友的任务!<br>& j+ s. h0 s' U$ u% }
<img src="https://img-blog.csdnimg.cn/111c7494bd6e4371bbd541529c48b776.gif" ></p>9 M( k$ f/ X; X% s  C
<hr>
( o: H! |0 C0 ?; m  b* i<h1 id="---the-end---">-- the End --</h1>. N* f6 _' J1 Q2 y4 E4 D
<p>好啦,这篇文章就到这里了。以上就是我分享的全部内容,感谢阅读!</p>+ _6 o& u  o# H6 A
<p>打个小广告:作者CSDN博客主页:<br>
. H/ Z  f4 F7 U1 N3 c<a  href="https://blog.csdn.net/weixin_52132159">https://blog.csdn.net/weixin_52132159</a></p># m( i  ?3 h. r+ T  n, F

# @& s, H! N$ I& R* T( ^
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-4 06:57 , Processed in 0.068900 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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