Python定时点击桌面程序,可修改点击间隔

Posted 狂奔小蜗牛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python定时点击桌面程序,可修改点击间隔相关的知识,希望对你有一定的参考价值。

import pyautogui
import tkinter as tk

class Clicker:
    def __init__(self):
        self.root = tk.Tk()
        self.root.title("桌面点击程序")
        self.root.geometry("300x150")

        self.interval = tk.StringVar()
        self.interval.set("10")

        self.interval_label = tk.Label(self.root, text="间隔时间(秒):")
        self.interval_label.grid(row=0, column=0)

        self.interval_entry = tk.Entry(self.root, textvariable=self.interval)
        self.interval_entry.grid(row=0, column=1)

        self.start_button = tk.Button(self.root, text="开始", command=self.start_clicking)
        self.start_button.grid(row=1, column=0)

        self.stop_button = tk.Button(self.root, text="停止", command=self.stop_clicking, state=tk.DISABLED)
        self.stop_button.grid(row=1, column=1)

        self.root.mainloop()

    def start_clicking(self):
        self.start_button.config(state=tk.DISABLED)
        self.stop_button.config(state=tk.NORMAL)
        self.interval_entry.config(state=tk.DISABLED)
        self.clicking = True
        self.click()

    def stop_clicking(self):
        self.clicking = False
        self.start_button.config(state=tk.NORMAL)
        self.stop_button.config(state=tk.DISABLED)
        self.interval_entry.config(state=tk.NORMAL)

    def click(self):
        if self.clicking:
            pyautogui.click(pyautogui.size()[0]/2, pyautogui.size()[1]/2)
            #print("已点击", pyautogui.position())
            self.root.after(int(self.interval.get()) * 1000, self.click)

Clicker()

 

节流--自己写的函数

今天老师讲的节流, 大概意思是点击间隔时间必须三秒钟以上,三秒内的连续点击无效.

大体思路: 设定两个锁, 一个对应点击的触发函数fn, 一个对应定时器,防止定时器每次点击都会设定造成多个定时器篡改函数锁.

细节上就是把锁最好定为函数的属性,这样都对应一个.还有处理好this 和 e的问题.

我感觉老是的思路是获取时间间隔, 老是的思路比较直观. 定义一个两个变量, 每次点击记录时间点, 如果下次点击和这次间隔时间不符合时间间隔, 会不执行.

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 
 4 <head>
 5     <meta charset="UTF-8">
 6     <meta name="viewport" content="width=device-width, initial-scale=1.0">
 7     <meta http-equiv="X-UA-Compatible" content="ie=edge">
 8     <title>Document</title>
 9 </head>
10 
11 <body>
12     <span id=‘demo‘>
13         1111
14     </span>
15 
16     <script>
17 
18         //点了后一秒钟之内不能再点击.
19         function jieLiu(fn, time) {
20             jieLiu.flag = true;
21             jieLiu.TimeoutFlag = true;
22             return function (e) {
23                 var that = this;
24                 var arg = Array.prototype.slice.call(arguments,0);
25                 if (jieLiu.flag) {
26                     jieLiu.flag = false;
27                     fn.apply(that,arg);
28                 }
29                 if (jieLiu.TimeoutFlag) { //定时器flag, 防止每次点击开启一个定时器. 刚开始我没用这个,点击第二次后达不到预期效果
30                     jieLiu.TimeoutFlag = false;
31                     setTimeout(function () {
32                         jieLiu.flag = true;
33                         jieLiu.TimeoutFlag = true;
34                     }, time)
35                 }
36             }
37         }
38 
39         var jl = jieLiu(function (e) { console.log(this,e.target) }, 3000);
40         demo.onclick = jl;
41     </script>
42 </body>
43 
44 </html>
        function jieLiu(fn, time) {
            var lastTime = 0;
            return function (e) {
                var nowTime = new Date().getTime();
                var that = this;
                if (nowTime - lastTime > time) {
                    lastTime = nowTime;
                    var arg = Array.prototype.slice.call(arguments, 0);
                    fn.apply(that, arg);
                }
            }
        }

 

以上是关于Python定时点击桌面程序,可修改点击间隔的主要内容,如果未能解决你的问题,请参考以下文章

如何设置win2008的定时任务

如何在Windows系统中设置Python程序定时运行

windows创建定时任务执行python脚本

想找个可以定时自动打开软件,自动点击的工具?

定时控制esp8266

节流--自己写的函数