飞雪团队

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

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

[复制链接]

7900

主题

7988

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

* T* Q6 s$ |" c  I4 A, K! O<p>事情是这样的:今天晚上,女朋友让我十二点催她睡觉。<br>2 F+ s6 _& V* F0 S; B& n2 v
<img src="https://img-blog.csdnimg.cn/28feb6811cc142f5b0e38e81e73d5043.png" ><br>
4 {  X6 Q7 p0 p' f: R: @' v不过,可是我实在太困了,熬不下去…… 是吧?女朋友哪有睡觉重要?<br>
# `) H5 M$ G+ o/ |' L- L% L<img src="https://img-blog.csdnimg.cn/ddf8351a359e45218952d4d3962ff278.jpg" ><br>
& F! u, s* y: {1 S但,女朋友的命令,我是不敢违抗的……<br>( K; q8 d6 ~" V5 @4 E
<img src="https://img-blog.csdnimg.cn/87fe69f100904f4782a720254ef49191.png" ><br>
; {7 F$ W/ Z) x5 b但是睡觉也不能缺!</p>  q* ^% q9 R- }" M4 a: q; H
<p>这时候我们该怎么办呢?是时候让Python登场了!</p>
$ d- _. V) X4 o6 s5 B<h1 id="python登场">Python登场</h1>
1 E8 ^+ k1 g: O4 T<p>这次我们来做一个自动发送微信的程序,在深夜十二点的时候给女朋友发去消息,也算是尽了一个男朋友的义务了。</p>
( |4 l( P7 U' b2 Q) G6 v<h2 id="安装和导入">安装和导入</h2>: U5 K2 J# T. L" G
<p>我们需要两个模块:<strong>apscheduler</strong>,<strong>pyautogui</strong></p>
8 J7 A3 X* U+ B! q3 ^. x' p<p>快捷键 Windows+r 打开运行控制框,输入 cmd,进入命令行,输入:</p>
( q9 C- K' O; l) h& |8 E<pre><code class="language-p">pip install apscheduler8 c% F+ r* ~/ X& G- u$ k' }. |1 d0 g
pip install pyautogui" T0 Q, y7 `9 f9 N7 C/ D
</code></pre>! W  A9 F- }0 A* v4 p# ~( S
<p>导入:</p>
7 n" D. b1 K+ w; _3 e<pre><code class="language-python">import pyautogui
0 `, D% x6 s7 a6 Yfrom datetime import datetime9 Q2 Z1 \0 N: y8 g4 h
from apscheduler.schedulers.blocking import BlockingScheduler # 阻塞当前进程的调度器
* t% |1 B5 G! B1 h6 c- Y- z% e# blocking类型调度器会阻塞当前进程,若你想要后台运行的调度器,可以使用以下代码:
, n; f" I+ v% M2 ^# from apscheduler.schedulers.background import BackgroundScheduler
( K# @2 f0 R# l# x6 m9 ^</code></pre>9 t, |0 Z1 u2 ]+ ^% n
<h1 id="pyautogui">pyautogui</h1>
2 m6 }* V" X. C& y<p>首先我们来实现自动发送消息</p>0 m! {7 y+ m' Q
<p>pyautogui 是一个非常强大的库,可以操作鼠标和键盘。我们将用它来完成自动操作电脑。</p>
5 G) `) R  u0 ]<p>先来做一些基本设置:</p>4 A) l- l) }, f. g
<pre><code class="language-python">pyautogui.PAUSE = 1 # 设置每一步操作的间隔(秒),可防止操作太快
* c9 y  l- J* O9 W+ E; E</code></pre>
( x7 t3 s- e6 ^8 }% `# W7 S<p>然后我们登录微信,最小化。</p>' [" C& n: Y8 \) O- d+ X
<p>接下来我们把鼠标放到微信的任务栏图标上,运行以下语句,获取此时光标的坐标,返回一个Point对象:</p>& F2 w+ [8 @% |
<pre><code class="language-python">print(pyautogui.position()) # 打印坐标,Point(x=148, y=879)* N7 e" c! r  J4 a
icon_position = pyautogui.position() # Point(x=148, y=879)% i7 H9 j: n! x( D
</code></pre>8 C- X% {; v: X1 v/ r, i* J
<p>打开微信,选择女朋友的回话窗口,将鼠标放在输入框上,同样获取光标坐标,为了将焦点锁定到输入框以方便待会的输入。<br>) r3 l- G3 ]0 B9 M- X9 z
<img src="https://img-blog.csdnimg.cn/4809ee2ce93b40a0828717f811b02599.png" ></p>; I3 {* K/ v* h( D, {
<pre><code class="language-python">print(pyautogui.position()) # 打印坐标,Point(x=174, y=751)
- ^1 @9 q# |3 \  W  l0 Z2 Rentry_position = pyautogui.position() # Point(x=174, y=751)
( {) D/ n/ w' F" [0 S- u</code></pre>
" H/ B7 x0 e! l<p>接下来,控制程序依次点击这两个点:</p>
' z4 R" a( @( C1 J% s/ O8 `$ Z<pre><code class="language-python">pyautogui.click(icon_position) # 默认左键单击
- {! x' A  w+ w+ R, ]1 J# pyautogui.click(148, 879)( A* H* }. A7 m3 a: V, h) w1 M+ g
pyautogui.click(entry_position)
, x& |/ a! w5 J' {# pyautogui.click(174, 751)
, l2 f! N5 ~2 u9 q  K( y0 n</code></pre>5 l  y( {* y5 {# ^7 ]) o
<p>打开微信并锁定焦点后,我们开始输入文本。</p>) c, d9 ~$ v+ r, j/ F) _
<p>输入文本可以有两种方式:</p>) k* i& o& M" W" l. H3 q
<ul>
5 w9 V6 h7 G) a, d4 S) p4 C. b! P<li>( V8 Q6 U# x/ f8 m
<p><code>pyautogui.typewrite(['o', 'n', 'e', 'enter'])</code></p>% B; X+ j% V7 u8 T* P3 \* g3 r
<p>在方法中传入一个列表,里面每一元素都是单个字母或特殊按键</p>
' @! i3 d2 i* N2 {</li>; X" t8 U! ~( ]3 h# i2 j1 g, N6 _
<li>
# O# W+ b' h+ O; L' W; O; b1 `<p><code>pyautogui.typewrite('You can type multiple letters in this way')</code></p>
+ x# z) f" |- {# M5 ~: e6 {<p>传入字符串,但不能同时打印字母和特殊按键。</p>
0 L% @+ r6 _9 A</li>6 K: d3 r4 f$ a# p; a, x! G
</ul>: G3 l( o( }9 {6 s( G4 |( A9 b
<p>这两种方式都不能直接输入中文,所以只能依靠你的输入法来输入中文了。</p>2 i! f- Q$ |0 I  \8 a
<pre><code class="language-python">pyautogui.typewrite([*list('zhengzai '), *list('jinxing '), 'shift', *list('pyautogui'), 'shift', *list('shiyan '), 'enter'], 0.1) # 第一个参数是输入文本,第二个是输入每个字符的间隔时间" L. l: T2 ]. Z' Y
</code></pre>
* e+ G+ E3 f5 K* `3 e<p>为了使我们的操作更加 <s>人模狗样</s> 像人的操作,我么来加上移动鼠标的代码:</p>
4 I% \+ z6 y6 W, C0 {6 A<pre><code class="language-python">pyautogui.moveTo(icon_position, duration=2) # duration为执行时长,可选+ O; I5 x( f: U: d6 S+ Q
pyautogui.click(icon_position)
" u/ [' r1 [8 o5 [' P4 wpyautogui.moveTo(entry_position, duration=2): M" L) Z( z0 J- H: c
pyautogui.click(entry_position)
8 M+ ]0 @( Q; l  gpyautogui.typewrite([*list('zhengzai '), *list('jinxing '), 'shift', *list('pyautogui'), 'shift', *list('shiyan '), 'enter'], 0.1) # 第二个参数为按下每一个字母的间隔,可选2 B" {3 r8 o, u' r
</code></pre>0 b; f) [* p+ M3 t
<p>看看效果:<br>
& A* A& }2 L1 `8 W; w2 c, u8 {' V) T<img src="https://img-blog.csdnimg.cn/88126f4b522c4584a3de07c4c35a808d.gif" ><br>! E& ~8 _5 v$ H
当然,若是你要输入的内容实在很多,又嫌麻烦,可以通过复制粘贴来实现:</p>! Q2 @5 }% H+ F# Q$ A
<pre><code class="language-python">import pyperclip+ c' M6 p% o( B$ ]7 o
5 k6 R0 Z- Z9 e( G! I. ]0 f4 n8 Y
pyperclip.copy('正在进行发中文试验,看到请忽略,更不要骂傻逼') # 复制2 s8 O8 @: }# P* G9 p- J
pyautogui.hotkey('ctrl', 'v') # 按下组合键的方法,ctrl+v粘贴
2 T4 [& E+ U) x9 dpyautogui.press('enter') # 按下按键
& l& |6 o' ~. @2 d" c% m" o</code></pre>9 h+ ]0 r, D: ~) M
<p><img src="https://img-blog.csdnimg.cn/d178d71e5d564893a1aee8672841c76a.gif" ><br>/ R* {' Y6 T$ l; Y# R# r  s* W4 _* L
这样,我们便完成了自动发送微信消息的功能了。</p>5 X" l9 q+ H, |2 G, c4 T; L# u# @1 A
<h1 id="apscheduler">apscheduler</h1>! b1 U# K* ]& Y. L4 |, L
<p>APScheduler 是一个Python库,可实现延迟调度要执行Python代码的功能,可以只执行一次,也可以定期执行。可以随时添加新任务或删除旧任务。能够十分方便地进行定时任务。</p>
9 r& v3 c7 q& F8 a<pre><code class="language-python">scheduler = BlockingScheduler() # 实例化一个调度器
0 L5 E: I& ^# G8 ]* ~6 Dscheduler.add_job(main, 'date', run_date=datetime(2021, 8, 18, 24, 00, 00)) # 添加任务; u2 N* Y% m2 s) |, O' r6 w
scheduler.start()
$ s% {. c) S% g7 g0 n& n</code></pre>+ s; C* t' m/ B" x9 w/ w2 ~1 |1 ~
<p>add_job 方法在这里传了 3 个参数,第一个为到时间后要执行的函数,第二个为触发器的类型。这里选用的是 date 触发器,特定的时间点触发,作业任务只会执行一次。第三个参数 run_date 就是执行的时间。在这前我已经把自动发送消息的代码封装为了 main 函数,只需到时后调用即可。</p>
6 u' Z1 \9 m5 ^+ y3 H) x% e1 K<h1 id="完整代码">完整代码</h1>
* ^! `9 Q, _' K' U  d% S' s<pre><code class="language-python">import pyautogui4 V7 R3 b( C2 v8 Y
import pyperclip
6 w2 B% ?4 M2 w1 y# v4 Rfrom datetime import datetime% ~, Q7 s1 o1 R7 n/ v1 g% u
from apscheduler.schedulers.blocking import BlockingScheduler; i' g: a/ A4 |8 ], a
! k2 ]9 I  |7 Y5 U7 o4 p) O
def main():
# \/ U3 w. Y: ~) L8 B8 T4 \6 B9 n        pyautogui.PAUSE = 07 n- ?4 A# v8 \
7 H% _& Q" T4 |
        icon_position = pyautogui.Point(x=148, y=879) # 任务栏图标位置
) v% s3 V( }0 `: U. f+ E( E        entry_position = pyautogui.Point(x=174, y=751) # 输入框位置
8 }$ A% [, v) M4 m
. c) K7 n' j3 N% u4 _        pyautogui.moveTo(icon_position, duration=1) # duration为执行时长,可选' P* |/ c) P5 Z, j9 z  V
        pyautogui.click(icon_position)
0 z0 E+ D2 [6 o( M        pyautogui.moveTo(entry_position, duration=0.7)
; E+ g1 Y, s! b) a+ v        pyautogui.click(entry_position)
, k8 j; E$ Z, @1 Y        pyperclip.copy('快去睡觉')
' w4 m& E; _7 T7 P( ~& S        pyautogui.hotkey('ctrl', 'v')
& W; W4 m  m! W5 O. L% i# Q1 j2 Z0 r; t        pyautogui.press('enter'): U0 ~; M7 g4 X  f9 [8 i4 E
    pyperclip.copy('笨猪'). B; h, e4 Y6 S1 q, {2 E
        pyautogui.hotkey('ctrl', 'v')
) J3 z% L& ?! z) U: l  Y        pyautogui.press('enter'), h. }5 j4 V- g) Q& W+ o
    ) S' w' K0 o+ }/ _: q" p  A: g
scheduler = BlockingScheduler() # 实例化
" u- O$ v" |. w. k( _scheduler.add_job(main, 'date', run_date=datetime(2021, 8, 18, 24, 00, 00)) # 添加任务. z5 U6 W7 W# H7 o; ~+ m+ h9 n, q
scheduler.start()
( a" `6 G( x) {6 F! M</code></pre>
  l9 n4 c6 B  J/ W3 {<p>完成啦!现在可以去睡觉了。</p>
  X! L  u. q- d" I3 j<h1 id="结果">结果</h1>
3 n8 |2 m+ [; C% ^; C<p>第二天早上起床,我被我妈妈骂了一顿,问我为什么午夜12点的时候电脑还亮着,而且还在自己发微信!</p>9 `# R" V( `2 l  b0 Z: l/ t# [
<p>不过,好在女朋友没丢,我成功完成了女朋友的任务!<br>5 K/ y6 n+ E7 z& o) i* a- o; y
<img src="https://img-blog.csdnimg.cn/111c7494bd6e4371bbd541529c48b776.gif" ></p>
: H  x9 F: K3 t4 B<hr>
! F6 Q! A" r' D<h1 id="---the-end---">-- the End --</h1>1 v, X8 {5 x- {8 A. T" T
<p>好啦,这篇文章就到这里了。以上就是我分享的全部内容,感谢阅读!</p>2 C6 o4 e0 |+ t3 X
<p>打个小广告:作者CSDN博客主页:<br>; ?/ U8 F9 F) i
<a  href="https://blog.csdn.net/weixin_52132159">https://blog.csdn.net/weixin_52132159</a></p>
5 O8 r! I5 M: w1 G+ a- x! V2 Y; r7 z7 j! S8 T0 X
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-11-21 10:28 , Processed in 0.067300 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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