데이터 분석가

쿠키 클릭커(Cookie Clicker) 자동 프로그램 본문

파이썬(python) 프로젝트 모음

쿠키 클릭커(Cookie Clicker) 자동 프로그램

PlintAn 2023. 4. 21. 10:00

안녕하세요!

 

쿠키 클릭커(Cookie Clicker)이라는 게임을 아시나요 ??

 

정말 클릭만으로 하는 정 단순한 게임인데요,

 

쿠키 클릭커

왼쪽에 있는 쿠키를 클릭한 값을 모아서 여러가지 기능을 사는 게임이에요

 

 

이거 게임이 아니라 고문인거 같은데요 ??

 

오토마우스 앱을 이용해서 쿠키를 늘려갈 수 있겠네요, 하지만 단순히 클릭만 해서는 기능을 이용할 수 없어요

 

그렇기에 Selenium 라이브러리를 통해 chrome 을 제어해서 오른쪽 기능을 구입해서

 

초당 쿠키 생산을 최대로 늘려보겠습니다 !

 

 

 

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

# Chrome 드라이버 경로 지정
chrome_driver_path = "Your Path"

# 웹 드라이버 실행
driver = webdriver.Chrome(executable_path=chrome_driver_path)

브러우저 자동화를 위한 라이브러리인 Selenium을 이용해 webdriver 메서드를 불러와

 

브랄우저를 제어합니다. 'By'를 이용해 웹 페이지 요소를 찾아 지정합니다

 

경로 지정 후 실행 시킵시다

 

# 쿠키 클릭하는 웹페이지 접속
driver.get("http://orteil.dashnet.org/experiments/cookie/")

# 쿠키 클릭 버튼 element 찾기
cookie = driver.find_element(By.ID, "cookie")

# 아이템 가격 element들 찾기
items = driver.find_elements(By.CSS_SELECTOR, "#store div")
item_ids = [item.get_attribute("id") for item in items]

쿠키 클릭커 사이트에서 api를 get하고 

 

HTML 구성 요소 중 클릭 할 쿠키의 요소의 ID를 지정합니다

 

클릭하여 얻은 값으로 오른쪽 기능 아이템들을 구입해야 하므로 CSS_SELECTOR을 이용해 

 

HTML 구성 요소 중 #store div 지정합니다

 

 

# 10초 후에 새로운 가격 업데이트를 체크하기 위한 timeout 설정
timeout = time.time() + 10

# 30분 후에 스크립트 종료하기 위한 time 설정
five_min = time.time() + 60*30 # 5minutes

10초마다 누적된 클릭 값으로 오른쪽 기능 아이템들을 체크합니다

 

위 코드를 통한 스크립트는 30분까지만 작동 됩니다

 

 

while True:
    # 쿠키 클릭
    cookie.click()

    # 10초가 지나면 현재 아이템 가격들 체크
    if time.time() > timeout:

        all_prices = driver.find_elements(By.CSS_SELECTOR, "#store b")
        item_prices = []

        # 아이템 가격 파싱
        for price in all_prices:
            element_text = price.text
            if element_text != "":
                cost = int(element_text.split("-")[1].strip().replace(",", ""))
                item_prices.append(cost)

        # 아이템 가격과 아이템 id 매칭
        cookie_upgrades = {}
        for n in range(len(item_prices)):
            cookie_upgrades[item_prices[n]] = item_ids[n]

        # 현재 보유한 쿠키 수 파싱
        money_element = driver.find_element(By.ID, "money").text
        if "," in money_element:
            money_element = money_element.replace(",", "")
        cookie_count = int(money_element)

        # 구매 가능한 아이템들과 가격 파싱
        affordable_upgrades = {}
        for cost, id in cookie_upgrades.items():
            if cookie_count > cost:
                 affordable_upgrades[cost] = id

        # 구매 가능한 가장 비싼 아이템 구하기
        highest_price_affordable_upgrade = max(affordable_upgrades)
        print(highest_price_affordable_upgrade)
        to_purchase_id = affordable_upgrades[highest_price_affordable_upgrade]

        # 구매 실행
        driver.find_element(By.ID, to_purchase_id).click()

        # 10초 후에 다시 업데이트 체크하기 위한 timeout 설정
        timeout = time.time() + 10

    # 30분이 지나면 스크립트 종료
    if time.time() > five_min:
        cookie_per_s = driver.find_element(By.ID, "cps").text
        print(cookie_per_s)
        break

 

자동으로 클릭을 시전하고,

 

미리 설정해 놓은 timeout( 10초 )가 지나가면 아이템 가격을 체크한 후,

 

모아놓은 값을 기준으로 파싱한 아이템 값 중 구매할 수 있는 가장 비싼 값

 

아이템을 구매합니다.

 

위 사항은 10초마다 반복되고 30분이 지나 스크립트가 종료되면,

 

초당 쿠키 생산 수를 터미널에 반환 후 종료합니다.

 

 

 

작동이 잘 되네요 ~ 

 

손이 고생할 일이 없겠어요!

 

 

Comments