1

Тема: Прошу Вашей помощи.

hmm Ребята, как совместить iMacros с Antigate? Или как создать скрипт для выполнения 5 задач ( просто 5 переходов по ссылкам) бесконечно долго, но когда выскакивает капча, ее само вводило?
В данном случае это игра wekings.ru.

В iMacros использую простой скрипт:
VERSION BUILD=7401110 RECORDER=FX
TAB T=1
URL GOTO=http://wekings.ru/game/profile/equipment
CLICK X=571 Y=21
CLICK X=388 Y=318
CLICK X=399 Y=379
CLICK X=505 Y=311
CLICK X=568 Y=469
WAIT SECONDS=100

На сайте одного из партнеров Antigate есть это:

Как использовать API клиенты
Загружаете последнюю версию нужного клиента, добавляете в свое приложение, и на основе примеров кода, распространяемых вместе с API, пишете что-то вроде нижеперечисленного; например, для PHP:
 
require_once 'deathbycaptcha.php';
 
// Сюда подставляем свой логин и пароль:
$client = new DeathByCaptcha_SocketClient(USERNAME, PASSWORD);
 
// Сюда подставляем имя капча-файла/хэндлер файла, и максимальное время
// ожидания капчи (таймаут) в секундах:
if ($captcha = $client->decode(CAPTCHA_FILE_NAME, TIMEOUT)) {
    echo $captcha['text'] . "\n";
 
    // ЕСЛИ капча была неверно решена, отмечаем ее как неправильную
    if () {
        $client->report($captcha['captcha']);
    }
}
 
// Повторить для других капчей
…или для C#:
 
// Не забудьте добавить DeathByCaptcha.dll в проект
using DeathByCaptcha;
 
// Сюда подставляем свой логин и пароль:
Client client = (Client) new SocketClient(USERNAME, PASSWORD);
 
// Подставляем имя файла, поток или массив байт
// и необходимый таймаут в секундах:
Captcha captcha = client.Decode(CAPTCHA_FILE_NAME, TIMEOUT);
if (captcha.Solved && captcha.Correct) {
    Console.WriteLine("CAPTCHA {0}: {1}", captcha.Id, captcha.Text);
 
    // Если капча решена неверно, отмечаем капчу как неправильную
    if () {
        client.Report(captcha);
    }
}
 
// Повторить для других капчей
Сокетовый API использует порты 81238130 — проверьте, чтобы исходящие TCP-соединения не были закрыты Вашим файрволом. В противном случае используйте HTTP API. Порты 81238130 предназначены только для сокетового API, не пытайтесь использовать их для HTTP API запросов!
 
Для более подробной информации обратитесь к соответствующим файлам примеров и исходнымому коду клиентов, включенных в необходимый пакет API.

Помогите совместить эти два скрипта, или помогите написать свой скрипт-бот для этой игры. Пожалуйста, очень нужно. Заранее спасибо hmm

2

Re: Прошу Вашей помощи.

Вот еще что нашел:
URL GOTO=http://api.deathbycaptcha.com/decaptcher?function=picture2&print_format=html
TAG POS=1 TYPE=INPUT ATTR=NAME:username CONTENT={{YOUR_DBC_USERNAME}}
TAG POS=1 TYPE=INPUT ATTR=NAME:password CONTENT={{YOUR_DBC_PASSWORD}}
TAG POS=1 TYPE=INPUT ATTR=NAME:pict CONTENT={{CAPTCHA_IMAGE_FILE_NAME}}
TAG POS=1 TYPE=INPUT ATTR=TYPE:submit

TAG POS=6 TYPE=TD ATTR=* EXTRACT=TXT
SET !VAR1 {{!EXTRACT}}

3

Re: Прошу Вашей помощи.

Вот для C#:

//пример был прислан одним из наших пользователей, поэтому за качество не отвечаем smile
 
namespace RA.HTML
{
    public class PostData
    {
        private string s_method = String.Empty;
 
        public string Method { get { return this.s_method; } }
        private string s_action = String.Empty;
 
        public string Action { get { return this.s_action; } }
        public string Param { get { return this.s_param; } }
 
        private string s_param = String.Empty;
        public PostData(string s_PostString)
        {
            if (s_PostString.IndexOf("=") != -1)
 
            {
                this.s_method = s_PostString.Substring(0, s_PostString.IndexOf("="));
                this.s_action = s_PostString.Substring(s_PostString.IndexOf("=") + 1);
                if (this.s_action.IndexOf("!") != -1)
                {
                    this.s_action = s_action.Substring(0, this.s_action.IndexOf("!"));this.s_param = s_PostString.Substring(s_PostString.IndexOf("!") + 1);
                }
 
            }
 
        }
        public static string MultiFormData(string Key, string Value, string Boundary)
        {
            string output = "--" + Boundary + "\r\n"; output += "Content-Disposition: form-data; name=\"" + Key + "\"\r\n\r\n";
            output += Value + "\r\n";
            return output;
        }
        public static string MultiFormDataFile(string Key, string Value, string FileName, string FileType, string Boundary)
        {
            string output = "--" + Boundary + "\r\n"; output += "Content-Disposition: form-data; name=\"" + Key + "\"; filename=\"" + FileName + "\"\r\n"; output += "Content-Type: " + FileType + " \r\n\r\n";
            output += Value + "\r\n";
            return output;
        }
    }
 
 
//Картинка содержится в теле ответа сервера myResp
//Запрос
HttpWebRequest myReq = (HttpWebRequest)HttpWebRequest.Create("http://antigate.com/in.php");
myReq.UserAgent = UserAgent;
myReq.Accept = "*/*";
myReq.Headers.Add("Accept-Language", "ru");
myReq.KeepAlive = true;
myReq.AllowAutoRedirect = false;
myReq.Method = "POST";
 
//пост параметры
string sBoundary = DateTime.Now.Ticks.ToString("x");
myReq.ContentType = "multipart/form-data; boundary="+sBoundary;
string sPostMultiString = "";
sPostMultiString += PostData.MultiFormData("method", "post", sBoundary);
sPostMultiString += PostData.MultiFormData("key", KapchaKey, sBoundary);
sPostMultiString += PostData.MultiFormData("file", "bober.jpg", sBoundary);
sPostMultiString += PostData.MultiFormData("numeric", "1", sBoundary);
 
//копируем файл-картинку из потока
string sFileContent = "";
using (BinaryReader br = new BinaryReader(myResp.GetResponseStream(), Encoding.Default))
{
   byte[] ba = new byte[32768];
   int pos=0;
   byte b;
   while(true)
   {
       try
       { b = br.ReadByte(); }
       catch(EndOfStreamException ex)
       {
           break;
       }
       ba[pos]=b;
       pos++;
   }
   byte[] ba2 = new byte[pos];
   for (int k = 0; k < pos; k++)
   {
       ba2[k] = ba[k];
   }
   sFileContent = Encoding.Default.GetString(ba2);
   }
   sPostMultiString += PostData.MultiFormDataFile("file", sFileContent, "bober.jpg", "image/pjpeg", sBoundary);
   sPostMultiString += "--" + sBoundary + "--\r\n\r\n";
 
   //Получаем массив байт
   byte[] byteArray = Encoding.Default.GetBytes(sPostMultiString);
   //Получаем и записываем общую длинну массива
   myReq.ContentLength = byteArray.Length;
 
   //Отправляем запрос и получаем ответ
   HttpWebResponse ret=null;
   try
   {
   myReq.GetRequestStream().Write(byteArray, 0, byteArray.Length);
   ret = (HttpWebResponse)myReq.GetResponse();
   }
   catch
   {
   AddDebugMessage("Не получен ответ на запрос http://antigate.com/in.php");
   }
 
   //Получаем и разбираем текст ответа сервера
   reader = new System.IO.StreamReader(ret.GetResponseStream(), Encoding.GetEncoding(1251));
   string pg;
   pg = reader.ReadToEnd();
   string[] pars = pg.Split(new char[1] { '|' }, StringSplitOptions.RemoveEmptyEntries);
 
   //Надо добавить обработку ошибок
 
   //Ждём распознавания капчи
   while (true)
   {
   Thread.Sleep(15000);
 
   myReq = (HttpWebRequest)HttpWebRequest.Create("http://antigate.com/res.php?key="+KapchaKey+"&action=get&id="+pars[1]);
   if (useProxy == true) myReq.Proxy = new WebProxy(ProxyIP, ProxyPort);
   myReq.UserAgent = UserAgent;
   myReq.Accept = "*/*";
   myReq.Headers.Add("Accept-Language", "ru");
   myReq.KeepAlive = true;
   myReq.AllowAutoRedirect = false;
   myReq.Method = "GET";
 
   ret = (HttpWebResponse)myReq.GetResponse();
 
   reader = new System.IO.StreamReader(ret.GetResponseStream(), Encoding.GetEncoding(1251));
   pg = reader.ReadToEnd();
   pars = pg.Split(new char[1] { '|' }, StringSplitOptions.RemoveEmptyEntries);
 
   //если капча распознана забираем значениеи и прекращаем ожидание
   if (pars[0] == "OK")
   {
       data = "img_code=" + pars[1];
       break;
   }
}
}

4

Re: Прошу Вашей помощи.

А еще лучше:
(Please log in or register to see this URL)
Там файлик-бот лежит. Вот он на delphi писан. Как его отредактировать, чтобы коннектился не к двум сайтам которые там есть а к 1: wekings.ru???