본문 바로가기
Study/Python

Python으로 게임 매크로 만들기

by Jamie Lim 2020. 6. 6.
이용한 게임 사이트
http://zzzscore.com/1to50/

1. 사전 준비

  1) selenium이란?

     - selenium은 웹 브라우저를 조작해 주는 프레임워크로 자동화 테스트를 위한 여러가지 기능을 제공함

 

     - 원하는 브라우저를 조작해주는 webdriver을 이용해 서버처럼 구동해 명령을 수행한다

 

  2) selenium 설치

    - cmd에서 파이썬이 있는 위치로 이동해 아래와 같은 명령어 입력

pip install selenium

이미 한 번 설치를 해서 조금 다름

 

  3) 크롬 드라이버 설치

    (1) 자신의 크롬 버전을 확인한다

 

    (2) 자신의 버전에 맞는 크롬 드라이버 설치하기

       - sites.google.com/a/chromium.org/chromedriver/downloads

 

Downloads - ChromeDriver - WebDriver for Chrome

WebDriver for Chrome

sites.google.com

 

      - 자신에게 맞는 버전을 선택한다

 

      - 자신에게 맞는 환경을 선택한다

 

     4) 모듈 가져오기

from selenium import webdriver

   위와 같이 진행하면 사전 준비가 모두 끝난다.

 


2. 게임 매크로 만들기

    - 게임에 접속 후 1~50까지 알아서 순서대로 클릭하는 매크로 만들기

from selenium import webdriver

driver = webdriver.Chrome('D:\Program\exe\chromedriver')  # chrome으로 열기
driver.get('http://zzzscore.com/1to50/')  # URL을 통해 게임 사이트 열기

  - 크롬을 이용해 게임 사이트 열기

 

 

게임 소스 코드
해당 네모칸의 xpath

    - selenium을 이용했을 때 태그를 이용할 수도 있지만 xpath를 이용해 사용할 수 있다

    - 클릭하기를 원하는 코드의 xpath를 복사해 사용한다

 

 

 

 

 

 

왼쪽과 같이 알고 싶은 경로에서 copy에 있는 copy XPath를 통해

 xpath를 복사할 수 있음

 

 

 

 

 

 

 

    - 위에서부터 오른쪽으로 순서대로 xpath는 //*[@id="grid"]/div[N]/span으로 N에는 1~15가 들어간다.

      그리고 해당 숫자가 클릭되면 25보다 큰 숫자 중 랜덤으로 바뀐다.

 

count = 1 
while count <= 50: 
    i = 1   # 
    while i <= 25:
        number = driver.find_element_by_xpath('//*[@id="grid"]/div[' + str(i) + ']')
        i = i + 1
        if str(count) == number.text:
            number.click()
            print("number  " + str(count) + " clicked!")
            count = count + 1
            break

  - 위 코드를 살펴보도록 하겠다

  - 외부 반복문은 count가 50보다 커지기 전까지 반복하고 내부 반복문은 i가 25보다 커지기 전까지 반복한다

  - count가 1일 때 xpath를 이용해 각각의 text가 뭐가 들어있는지 확인하고 1이면 .click()을 통해 클릭하고 count에 +1을 한 뒤 이를 계속 반복한다. 그러면 1~50까지 순서대로 클릭하여 게임을 끝낼 수 있다.

 

순서대로 클릭함
게임 완료
python 터미널

 

문제점

    - 이 방법으로 명령만으로 게임을 끝낼 수 있다

    - 그런데 생각보다 느림

 


3. 게임 매크로 수정

  - 크롬에서 해당 xpath를 비교할 때마다 가져오는 방법이 아닌 현재 1~25번에 대한 주소를 모두 가져와 비교를 하도록 함

 

count = 1
while count <= 50:
    number = driver.find_elements_by_xpath('//*[@id="grid"]/div[*]')
    for num in number:
        if num.text == str(count):
            num.click()
            print("number  " + str(count) + " clicked!")
            count += 1
            break

    - 원래는 //*//*[@id="grid"]/div[N]을 통해 N자리에 비교하고 싶은 번호를 넣었지만 숫자대신 *을 넣어 1~25번에 해당하는 경로를 모두 가져와 저장해 count와 비교한다. 나머지 코드는 위와 같다

 

훨씬 빨라진 것을 볼 수 있다

'Study > Python' 카테고리의 다른 글

Python을 이용한 Web Crawling  (0) 2020.05.28
[Python] 문자열과 리스트 함수 문법  (0) 2020.04.12

댓글