飞雪团队

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

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

[复制链接]

7903

主题

7991

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26039
发表于 2022-2-12 14:35:43 | 显示全部楼层 |阅读模式
0 B1 I2 B9 ]' v
<p>事情是这样的:今天晚上,女朋友让我十二点催她睡觉。<br>5 O% {( h, @- l
<img src="https://img-blog.csdnimg.cn/28feb6811cc142f5b0e38e81e73d5043.png" ><br>
% R7 U$ N0 y- m! C: Q不过,可是我实在太困了,熬不下去…… 是吧?女朋友哪有睡觉重要?<br>0 p7 M- r# P6 |  U$ I  G& C! N
<img src="https://img-blog.csdnimg.cn/ddf8351a359e45218952d4d3962ff278.jpg" ><br>
3 N5 X0 k! l/ L+ c3 v: m  r但,女朋友的命令,我是不敢违抗的……<br>
6 Y$ \7 [7 R; w4 e- I  L<img src="https://img-blog.csdnimg.cn/87fe69f100904f4782a720254ef49191.png" ><br>
* @9 s" y5 q# X8 z8 o5 F但是睡觉也不能缺!</p>
6 j5 Y! o0 z* M, M9 ]8 V- Z<p>这时候我们该怎么办呢?是时候让Python登场了!</p>
! m9 p- T. H0 C' o% C. L<h1 id="python登场">Python登场</h1>& Z' j# B( a% c7 ~
<p>这次我们来做一个自动发送微信的程序,在深夜十二点的时候给女朋友发去消息,也算是尽了一个男朋友的义务了。</p># L2 H7 q4 l4 F! ]: e6 c
<h2 id="安装和导入">安装和导入</h2>
! L' P. d1 `7 n3 o<p>我们需要两个模块:<strong>apscheduler</strong>,<strong>pyautogui</strong></p>
  x# l% o0 Y8 w<p>快捷键 Windows+r 打开运行控制框,输入 cmd,进入命令行,输入:</p>
7 U. x2 i4 }% M% C<pre><code class="language-p">pip install apscheduler
8 ^; Y" W( P4 B3 h( K. Hpip install pyautogui
1 y; f) c9 H( I) ]: P</code></pre>
! D$ x  m+ y3 o! z2 @<p>导入:</p>6 |+ M0 v" W$ m
<pre><code class="language-python">import pyautogui5 v7 i: \4 [" q9 Y* ?, t8 Z
from datetime import datetime9 q+ Z6 M4 }* g
from apscheduler.schedulers.blocking import BlockingScheduler # 阻塞当前进程的调度器9 B" H5 c+ z" D, V! v' G! K
# blocking类型调度器会阻塞当前进程,若你想要后台运行的调度器,可以使用以下代码:' |7 n+ s9 R1 |) _  Q4 V- H1 u! V0 w
# from apscheduler.schedulers.background import BackgroundScheduler
1 w; x* W; r+ |' C/ Y0 c</code></pre># D- d, a9 r4 _6 |& F' d/ z
<h1 id="pyautogui">pyautogui</h1>0 Y# o) {% ~' H9 y" R: D
<p>首先我们来实现自动发送消息</p>; K2 J1 z2 p1 Z: B9 e) `. [  I- Z  P
<p>pyautogui 是一个非常强大的库,可以操作鼠标和键盘。我们将用它来完成自动操作电脑。</p>
3 G% d5 M* L2 u4 ^$ E+ M! @# D9 I. P<p>先来做一些基本设置:</p>% x0 T: J& K8 U7 v, M
<pre><code class="language-python">pyautogui.PAUSE = 1 # 设置每一步操作的间隔(秒),可防止操作太快
: |: J% s. Y, {7 Z! H</code></pre>6 v& t( p, j* r1 E: r8 V8 D
<p>然后我们登录微信,最小化。</p>
, f4 j5 _8 K' I<p>接下来我们把鼠标放到微信的任务栏图标上,运行以下语句,获取此时光标的坐标,返回一个Point对象:</p>
) C) I3 s4 ^2 `<pre><code class="language-python">print(pyautogui.position()) # 打印坐标,Point(x=148, y=879)
& v7 X+ R" W" nicon_position = pyautogui.position() # Point(x=148, y=879)0 i: {8 r1 F) X, S9 ?
</code></pre>- {3 {- o8 t% v. X8 A
<p>打开微信,选择女朋友的回话窗口,将鼠标放在输入框上,同样获取光标坐标,为了将焦点锁定到输入框以方便待会的输入。<br>
1 a! u* C( _1 x" t, |<img src="https://img-blog.csdnimg.cn/4809ee2ce93b40a0828717f811b02599.png" ></p>- U! L! A5 o& r. j
<pre><code class="language-python">print(pyautogui.position()) # 打印坐标,Point(x=174, y=751): b8 P+ b* E! V: W
entry_position = pyautogui.position() # Point(x=174, y=751)
- B6 s1 q0 b* q5 t</code></pre>' p% S# E: |0 e7 B
<p>接下来,控制程序依次点击这两个点:</p>. @# b+ [! I7 Y0 [7 L
<pre><code class="language-python">pyautogui.click(icon_position) # 默认左键单击; F* w5 H3 p4 L' b! R
# pyautogui.click(148, 879)) \$ B3 S! C0 ]) p0 {
pyautogui.click(entry_position)! R0 q# ]/ i* p% D5 k; F' q
# pyautogui.click(174, 751)
; O9 A4 r2 U9 E6 o1 R6 ?7 c1 H- T</code></pre>4 F! S' u/ I( I
<p>打开微信并锁定焦点后,我们开始输入文本。</p>% z1 W+ E9 p! R' K
<p>输入文本可以有两种方式:</p>/ D' D& W( @% a+ d. ^
<ul>& [6 k* Q6 F; z- L% @
<li>
1 P$ R) X9 n( Y+ j<p><code>pyautogui.typewrite(['o', 'n', 'e', 'enter'])</code></p>
  n4 v: s! n7 B8 l& |! [9 P2 p, H<p>在方法中传入一个列表,里面每一元素都是单个字母或特殊按键</p>& z1 ^3 }( W  w0 ]+ z4 j. p
</li>
* O$ j4 t- D7 s<li>
3 f2 I, s! b4 D) d<p><code>pyautogui.typewrite('You can type multiple letters in this way')</code></p>
; f3 j& e* C3 U) L1 z) s6 k  {<p>传入字符串,但不能同时打印字母和特殊按键。</p>6 G2 Z, J: G: ^- h- q# K' M0 V+ [
</li>; K0 r1 Y: ^* a/ R# ^9 z3 D8 p
</ul>
8 `6 W1 {8 h$ @2 X" n/ i$ q<p>这两种方式都不能直接输入中文,所以只能依靠你的输入法来输入中文了。</p>* k) y. X8 m$ ?, P+ b
<pre><code class="language-python">pyautogui.typewrite([*list('zhengzai '), *list('jinxing '), 'shift', *list('pyautogui'), 'shift', *list('shiyan '), 'enter'], 0.1) # 第一个参数是输入文本,第二个是输入每个字符的间隔时间* u# ^# h! A5 c) b
</code></pre>; t! W7 g7 j! L1 [5 `& h) J1 m" K
<p>为了使我们的操作更加 <s>人模狗样</s> 像人的操作,我么来加上移动鼠标的代码:</p>% W- w* K" s8 g
<pre><code class="language-python">pyautogui.moveTo(icon_position, duration=2) # duration为执行时长,可选# Y: s! u9 G. Y/ e. b
pyautogui.click(icon_position)
9 M1 ^5 h# j0 R' Epyautogui.moveTo(entry_position, duration=2)  K. L% ]& _  [0 o( g
pyautogui.click(entry_position)
9 a3 O% o4 i9 ]8 G8 epyautogui.typewrite([*list('zhengzai '), *list('jinxing '), 'shift', *list('pyautogui'), 'shift', *list('shiyan '), 'enter'], 0.1) # 第二个参数为按下每一个字母的间隔,可选- l9 c+ l! K$ T9 k/ k+ ^
</code></pre>! Z* E/ j; {, t
<p>看看效果:<br>( g5 G9 O# f$ {) l: A% i$ W
<img src="https://img-blog.csdnimg.cn/88126f4b522c4584a3de07c4c35a808d.gif" ><br>& n& D1 p1 c" K# U% V# u9 f, R" q
当然,若是你要输入的内容实在很多,又嫌麻烦,可以通过复制粘贴来实现:</p>
( W9 }6 |" S3 C. G0 i" K<pre><code class="language-python">import pyperclip4 i! ~0 M+ p( j* t" j$ g1 E, _4 q
1 {, I' n2 B7 u" ]
pyperclip.copy('正在进行发中文试验,看到请忽略,更不要骂傻逼') # 复制
6 F4 e3 a# S  O+ Bpyautogui.hotkey('ctrl', 'v') # 按下组合键的方法,ctrl+v粘贴3 E* C) N. n) |" O7 h
pyautogui.press('enter') # 按下按键7 |8 Q$ |, g0 d/ u  z* C
</code></pre>6 M/ q8 L; E6 i9 F2 X3 [& E& T
<p><img src="https://img-blog.csdnimg.cn/d178d71e5d564893a1aee8672841c76a.gif" ><br>
! X# g) q( Y* ]. u) y$ \5 K这样,我们便完成了自动发送微信消息的功能了。</p>
$ o+ k6 v. l3 w; K<h1 id="apscheduler">apscheduler</h1>
  T5 l# c# t/ D5 ^<p>APScheduler 是一个Python库,可实现延迟调度要执行Python代码的功能,可以只执行一次,也可以定期执行。可以随时添加新任务或删除旧任务。能够十分方便地进行定时任务。</p>) t2 {& m$ Q% A; V. q
<pre><code class="language-python">scheduler = BlockingScheduler() # 实例化一个调度器
' q; m* W2 }! x0 ?8 \scheduler.add_job(main, 'date', run_date=datetime(2021, 8, 18, 24, 00, 00)) # 添加任务
2 h: b  h3 W& \! J5 E' g/ Cscheduler.start()
/ Q5 X' R8 t9 d4 R$ D</code></pre>
  x, N( ?' S2 N/ n- r3 _% t, t<p>add_job 方法在这里传了 3 个参数,第一个为到时间后要执行的函数,第二个为触发器的类型。这里选用的是 date 触发器,特定的时间点触发,作业任务只会执行一次。第三个参数 run_date 就是执行的时间。在这前我已经把自动发送消息的代码封装为了 main 函数,只需到时后调用即可。</p>
. v) Q- l" e7 b$ d<h1 id="完整代码">完整代码</h1>; Z+ Z0 g9 ]. Y; ]* ^; s
<pre><code class="language-python">import pyautogui( y  W: W/ m$ L, ~2 m$ C
import pyperclip
8 ]6 F/ \2 i3 W' J7 `9 wfrom datetime import datetime# ^4 _6 Y% y. ^. H0 s
from apscheduler.schedulers.blocking import BlockingScheduler
! ~+ Y) K' [3 N/ y: n+ G$ C' s9 I- U( J. G4 J: ~, A% J9 x3 v/ E" w6 {
def main():2 B5 P0 h9 o9 O* G$ H
        pyautogui.PAUSE = 0. k7 J4 _4 ]; W( J. o" g

/ x& ~" y" m' j  d2 M        icon_position = pyautogui.Point(x=148, y=879) # 任务栏图标位置) M  e8 _& U. m( C; u) W6 ^; k
        entry_position = pyautogui.Point(x=174, y=751) # 输入框位置# @- D8 l- y5 [/ F

! b  ^# Q2 C$ H# X5 m8 T2 s        pyautogui.moveTo(icon_position, duration=1) # duration为执行时长,可选
2 n, }  j' [3 O4 \# r6 a        pyautogui.click(icon_position)5 Q* q& Q6 O- o7 n) p
        pyautogui.moveTo(entry_position, duration=0.7)0 o- j  i3 A# a+ s) c: D) @$ V
        pyautogui.click(entry_position)" U0 N. X" Y' H0 H: y
        pyperclip.copy('快去睡觉')
: e4 F& {3 W2 v3 G6 A; u        pyautogui.hotkey('ctrl', 'v')1 k: B1 ?/ O# X; w2 R# d* S3 p( T
        pyautogui.press('enter')3 |4 W; P; D5 y9 R9 O
    pyperclip.copy('笨猪')
. a( N3 h# y- N- p0 U/ ?        pyautogui.hotkey('ctrl', 'v')* c4 ]" `& w8 O: Q3 L
        pyautogui.press('enter')
* ]" }2 U1 p1 J1 s0 k  \8 |    . R) m/ D$ b; [2 @
scheduler = BlockingScheduler() # 实例化' D& G5 D( v: K/ C# F
scheduler.add_job(main, 'date', run_date=datetime(2021, 8, 18, 24, 00, 00)) # 添加任务
0 A8 K3 I3 m7 M" m9 Hscheduler.start()
& q% N$ q) H" i$ z</code></pre>3 k- e" a0 v4 e9 A* q0 c  t, B
<p>完成啦!现在可以去睡觉了。</p>4 T( b9 y3 f, x
<h1 id="结果">结果</h1>3 d; a# ?' F' m1 I
<p>第二天早上起床,我被我妈妈骂了一顿,问我为什么午夜12点的时候电脑还亮着,而且还在自己发微信!</p>
; [1 X/ m$ r) u: J! L<p>不过,好在女朋友没丢,我成功完成了女朋友的任务!<br>, Y+ t0 j) J& Q
<img src="https://img-blog.csdnimg.cn/111c7494bd6e4371bbd541529c48b776.gif" ></p>
; A/ ^2 K' T0 O<hr>
  s, ~+ P: I2 ~<h1 id="---the-end---">-- the End --</h1>' c0 j5 o: n  i: `/ B* ~5 M6 d) ?
<p>好啦,这篇文章就到这里了。以上就是我分享的全部内容,感谢阅读!</p>
5 j: r: A, Q8 d2 H3 |8 `7 [9 }( V<p>打个小广告:作者CSDN博客主页:<br>
# O2 e4 k1 t/ w) d3 b. U<a  href="https://blog.csdn.net/weixin_52132159">https://blog.csdn.net/weixin_52132159</a></p>" H$ U; P$ I9 a

% s9 C7 D1 q  }. \6 h
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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