Для задач по работе требуется скрипт. Проекты с которыми работаю имеют специфику - корневой файл единый, меняется полностью после каждого изменения т.е. в него никак не влезть командной строкой. Поэтому все действия, которые требуются с проектами тыкаются мышью. Например, скопировать список названий из 100 объектов с одного окна стороннего приложения и вставить в другое - окно программы. Это приходится делать по одному названию. Т.е. выбрал, нажал f2, открыл другое окно - вставил. Скрипт ниже делает это сам, но его нужно улучшить. Как именно?
- требуется интерфейс с кнопками запуска
- Улучшить эту версию скрипта так, чтобы можно было брать больше объектов, чем размер экрана, а то каждый раз пока приходится заново его запускать, когда дошёл до конца экрана.
- требуется отдельный скрипт в рамках этой программы, который читает с экселя определённый столбец и строки, затем вставляет значения в программу.
- требуется отдельный скрипт, который перетаскивает мышкой из точки А в точку Б заданное количество раз и на каждой итерации грамотно смещается вниз, чтобы перетащить следующий объект списка.
Все скрины видео и более детальную информацию дам, кто захочет сделать. Цену обсудим.
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()