飞雪团队

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

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

[复制链接]

7896

主题

7984

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

; |- e( W$ _) A) h5 w( W- i) x/ E<p>事情是这样的:今天晚上,女朋友让我十二点催她睡觉。<br>
# K4 g, {" r' d<img src="https://img-blog.csdnimg.cn/28feb6811cc142f5b0e38e81e73d5043.png" ><br>
$ A3 m- r5 a( d& K4 \不过,可是我实在太困了,熬不下去…… 是吧?女朋友哪有睡觉重要?<br>
* B& @2 j$ n% R, Q, @9 O<img src="https://img-blog.csdnimg.cn/ddf8351a359e45218952d4d3962ff278.jpg" ><br>
2 \! u( t; q8 b3 ~2 d2 \但,女朋友的命令,我是不敢违抗的……<br>
4 C6 o8 L) v1 b9 d& P+ W" b<img src="https://img-blog.csdnimg.cn/87fe69f100904f4782a720254ef49191.png" ><br>8 |0 H+ D3 w% @- P, e9 Q5 w
但是睡觉也不能缺!</p>9 m1 U( R( Y2 R% u
<p>这时候我们该怎么办呢?是时候让Python登场了!</p>1 G* j+ i4 N* r0 l& U
<h1 id="python登场">Python登场</h1>
4 h: h) }1 C9 b<p>这次我们来做一个自动发送微信的程序,在深夜十二点的时候给女朋友发去消息,也算是尽了一个男朋友的义务了。</p>
! }. s. C- {' o" t* w; L$ z5 n<h2 id="安装和导入">安装和导入</h2>0 C7 c6 ~' }! s& y" }4 t* }
<p>我们需要两个模块:<strong>apscheduler</strong>,<strong>pyautogui</strong></p>1 ^; @& G  D3 p  t) i. V
<p>快捷键 Windows+r 打开运行控制框,输入 cmd,进入命令行,输入:</p>& E- v0 o7 T5 u  v/ ]4 D
<pre><code class="language-p">pip install apscheduler) C# T1 ~# ]7 A2 z' N6 E
pip install pyautogui
2 |, {" w( X* v) q+ w" M* i. B$ D% X</code></pre># `9 P6 s: Z- u: P0 `
<p>导入:</p>
9 ^$ o# n" |' T<pre><code class="language-python">import pyautogui
) |# L0 e& @0 @& Y. Bfrom datetime import datetime# @6 O3 F" w/ Y' V
from apscheduler.schedulers.blocking import BlockingScheduler # 阻塞当前进程的调度器2 c" I% U: k4 w! h. n5 e- t
# blocking类型调度器会阻塞当前进程,若你想要后台运行的调度器,可以使用以下代码:
1 ~/ d9 s) r% r" F$ f1 T# from apscheduler.schedulers.background import BackgroundScheduler
0 |1 w! e1 Q' {7 R9 Z; [- h</code></pre>; `* q: Q3 {4 V, {
<h1 id="pyautogui">pyautogui</h1>
* @& s' `! y" d<p>首先我们来实现自动发送消息</p>
3 F* F& w* X( ]4 [<p>pyautogui 是一个非常强大的库,可以操作鼠标和键盘。我们将用它来完成自动操作电脑。</p>
$ u( x$ ]% F( q  j, @: ^<p>先来做一些基本设置:</p>. T  I" Z5 _! R
<pre><code class="language-python">pyautogui.PAUSE = 1 # 设置每一步操作的间隔(秒),可防止操作太快
0 Z+ y3 A; J% P% k</code></pre>0 O6 d0 @$ S* {' \/ X
<p>然后我们登录微信,最小化。</p>
1 U: w) y0 ]0 Z<p>接下来我们把鼠标放到微信的任务栏图标上,运行以下语句,获取此时光标的坐标,返回一个Point对象:</p>
) ~( X- c9 Q8 w: S/ f<pre><code class="language-python">print(pyautogui.position()) # 打印坐标,Point(x=148, y=879)# k% D7 Q% E/ ^5 ?9 v
icon_position = pyautogui.position() # Point(x=148, y=879)  F, o8 ^+ t! E" z5 M
</code></pre>/ A) N$ a. N. n6 u! c  W: k
<p>打开微信,选择女朋友的回话窗口,将鼠标放在输入框上,同样获取光标坐标,为了将焦点锁定到输入框以方便待会的输入。<br>
  n: k5 `. G  ^& \2 x: ?3 a<img src="https://img-blog.csdnimg.cn/4809ee2ce93b40a0828717f811b02599.png" ></p>% j# n9 \3 B( p1 n9 Y
<pre><code class="language-python">print(pyautogui.position()) # 打印坐标,Point(x=174, y=751)( h9 o  J# |6 g+ e8 [
entry_position = pyautogui.position() # Point(x=174, y=751)( H6 N. a& v9 b# x" Y+ ]
</code></pre>
6 G0 \0 [: _- {) e8 Z4 Z, M. o- T0 B3 `<p>接下来,控制程序依次点击这两个点:</p>
# |6 P5 @/ X2 v<pre><code class="language-python">pyautogui.click(icon_position) # 默认左键单击, \  H: N+ W" h+ P0 q
# pyautogui.click(148, 879)
& |0 O. @. i  w6 K; k7 g  gpyautogui.click(entry_position)
" ]# l! B& i6 ]$ C& i# pyautogui.click(174, 751)
4 ?5 X0 h- j9 ?! B5 J</code></pre>9 \* ]- {3 Y9 `
<p>打开微信并锁定焦点后,我们开始输入文本。</p># B% v- N( }6 l3 p
<p>输入文本可以有两种方式:</p>
# j9 ~* X% k& U<ul>! U0 ^1 P  A& o
<li>
( f/ J' A! f- E<p><code>pyautogui.typewrite(['o', 'n', 'e', 'enter'])</code></p>4 v& z0 n* J/ q) Z  t6 c
<p>在方法中传入一个列表,里面每一元素都是单个字母或特殊按键</p>
1 A7 F& L/ t/ q! r* C</li>
! y0 P3 H8 |, V' S9 M* [9 J<li>5 U% n2 }7 F" S% ~
<p><code>pyautogui.typewrite('You can type multiple letters in this way')</code></p>
/ Z% N$ U* a+ f: P2 K<p>传入字符串,但不能同时打印字母和特殊按键。</p>
+ f7 W1 J4 e3 C- |</li>
9 V: n4 K7 T8 Z  a) T" }  L</ul>4 C& e+ M  S3 U/ ?, n
<p>这两种方式都不能直接输入中文,所以只能依靠你的输入法来输入中文了。</p>+ Z0 P1 s! j# m2 U: f
<pre><code class="language-python">pyautogui.typewrite([*list('zhengzai '), *list('jinxing '), 'shift', *list('pyautogui'), 'shift', *list('shiyan '), 'enter'], 0.1) # 第一个参数是输入文本,第二个是输入每个字符的间隔时间: {7 `& x/ R: \. O$ ~! z
</code></pre>) W9 q# w( M& t- p6 f- ]( |/ G
<p>为了使我们的操作更加 <s>人模狗样</s> 像人的操作,我么来加上移动鼠标的代码:</p>
, U1 [$ D) E8 I1 m<pre><code class="language-python">pyautogui.moveTo(icon_position, duration=2) # duration为执行时长,可选' q# S: H+ v- |  J& U$ o5 J3 a5 K
pyautogui.click(icon_position)7 T, z- R, b. t2 V4 y, q/ Y
pyautogui.moveTo(entry_position, duration=2)
' C8 }- s1 E6 u* H  fpyautogui.click(entry_position)$ ]" y. Q# n5 {7 \/ \
pyautogui.typewrite([*list('zhengzai '), *list('jinxing '), 'shift', *list('pyautogui'), 'shift', *list('shiyan '), 'enter'], 0.1) # 第二个参数为按下每一个字母的间隔,可选
) S0 [) U. R, T2 J- d, Z</code></pre>7 \1 ^5 l3 c) Q  T% n* q# N, [8 q
<p>看看效果:<br>
" q: z( Q+ {6 p0 v% e<img src="https://img-blog.csdnimg.cn/88126f4b522c4584a3de07c4c35a808d.gif" ><br>! v) p3 s$ @+ z" J
当然,若是你要输入的内容实在很多,又嫌麻烦,可以通过复制粘贴来实现:</p>
5 r" g7 ]! z3 b7 `2 z# s/ X2 q<pre><code class="language-python">import pyperclip
' S9 \8 C5 @: Y: M. z' k
7 d: g* x/ ^6 }/ ?7 [- Gpyperclip.copy('正在进行发中文试验,看到请忽略,更不要骂傻逼') # 复制5 q: C* e! o% c1 c5 s" [
pyautogui.hotkey('ctrl', 'v') # 按下组合键的方法,ctrl+v粘贴
9 f2 l" c0 }4 M3 i8 W! qpyautogui.press('enter') # 按下按键
5 l; P' z% Q! V' _# ?1 r" q* A* h</code></pre>
+ {( o. a8 i7 e9 S* U<p><img src="https://img-blog.csdnimg.cn/d178d71e5d564893a1aee8672841c76a.gif" ><br>
# g& p. A& L. U& S8 z& I7 \这样,我们便完成了自动发送微信消息的功能了。</p>
, Y% e' X. K2 l& A<h1 id="apscheduler">apscheduler</h1>
3 u# b! [, ]* b  L2 s9 \; r: L& g, T<p>APScheduler 是一个Python库,可实现延迟调度要执行Python代码的功能,可以只执行一次,也可以定期执行。可以随时添加新任务或删除旧任务。能够十分方便地进行定时任务。</p>. |" V7 S; B9 X
<pre><code class="language-python">scheduler = BlockingScheduler() # 实例化一个调度器" {, s. {; V/ |' q
scheduler.add_job(main, 'date', run_date=datetime(2021, 8, 18, 24, 00, 00)) # 添加任务
: a! b; ]# r+ d0 [. c) g2 f/ b. rscheduler.start()
$ a& `4 ]- N. U</code></pre>
8 M1 b4 k4 v6 ]* f0 L4 a9 g<p>add_job 方法在这里传了 3 个参数,第一个为到时间后要执行的函数,第二个为触发器的类型。这里选用的是 date 触发器,特定的时间点触发,作业任务只会执行一次。第三个参数 run_date 就是执行的时间。在这前我已经把自动发送消息的代码封装为了 main 函数,只需到时后调用即可。</p>
) j1 S0 ?6 ?" X, u4 a<h1 id="完整代码">完整代码</h1>3 u) z# b+ N! v$ Y' }4 o1 Y% o) M
<pre><code class="language-python">import pyautogui( C  q: o+ ]/ a- V* h% ~
import pyperclip
( N) `% B5 E9 z6 Y. ofrom datetime import datetime$ o. f# M% P4 e! l* Y6 A' J
from apscheduler.schedulers.blocking import BlockingScheduler# W  A1 C2 z2 |0 k4 A" O. S( c
( q$ B9 Q. I9 @5 C- o, a- @
def main():
' T# X+ o5 A4 B! \0 N3 U        pyautogui.PAUSE = 0
. Q8 O+ l# ~3 x
3 c! C4 v& ]) H- y' R3 ]- r        icon_position = pyautogui.Point(x=148, y=879) # 任务栏图标位置1 @& s7 s- A/ W* }  l- Y
        entry_position = pyautogui.Point(x=174, y=751) # 输入框位置
* H3 {* o$ k) Q% X
; q! g4 ]) I: ~& I        pyautogui.moveTo(icon_position, duration=1) # duration为执行时长,可选
" a0 k9 D6 q% E' S/ C/ d* A        pyautogui.click(icon_position)
+ v( R+ p# c& a: H# n4 g' I        pyautogui.moveTo(entry_position, duration=0.7)+ v# \3 ]6 K" {
        pyautogui.click(entry_position); ?$ K! R) w% V( @
        pyperclip.copy('快去睡觉')
, P" r+ X% \. v) v1 k) ]5 F        pyautogui.hotkey('ctrl', 'v')/ Q* \$ ^: I4 c; ^) K7 n' e
        pyautogui.press('enter')3 w1 h9 \7 b4 k- `1 m' E
    pyperclip.copy('笨猪')( o8 u9 c2 S0 i! s" @0 N
        pyautogui.hotkey('ctrl', 'v')5 [8 {& g  S) {% {1 S
        pyautogui.press('enter'); J+ k. H  w' ?  ?9 n# T* {
    7 i' E1 _* c5 v3 \8 E! K7 P3 p
scheduler = BlockingScheduler() # 实例化8 p* ~# {: C1 G7 j
scheduler.add_job(main, 'date', run_date=datetime(2021, 8, 18, 24, 00, 00)) # 添加任务9 R' j, h, n3 t* d/ P  Z
scheduler.start()
) k+ O3 v3 c$ @+ T4 I</code></pre>
) B7 J/ t+ x/ s2 x<p>完成啦!现在可以去睡觉了。</p>
& ]+ ~( I' J! n/ k<h1 id="结果">结果</h1>; P/ x$ m) i  Q# B7 E2 [
<p>第二天早上起床,我被我妈妈骂了一顿,问我为什么午夜12点的时候电脑还亮着,而且还在自己发微信!</p>
9 Y5 s$ _6 x6 q0 ?* M<p>不过,好在女朋友没丢,我成功完成了女朋友的任务!<br>6 ~6 x: ^  Q. ^6 |2 H4 [6 z
<img src="https://img-blog.csdnimg.cn/111c7494bd6e4371bbd541529c48b776.gif" ></p>
% _7 |  i6 R1 D" h1 H<hr>
5 d* V/ n$ I1 d3 c<h1 id="---the-end---">-- the End --</h1>6 ]' Y! X0 ~" E3 t7 \
<p>好啦,这篇文章就到这里了。以上就是我分享的全部内容,感谢阅读!</p>
# k: A( b% S/ x+ V( r$ R3 n<p>打个小广告:作者CSDN博客主页:<br>
6 h: K$ [2 k: ^# p" `<a  href="https://blog.csdn.net/weixin_52132159">https://blog.csdn.net/weixin_52132159</a></p>
0 x9 M& `7 c0 l% m* i  X! F# X! X- [' @6 T
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-11-20 02:42 , Processed in 0.070718 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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