Alternative to pyautogui for desktop automation

Question:

I have created a software that processes images to do automation of desktop application Itunes. It is working fine but I want it to run on servers. But it would not have visual data while on server. The code I wrote is below

import pyautogui
import time


def locate(icon):
        time.sleep(1)
        while True:
            coord = pyautogui.locateOnScreen(icon)

            if coord == None:
                continue
            else:
                break

        return coord

def locateCenter(icon):
    while True:
        coord = pyautogui.locateCenterOnScreen(icon)

        if coord == None:
            continue
        else:
            break

    return coord
def locateChance(icon):
    time.sleep(3)
    ct = 0
    while True:
        if icon == "data\play.png":
            coord = pyautogui.locateOnScreen(icon)
            ct = ct +1
            if ct == 4:
                coord = (0,0,0,0)
                break
        else:
            coord = pyautogui.locateCenterOnScreen(icon)
            ct = ct +1
            if ct == 4:
                coord = (0,0)
                break
        if coord == None:
            continue
        else:
            break

    return coord

def sign_out():

    acnt_coord = locate("data\acnt_tab.png")
    pyautogui.click(acnt_coord)
    time.sleep(0.5)
    so_coord = pyautogui.locateOnScreen("data\sign_out.png")
    if so_coord == None:
        pyautogui.press("return")
        time.sleep(1)
        pyautogui.leftClick()
        time.sleep(0.5)
        so_coord = pyautogui.locateOnScreen("data\sign_out.png")
        

    pyautogui.click(so_coord)


#---------------------------------------------------------opening itunes---------------------------------------------------------------
pyautogui.press("win")
time.sleep(1)
pyautogui.typewrite("itune")
time.sleep(1)
pyautogui.press("return")
time.sleep(4)


data = open("data.csv","r").readlines()

#---------------------------------------------------------main loop--------------------------------------------------------------------
for i in data:
    
    i = i.strip()

    if i == data[0].strip() or i.strip() == "":
        continue
    print(f"Processing ID#{i[0]}")
    j = i.split(",")
    app_id = j[1]
    pswd = j[2]
    redeem_code = j[3]
    song = j[4]


#--------------------------------------------------Clicking store and open radeem------------------------------------------------------
    while True:
        st_coord = pyautogui.locateOnScreen("data\store_icon.png")
        if st_coord == None:
            st_coord = pyautogui.locateOnScreen("data\store_icon_2.png")
        if st_coord == None:
            continue
        else:
            break
    pyautogui.click(st_coord)
    time.sleep(5)
    rd_coord = locate("data\redeem_icon.png")
    pyautogui.click(rd_coord)
#------------------------------------------------------------SignIn--------------------------------------------------------------------
    time.sleep(3)
    x, y = locateCenter("data\ap_id3.png")
    pyautogui.moveTo(x,y)
    pyautogui.click(x, y-135 , clicks=2)
    pyautogui.press("backspace")
    pyautogui.typewrite(app_id)
    time.sleep(1)
    pyautogui.press("tab")
    pyautogui.typewrite(pswd)
    si_coord = locate("data\sign_in.png")
    pyautogui.click(si_coord)

#------------------------------------------------------------Redeem Code--------------------------------------------------------------
    rd_btn_coord = locate("data\rd_btn.png")
    pyautogui.moveTo(rd_btn_coord)
    pyautogui.dragRel(-100,0)
    pyautogui.click()
    time.sleep(0.5)
    pyautogui.typewrite(redeem_code)
    time.sleep(1)
    pyautogui.click(rd_btn_coord)
    time.sleep(1)
    x, y = locateChance("data\rd_error.png")
    if x != 0 and y != 0:
        print(f"ID#{data.index(i)} Invalid Redeem Code. Continuing to next ID...")
        sign_out()
        continue

#-------------------------------------------------------Remove payment method--------------------------------------------------------
    st_coord = locate("data\store_icon.png")
    pyautogui.click(st_coord)
    x,y = locateCenter("data\redeem_icon.png")
    pyautogui.click(x+120, y)
    time.sleep(2)
    pyautogui.click(locateCenter("data\manage_payment.png"))
    time.sleep(1)
    locate("data\wait1.png")
    x, y = locateChance("data\remove.png")
    if x != 0 and y != 0:
        pyautogui.click(x, y)
    time.sleep(2)
    print("completed")
#-----------------------------------------------------------searching song------------------------------------------------------------
    srch_coord = locate("data\search.png")
    print(srch_coord)
    pyautogui.click(srch_coord)
    time.sleep(1)
    pyautogui.typewrite(song)
    time.sleep(1)
    pyautogui.press("return")
#-----------------------------------------------------------Purchasing song-----------------------------------------------------------
    x,y = locateCenter("data\price.png")
    chord = locateChance("data\play.png")

    print(x,y)
    if x > (chord[0]-50) and x < (chord[0] + chord[2]+50) and (y+37) > (chord[1]-20) and (y+37) < (chord[1] + chord[3]+20):
        print(f"ID#{data.index(i)} Song already purchased. Continuing to the next ID...")
        sign_out()
        continue
    else:
        pyautogui.click(x+10 , y+37)
    
    x, y = locateCenter("data\buy.png")
    pyautogui.click(x, y-128 , clicks=2)

    pyautogui.press("backspace")
    pyautogui.typewrite(app_id)
    time.sleep(1)
    pyautogui.press("tab")
    pyautogui.typewrite(pswd)

    buyCoord = locateCenter("data\buy2.png")
    pyautogui.click(buyCoord)
    time.sleep(6)
    
    x, y =locateChance("data\buy3.png")
    if x != 0 and y != 0:
        pyautogui.click(x, y)
    time.sleep(6)

    x, y = locateChance("data\no_auto_download.png")
    if x != 0 and y != 0:
        pyautogui.click(x,y)
    time.sleep(6)

    x, y = locateChance("data\always.png")
    if x !=0 and y !=0:
        pyautogui.click(x,y)

    ##############################################can be signin#####################################
    

    #signout in the end
    sign_out()

pyautogui.keyDown("alt")
pyautogui.press("F4")
pyautogui.keyUp("alt")
    
print(f"Task Completed!n{str(len(data)-1)} ID(s) Processed")
time.sleep(2)
print("Exiting...")
time.sleep(2)

The data.csv file would be like

#,ID,password,redeem code,song
1,[email protected],password,X4TRYZ92K7LXPGYM,alone

Question:
So the problem is I can not run it on server. Can any one tell if it is possible to run it on AWS. Also if not is there a way to create an automation script that can run on servers. Would there be a possibility of using multithreading. I have done the work I wanted. This question is not for spamming itunes but only to get knowledge. As these questions came into my mind when I completed the script.
I have not attached the images of button because the purpose of code is to give idea of what I want to do.

Asked By: farhan jatt

||

Answers:

you need have a windows desktop session on aws vm, you need keep the desptop on aws, don’t lock screen automatically, you can find one always on machine, rdp to the aws vm. keep rdp connneciton on.

for more about windows session, station, desktop, you can refer to:
https://techcommunity.microsoft.com/t5/ask-the-performance-team/sessions-desktops-and-windows-stations/ba-p/372473#:~:text=A%20desktop%20is%20a%20session-specific%20paged%20pool%20area,and%20each%20windows%20station%20can%20have%20multiple%20desktops.

Answered By: justin

How to make Automation Whatsapp Desktop using Python PyAutoGUI’s

(Windows Key + 1, 2, 3, 4, etc.) Will launch each program in your taskbar.

enter image description here

import pyautogui
import time
import cv2

# pos x, y (105,142)

# open Whatsapp
# (Windows Key + 1, 2, 3, 4, etc.) Will launch each program in your 
# taskbar.

pyautogui.hotkey("win", "2")

# finding the position of search box
 # print(pyautogui.position())

time.sleep(7)
pyautogui.moveTo(105, 140)
pyautogui.click()

# Enter name of the account_name
Account_name = 'Captain American '
pyautogui.write(Account_name)
pyautogui.hotkey("enter")


# position message box of WhatsApp (731 984)

time.sleep(2)
pyautogui.moveTo(731, 984)

# Enter your message
message = "hello"

# Enter number of messages in Numbers
no_of_messages = 4

for _ in range(no_of_messages):
    pyautogui.write(message)
    pyautogui.hotkey("enter")][1]
Answered By: Vivek ps
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.