飞雪团队

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

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

[复制链接]

7885

主题

7973

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
25985
发表于 2022-2-12 14:35:43 | 显示全部楼层 |阅读模式
5 G: y, [& J2 R
<p>事情是这样的:今天晚上,女朋友让我十二点催她睡觉。<br>
* Y" V" @$ r' m<img src="https://img-blog.csdnimg.cn/28feb6811cc142f5b0e38e81e73d5043.png" ><br>' b0 T% w8 D1 F& i( V* @$ D
不过,可是我实在太困了,熬不下去…… 是吧?女朋友哪有睡觉重要?<br>% H+ s: J" e7 y8 j  K
<img src="https://img-blog.csdnimg.cn/ddf8351a359e45218952d4d3962ff278.jpg" ><br>
! C6 j- L& {# ]  ?* J3 \$ Y但,女朋友的命令,我是不敢违抗的……<br>) f* b( j" ~, t" E: e
<img src="https://img-blog.csdnimg.cn/87fe69f100904f4782a720254ef49191.png" ><br>
9 P% c4 R7 r) P! U8 j) I+ `但是睡觉也不能缺!</p>
+ v. d# S* T. ~; d6 s' p3 b<p>这时候我们该怎么办呢?是时候让Python登场了!</p>
4 I8 l6 u0 S: N& d7 C% O<h1 id="python登场">Python登场</h1>
1 d: ]) V5 K, A! d7 x; c. z<p>这次我们来做一个自动发送微信的程序,在深夜十二点的时候给女朋友发去消息,也算是尽了一个男朋友的义务了。</p>
( F. H' K3 K4 X$ ?<h2 id="安装和导入">安装和导入</h2>
8 [5 X6 |. }+ }<p>我们需要两个模块:<strong>apscheduler</strong>,<strong>pyautogui</strong></p>- X0 _5 P6 c/ }4 ~7 X
<p>快捷键 Windows+r 打开运行控制框,输入 cmd,进入命令行,输入:</p>
2 r' [4 p# q$ s<pre><code class="language-p">pip install apscheduler3 k/ Z9 \. G; |( X
pip install pyautogui
# B$ m! K; y8 u0 E& f' Q1 h</code></pre>) s( n& U4 k0 G$ ~: ]
<p>导入:</p>
- `$ t5 Q# I: ^9 F. r6 K$ x; r' a: A<pre><code class="language-python">import pyautogui
0 J) `1 x) J8 F0 r& c9 ofrom datetime import datetime
) K$ v: x' y6 d* Tfrom apscheduler.schedulers.blocking import BlockingScheduler # 阻塞当前进程的调度器# }0 S$ w; d! z- X3 y( P
# blocking类型调度器会阻塞当前进程,若你想要后台运行的调度器,可以使用以下代码:, r6 j4 |. ~7 I! v: b
# from apscheduler.schedulers.background import BackgroundScheduler
7 g. h% Y( }* w' v8 j- s( P0 i</code></pre>
! Y# W0 G; c9 B" R<h1 id="pyautogui">pyautogui</h1>
" K  o2 t% q$ {3 }<p>首先我们来实现自动发送消息</p>
- x$ C) n5 a5 [7 I<p>pyautogui 是一个非常强大的库,可以操作鼠标和键盘。我们将用它来完成自动操作电脑。</p>
  j( b# ~1 K7 G7 A$ }<p>先来做一些基本设置:</p>
% x) L* u- ]$ E0 K1 K* g<pre><code class="language-python">pyautogui.PAUSE = 1 # 设置每一步操作的间隔(秒),可防止操作太快, N' r) u( M) z
</code></pre>
% `- S; r, g  o- c1 V<p>然后我们登录微信,最小化。</p>
! d; l0 h! H8 l5 L4 O<p>接下来我们把鼠标放到微信的任务栏图标上,运行以下语句,获取此时光标的坐标,返回一个Point对象:</p>' U- ?/ a$ B2 \0 A
<pre><code class="language-python">print(pyautogui.position()) # 打印坐标,Point(x=148, y=879)7 v5 T5 d; L! X4 T* U( H
icon_position = pyautogui.position() # Point(x=148, y=879)
. o! w0 {; b. a& i</code></pre>
; Q( Z- h1 V9 J<p>打开微信,选择女朋友的回话窗口,将鼠标放在输入框上,同样获取光标坐标,为了将焦点锁定到输入框以方便待会的输入。<br>$ S2 }; S3 A9 H1 K
<img src="https://img-blog.csdnimg.cn/4809ee2ce93b40a0828717f811b02599.png" ></p>
; F. M* {+ u4 T<pre><code class="language-python">print(pyautogui.position()) # 打印坐标,Point(x=174, y=751)9 \) w( r5 o& N
entry_position = pyautogui.position() # Point(x=174, y=751)( M, X% Q- n+ C$ U4 ?
</code></pre>+ m' D' z0 N# j" O; I8 i( s' e
<p>接下来,控制程序依次点击这两个点:</p>
* ^# C9 K7 i# e( B8 \<pre><code class="language-python">pyautogui.click(icon_position) # 默认左键单击( ~3 z3 L' E; @( G& e% G; v  r/ a; P
# pyautogui.click(148, 879)% e. u4 [3 A- B8 _7 E
pyautogui.click(entry_position)! ^) e6 k: w! u* c
# pyautogui.click(174, 751)7 f! z3 n) U' e0 M1 R
</code></pre>2 o% |- S4 u! |; Y: N
<p>打开微信并锁定焦点后,我们开始输入文本。</p>) F  Q1 _1 E5 a, A, r9 Y9 \4 _
<p>输入文本可以有两种方式:</p>
1 x; Y  x8 s+ B7 M1 C  T<ul>
( z9 E0 Q. J4 B; }& z& ~<li>! M0 A3 P% w- K) j9 |  \7 H
<p><code>pyautogui.typewrite(['o', 'n', 'e', 'enter'])</code></p>
: R. f" P- k) d% A2 n% j<p>在方法中传入一个列表,里面每一元素都是单个字母或特殊按键</p>3 [' N& ]  a6 s9 I+ O8 H* Q' \
</li>9 m( ]7 ]6 q5 Z( n- O# V
<li>7 B6 V* ?6 n+ X) X6 Z& [
<p><code>pyautogui.typewrite('You can type multiple letters in this way')</code></p>
, g5 y- z' u  E* ~<p>传入字符串,但不能同时打印字母和特殊按键。</p>9 B# Z% f/ M9 S; x' e$ m4 E
</li>7 n: M2 O$ x, s$ }) R; N
</ul>/ Y- e6 R+ V% u0 R# S4 F  g
<p>这两种方式都不能直接输入中文,所以只能依靠你的输入法来输入中文了。</p>
8 R: s! J3 F7 P' j; |# O( z<pre><code class="language-python">pyautogui.typewrite([*list('zhengzai '), *list('jinxing '), 'shift', *list('pyautogui'), 'shift', *list('shiyan '), 'enter'], 0.1) # 第一个参数是输入文本,第二个是输入每个字符的间隔时间, R+ S% p# |* v6 X: ~# Z
</code></pre>2 O# ]1 a: u! _, `8 o1 G6 L
<p>为了使我们的操作更加 <s>人模狗样</s> 像人的操作,我么来加上移动鼠标的代码:</p>4 m+ P2 K/ P% _" K- }$ [- N4 o; m
<pre><code class="language-python">pyautogui.moveTo(icon_position, duration=2) # duration为执行时长,可选
7 r0 J3 S' E  e  d) K& ]pyautogui.click(icon_position)* f# L) `  P* ?5 \& ]. F# ?
pyautogui.moveTo(entry_position, duration=2)6 V4 c$ `* q/ X
pyautogui.click(entry_position)) v2 p9 s4 I& ]  ]: S* M
pyautogui.typewrite([*list('zhengzai '), *list('jinxing '), 'shift', *list('pyautogui'), 'shift', *list('shiyan '), 'enter'], 0.1) # 第二个参数为按下每一个字母的间隔,可选% r* k, a8 g# E" P) N4 ~0 {: I
</code></pre>
0 N' s$ s$ b6 G9 @6 c" C" x3 t<p>看看效果:<br>2 v( P9 F+ |9 Y
<img src="https://img-blog.csdnimg.cn/88126f4b522c4584a3de07c4c35a808d.gif" ><br>
& o# f  V2 p$ R* @: }4 q  b当然,若是你要输入的内容实在很多,又嫌麻烦,可以通过复制粘贴来实现:</p>  h! r% }+ r5 b8 d# o' I
<pre><code class="language-python">import pyperclip
, \4 x. X  r1 \4 n/ Y; j! J$ W0 m, h) T0 W7 N  k1 K# ]+ a% {
pyperclip.copy('正在进行发中文试验,看到请忽略,更不要骂傻逼') # 复制- b' g4 m+ {( @3 e2 [: g
pyautogui.hotkey('ctrl', 'v') # 按下组合键的方法,ctrl+v粘贴
9 M% ]3 K* U& Qpyautogui.press('enter') # 按下按键0 J. R) o3 M/ C" k8 E* r  k
</code></pre>. J! ^9 W" @. F# Z
<p><img src="https://img-blog.csdnimg.cn/d178d71e5d564893a1aee8672841c76a.gif" ><br>. z5 j  s& s, j9 ]( V
这样,我们便完成了自动发送微信消息的功能了。</p>
8 G; k, y/ r9 t# f. K<h1 id="apscheduler">apscheduler</h1>
) I1 [7 }# P. E* l8 p9 t<p>APScheduler 是一个Python库,可实现延迟调度要执行Python代码的功能,可以只执行一次,也可以定期执行。可以随时添加新任务或删除旧任务。能够十分方便地进行定时任务。</p>
" P% x" I" A+ L+ W7 U<pre><code class="language-python">scheduler = BlockingScheduler() # 实例化一个调度器5 }5 S9 c$ l4 G* B3 D
scheduler.add_job(main, 'date', run_date=datetime(2021, 8, 18, 24, 00, 00)) # 添加任务" ^; c$ K) ?$ Y& ^3 Z  I
scheduler.start(). n5 [+ p0 D% t: U# p- y
</code></pre>6 P7 Z' \$ j: N: C
<p>add_job 方法在这里传了 3 个参数,第一个为到时间后要执行的函数,第二个为触发器的类型。这里选用的是 date 触发器,特定的时间点触发,作业任务只会执行一次。第三个参数 run_date 就是执行的时间。在这前我已经把自动发送消息的代码封装为了 main 函数,只需到时后调用即可。</p>
* c) L( f. p3 }( J) r3 R9 V# t<h1 id="完整代码">完整代码</h1>  A+ Q2 S. l" C0 |
<pre><code class="language-python">import pyautogui
7 _7 F0 [+ a5 @import pyperclip
3 ~7 g0 U+ N( b$ efrom datetime import datetime$ O! d6 ]$ K+ v$ t1 i2 k
from apscheduler.schedulers.blocking import BlockingScheduler
: k- x/ S" V9 e5 d5 b: q8 ]. U$ W7 [
def main():
% W+ x/ E5 Z, u. a- j' `        pyautogui.PAUSE = 0
1 G4 i* N) i1 R; j+ L' F, ~5 G6 y0 {( y( n% U' q; j" }/ k
        icon_position = pyautogui.Point(x=148, y=879) # 任务栏图标位置
9 B# H/ m6 ~' Z) V) k        entry_position = pyautogui.Point(x=174, y=751) # 输入框位置
$ h* D1 y) d# o8 T  q6 Z0 E. V8 ~1 {8 A0 ^1 ^' Y
        pyautogui.moveTo(icon_position, duration=1) # duration为执行时长,可选2 ?$ }6 h% x" c/ ]8 y1 R
        pyautogui.click(icon_position)
( R# F3 p8 m8 E2 l/ D        pyautogui.moveTo(entry_position, duration=0.7)
- h: E  C+ ?9 |+ s7 z+ I        pyautogui.click(entry_position), ~: b. D6 N$ N7 x5 r6 {
        pyperclip.copy('快去睡觉')+ V& [. a- F- c  ]
        pyautogui.hotkey('ctrl', 'v')- j  q, j% g+ F$ O: E' ^5 T, ]5 |
        pyautogui.press('enter')
  o2 @2 J9 i+ u* a/ G    pyperclip.copy('笨猪')" T# S6 r5 _; ~' r' [
        pyautogui.hotkey('ctrl', 'v')' f& d. c3 I5 ?0 O
        pyautogui.press('enter')2 D/ P; X. V# b+ C9 u
    : q' v, k/ @' K" S: I. j( V
scheduler = BlockingScheduler() # 实例化
6 k' {0 T, P' q+ \3 pscheduler.add_job(main, 'date', run_date=datetime(2021, 8, 18, 24, 00, 00)) # 添加任务
7 ]: t- N: f6 J2 y( ?2 ascheduler.start()4 P% ~+ ?* n4 V3 {, Z1 r/ t
</code></pre>( w) D+ I' l9 ^7 G# L
<p>完成啦!现在可以去睡觉了。</p>
: s; m8 n. u% l: J# _, _% z! J<h1 id="结果">结果</h1>
+ m5 i% w  d0 \6 z+ g" b4 {3 u' A<p>第二天早上起床,我被我妈妈骂了一顿,问我为什么午夜12点的时候电脑还亮着,而且还在自己发微信!</p>% A' y( p7 Y4 z) s+ y
<p>不过,好在女朋友没丢,我成功完成了女朋友的任务!<br>( R+ E  z2 B3 Z7 d2 I3 V  o- `
<img src="https://img-blog.csdnimg.cn/111c7494bd6e4371bbd541529c48b776.gif" ></p>" g4 E4 B  f9 p9 I6 j
<hr>
1 m) ^6 a& m2 M8 N+ ~<h1 id="---the-end---">-- the End --</h1>- L3 ^$ d8 `' a" }
<p>好啦,这篇文章就到这里了。以上就是我分享的全部内容,感谢阅读!</p>- r: i7 Y, g; V4 h
<p>打个小广告:作者CSDN博客主页:<br>7 F5 m9 ^6 X# J
<a  href="https://blog.csdn.net/weixin_52132159">https://blog.csdn.net/weixin_52132159</a></p>
/ b: [' s3 ^0 W) a' X8 q/ L% C' z+ Z0 p- ]" b3 Y1 ~
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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