LINUX.ORG.RU
ФорумJob

Сделать hard python скрипт

 ,


0

2

Для задач по работе требуется скрипт. Проекты с которыми работаю имеют специфику - корневой файл единый, меняется полностью после каждого изменения т.е. в него никак не влезть командной строкой. Поэтому все действия, которые требуются с проектами тыкаются мышью. Например, скопировать список названий из 100 объектов с одного окна стороннего приложения и вставить в другое - окно программы. Это приходится делать по одному названию. Т.е. выбрал, нажал f2, открыл другое окно - вставил. Скрипт ниже делает это сам, но его нужно улучшить. Как именно?

  1. требуется интерфейс с кнопками запуска
  2. Улучшить эту версию скрипта так, чтобы можно было брать больше объектов, чем размер экрана, а то каждый раз пока приходится заново его запускать, когда дошёл до конца экрана.
  3. требуется отдельный скрипт в рамках этой программы, который читает с экселя определённый столбец и строки, затем вставляет значения в программу.
  4. требуется отдельный скрипт, который перетаскивает мышкой из точки А в точку Б заданное количество раз и на каждой итерации грамотно смещается вниз, чтобы перетащить следующий объект списка.

Все скрины видео и более детальную информацию дам, кто захочет сделать. Цену обсудим.

import keyboard
import threading
import time
import pyautogui
import sys
stop=False

def exit_on_esc():
    """
    Непрерывно проверяет нажатые клавиши
    В случае нажатия ESC переменная выхода меняется на True и происходит выход
    :return:
    """

    while True:
        key=keyboard.read_key()
        if key in ['esc']:
            global stop
            stop=True
            sys.exit()
def get_average_coordinates(message, duration=5, count=5):
    """4651513
    :param message: Сообщение которое будет выдаватьтся пользователю перед считыванием координат
    :param duration: Определяет время (в секундах) в течении которых будет считываться коо-ты
    :param count: Определять точность среднего, на какое колличество частей будет биться среднее
    :return: Средние координаты курсора
    """
    print("Приготовьтесь навести курсор на объект.")
    if stop == True:
        sys.exit()
    # time.sleep(3)
    for i in range(5):
        print(5-i)
        time.sleep(1)
        # Задержка перед считыванием координат
    print(message)
    # for i in range(duration):
    #     print(duration-i)
    #     time.sleep(1)
    x_coodrs=[]
    y_coords=[]

    for i in range(duration):
        if stop == True:
            sys.exit()
        x,y=pyautogui.position()
        x_coodrs.append(x)
        y_coords.append(y)
        time.sleep(duration/count)
    time.sleep(duration)
    avg_x =sum(x_coodrs)/len(x_coodrs)
    avg_y = sum(y_coords)/len(y_coords)
    return (avg_x, avg_y)
    print(avg_x, avg_y)

def get_repetitions():
    while True:
        try:
            if stop==True:
                sys.exit()
            repetitions = int(input("Введите количество повторений и нажмите Enter: "))
            return repetitions
        except ValueError:
            print("Ошибка! Введите корректное число.")

def main():
    # Запросить координаты первого и второго объекта от пользователя

    coord1 = get_average_coordinates("Поместите курсор на первый объект и удерживайте в течение 5 секунд.")
    coord2 = get_average_coordinates("Поместите курсор на второй объект и удерживайте в течение 5 секунд.")

    repetitions = get_repetitions()

    # Задание №5
    # Время задержки перед копированием 8 секунд
    print('Переключитесь на оба проекта и подготовьтесь к копированию')
    time.sleep(5)
    for i in range(5):
        print(5-i)
        time.sleep(1)

    for i in range(repetitions):
        if stop == True:
            sys.exit()
        pyautogui.moveTo(coord1)
        pyautogui.click()
        pyautogui.press('down', presses=i)
        
        pyautogui.press('f2')
        pyautogui.hotkey('ctrl', 'c')

        pyautogui.hotkey('alt', 'tab')

        pyautogui.moveTo(coord2)
        pyautogui.click()
        pyautogui.press('down', presses=i)
        pyautogui.press('f2')
        pyautogui.hotkey('ctrl', 'v')
        pyautogui.press('enter')

        pyautogui.hotkey('alt', 'tab')

if __name__ == "__main__":
    exit_thread = threading.Thread(target=exit_on_esc)
    exit_thread.start()
    main_thread = threading.Thread(target=main)
    main_thread.start()

Для того чтобы оставить комментарий войдите или зарегистрируйтесь.