tkinterとマウス操作で仕事をする件


経緯

 ・会社でtemasを使っている。PC操作が15分以上ないとステータスが退席中になってしまう。それは困る。
 ・たまには休憩したい時だってあるよね。
 ・とりあえず画面でマウス操作はできたけど、色々バグあるかも。
 ・プログラミング初心者なので色々うまくいかない。助けて偉い人。

 ちなみにスクリプトでマウスを動かしてもteamsのステータスは退席中になってました。無念・・・。

実物

 開始ボタンを押したら、
  1.指定時間分だけマウスがランダムに移動します。
  2.メモ帳を開いて適当な文字列をキーボード入力します。(キーボード監視対策。メンテ中)
  3.最新ニュースを取得します。(通信量監視対策。メンテ中)
   

コード

working.py
import tkinter as tk
import pyautogui as pgui
import random
import datetime
import time
import subprocess
import string
import requests

class Application(tk.Frame):
    def __init__(self, master):
        super().__init__(master)

        master.geometry("230x130")
        master.title("Working!")

        self.create_widgets()

    def create_widgets(self):
        self.grid(column=0, row=0, sticky=tk.NSEW, padx=5, pady=5)
        self.time_label = tk.Label(self, text="時間指定(分)").grid(column=0, row=0, pady=10)
        self.time_box = tk.Entry(self)
        self.time_box.insert(0, '60')
        self.time_box.grid(column=1, row=0, sticky=tk.EW, padx=3)
        self.work_label = tk.Label(self, text="今日の仕事").grid(column=0, row=1, pady=10)
        self.status = tk.Label(self, text="今から本気出す")
        self.status.grid(column=1, row=1, sticky=tk.EW, padx=3)
        self.start_btn = tk.Button(self, text="開始", command=self.we_love_work).grid(column=1, row=2)

    #ボタンアクション
    def we_love_work(self):
        #action_flg = random.randint(1, 3)
        action_flg = 1
        self.status.config(text="マウスいじいじ") #更新してくれない

        time_box_value = self.time_box.get()
        end_time = datetime.datetime.now() + datetime.timedelta(minutes=int(time_box_value))
        while True:
            if datetime.datetime.now() >= end_time:
               break

            if action_flg == 1:
                self.do_mouse()
            elif action_flg == 2:
                self.do_keyboard()
            elif action_flg == 3:
                self.do_news()

    def do_mouse(self):
        window_x = 1366
        window_y = 768
        for i in range(50):
            point_x = random.randrange(0, window_x)
            point_y = random.randrange(0, window_y)
            pgui.moveTo(point_x, point_y, duration=1)
            time.sleep(3)

    def do_keyboard(self):
        #キーボード操作はできるがメモにうまく書けない
        process = subprocess.Popen(r'C:\Windows\System32\notepad.exe')
        pgui.click(50, 50)
        for i in range(10):
            pgui.typewrite(self.random_string(100))
            pgui.typewrite('\r\n')
            time.sleep(3)
        process.kill()

    def do_news(self):
        keyword = "最新"
        url = 'https://news.google.com/search'
        params = {'hl': 'ja', 'gl': 'JP', 'ceid': 'JP:ja', 'q': keyword}
        res = requests.get(url, params=params)
        print(res.text)
        time.sleep(60 * 3) #適度に間隔あけた方がいいかも?

    def random_string(n):
        return ''.join(random.choices(string.ascii_letters + string.digits, k=n))

def main():
    win = tk.Tk()
    app = Application(master=win)
    app.mainloop()

if __name__ == "__main__":
    main()