Автоматизация и боты

 Помощь      Поиск      Пользователи
Сайт Кибор     Программируемый кликер Кибор     Видео обучение     Заказать бот

 Страниц (1): [1]   

> Описание: Экранирующие и спецсимволы Кибор
Kibor
Отправлено: 08 Июня, 2020 - 22:37:02
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8094
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




Добавлен экранирующий символ.
В Кибор это символ ^
Его назначение реализация управляющих символов и возможность в блоке двойных и одинарных кавычек указывать другие двойные и одинарные кавычки в виде текста.

Возможны комбинации:
^r - Вставляет символ \r 10. Возврат каретки в начало строки.
^n - Вставляет символ \n 13. Новая строка.
^t - Горизонтальная табуляция.
^v - Вертикальная табуляция.
^' - Апостроф (одинарные кавычки)
^" - Двойные кавычки
^x - Указывает что далее идет символ в 16 ричной системе. ^x41 = символ A.
^/ - Позволяет разделить // в тексте не прибегая к разрывам строки. /^/ выведет //
^* - Позволяет разделить начало комментирования /* в тексте. /^* выведет /*
^^ - Если необходимо вывести символ ^, а после него стоит один из управляющих символов, то можно ^ заэкранировать им же самим. ^^n выведет текст ^n
При многократном экранирование ^ самим собой (более одного раза "^^"), и если после последнего ^ стоит управляющий символ или символ который последний ^ экранирует, надо эту группу отделить от строки путем разъединения строк:
messagebox("^^'");//Не более ^^ Разъединять не надо
messagebox("^^^^^'");//Более. Надо разъединить messagebox("^^^^"+"^'");
Выделив последнюю пару ^ с символом которй он экранирует отдельно.

Для использования в тексте / не обязательно его экранировать. Экранировать стоит только в том случае, если необходимо вводить более одного идущего по порядку слеша. К примеру в ссылке.
Для использования в тексте ^, если после него нет управляющего символа не обязательно его экранировать. Кроме случаев когда он в конце строки и после него идет закрывающий ". То есть тот же управляющий символ.



Экранирующий символ имеет подсветку.
Подсвечиваются только экранирующие и спец символы табуляции. Символы которые печатаются в следствие экранирования подсветки не имеют.
 
 Top
Kibor
Отправлено: 09 Июня, 2020 - 12:42:05
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8094
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




Использование экранирующего символа .

CODE:
/*
{
"playerstats": {
"steamID": "76561198050187807",
"gameName": "ValveTestApp260",
"stats": [
{
"name": "total_kills",
"value": 35179
},
{
"name": "total_deaths",
"value": 30241
},
{
"name": "total_time_played",
"value": 2444377
}
]
}
}
*/

string Json="{^r^n"+
"^"playerstats^": {^r^n"+
"^"steamID^": ^"76561198050187807^",^r^n"+
"^"gameName^": ^"ValveTestApp260^",^r^n"+
"^"stats^": [^r^n"+
"{^r^n"+
"^"name^": ^"total_kills^",^r^n"+
"^"value^": 35179^r^n"+
"},^r^n"+
"{^r^n"+
"^"name^": ^"total_deaths^",^r^n"+
"^"value^": 30241^r^n"+
"},^r^n"+
"{^r^n"+
"^"name^": ^"total_time_played^",^r^n"+
"^"value^": 2444377^r^n"+
"}^r^n"+
"]^r^n"+
"}^r^n"+
"}";

messagebox (Json);

parserjson(Rez_Json, Json);

int n=0;
while (Rez_Json.playerstats.stats[n].name!="ERROR_SEARCH_JSON")
{
messagebox (Rez_Json.playerstats.stats[n].name+" = "+Rez_Json.playerstats.stats[n].value);
n++;
}


Еще

CODE:
char BYTE[100000];//Массив байт для загрузки файла с капчей JPG. Потом его используем для JSON запроса

//Загружаем файл с капчей JPG и сразу форматируем его в base64
//первой выполнится функция read_file, вернет размер его и в #file[0] будет уже указатель на массив байт файла
//Затем выполнится функция base64code
string file64=base64code (#BYTE[0], read_file("C:\tab.jpg"));//Перед этим скриним часть экрана с капчей и сохраняем ее в C:\tab.jpg функцией savescreen

string json;//Строка для JSON запроса


//Формируем JSON запрос согласно документации anti-captcha.com
/*
{
"clientKey":"dce6bcbb1a728ea8d563de6d169a2057",
"task":
{
"type":"ImageToTextTask",
"body":"BASE64_BODY_HERE!",
"phrase":false,
"case":false,
"numeric":0,
"math":false,
"minLength":0,
"maxLength":0
}
}
*/
json="{^"clientKey^":^"" + "dce6bcbb1a728ea8d563de6d169a2057^"," +
"^"task^":" +
"{^"type^":^"ImageToTextTask^"," +
"^"body^":^"" + file64 + "^"," +
"^"phrase^":false," +
"^"case^":false," +
"^"numeric^":0," +
"^"math^":false," +
"^"minLength^":0," +
"^"maxLength^":0}}";

int aW=size(json);//Узнаем размер JSON запроса


strcpy(#BYTE[0], json);//Записываем JSON запрос в массив байт

messagebox(json);

string Header="Content-Type: application/x-www-form-urlencoded";//Формируем какой то заголовок

char REZ[100000];//Массив для приема ответа

sendgetweb(#REZ[0], "My bot", "POST", "https:/^/api.anti-captcha.com", "createTask", Header, #BYTE[0], aW);//Отправляем на anti-captcha.com и получаем ответ

//messagebox (format(#REZ[0]));

//Ответ такого формата
/*
{
"errorId":0,
"taskId":7654321
}
*/
parserjson(Rez_Json, format(#REZ[0]));//Парсим ответ




if (Rez_Json.errorId=="0")//Если нет ошибки
{
string id=Rez_Json.taskId;//Сохраняем полученный ID


//messagebox (id);

pause(3000);//Пауза

loop(50)
{
pause(2000);//Пауза в цикле между запросами решения

//Формируем запрос на ответ о решение капчи куда записываем наш clientKey и полученный taskId
/*
{
"clientKey":"dce6bcbb1a728ea8d563de6d169a2057",
"taskId": 7654321
}
*/
json="{^"clientKey^":^"" + "dce6bcbb1a728ea8d563de6d169a2057^"," +
"^"taskId^": 7654321}";
aW=size(json);//Узнаем размер JSON запроса
strcpy(#BYTE[0], json);//Записываем JSON запрос в массив байт

messagebox(json);

sendgetweb(#REZ[0], "My bot", "POST", "https:/^/api.anti-captcha.com", "getTaskResult", Header, #BYTE[0], aW);//Отправляем на anti-captcha.com и получаем ответ

//messagebox (format(#REZ[0]));


//Ответ такого формата
/*
{
"errorId":0,
"status":"ready",
"solution":
{
"text":"deditur",
"url":"http:\/\/61.39.233.233\/1\/147220556452507.jpg"
},
"cost":"0.000700",
"ip":"46.98.54.221",
"createTime":1472205564,
"endTime":1472205570,
"solveCount":"0"
}
*/
parserjson(Rez_Json, format(#REZ[0]));//Парсим ответ


if (Rez_Json.errorId!="0")//Если есть ошибка
{
messagebox("errorId "+Rez_Json.errorId);
break;//Выходим из цикла
}
if (Rez_Json.status=="ready")//Если капча решена
{
messagebox (Rez_Json.solution.text);//Выводим решение
messagebox (Rez_Json.solution.url);
break;//Выходим из цикла
}
}
}
else
{
messagebox (Rez_Json.errorCode);//Если не верный clientKey
}




function read_file(string pyt)
{
int size_file=0;
if (fopen (pyt, "rb")!=0)
{
size_file=freadb(#BYTE[0], 10000);
fclose();
size_file--;
}
return size_file;
}
 
 Top
Kibor
Отправлено: 24 Июня, 2020 - 16:10:45
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8094
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




Добавил подсветку экранирующих символов.
Подсвечиваются только экранирующие и спец символы табуляции. Символы которые печатаются в следствие экранирования подсветки не имеют.
 
 Top
Kibor
Отправлено: 25 Января, 2021 - 13:14:14
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8094
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




Добавлена возможность экранировать символ *
^* - Позволяет разделить начало комментирования /* в тексте. /^* выведет /*

CODE:
messagebox ("/^**/");// /**/
 
 Top
AdryV
Отправлено: 25 Января, 2021 - 16:01:24
Post Id



Пользователь
Специалист


Покинул форум
Сообщений всего: 449
Дата рег-ции: Май 2016  
Репутация: 11




сорян я с json не работал но зачем это издевательство?

"url":"http:\/\/61.39.233.233\/1\/147220556452507.jpg"

my_site[0]="http:/"+"/mysite.rr.ru";

если на то пошло не проще заранее строки заготовить.....
а то плин смотриш на текс с кучей экранов как на новый язык Белый флаг

экран кажтоко слеша
экран кавычек

да и ваще я так бегло пробежался что мне аж страшно стало, хатя я слегка понимаю с++ с# кибор

а сообщение от 12 августа мой мозг взорвался

кажись пытались упростить понимание и освоение.... но чет мне кажется простой json проще)
 
 Top
Kibor
Отправлено: 25 Января, 2021 - 16:28:12
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8094
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




 AdryV пишет:
сорян я с json не работал но зачем это издевательство?

Ну так познакомьтесь и узнаете, что именно такими символами и приходит ответ. Кибор то тут при чем?
 
 Top
konctantin777
Отправлено: 03 Июня, 2021 - 21:10:42
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 1134
Дата рег-ции: Окт. 2017  
Откуда: Архангельск
Репутация: 6




Делаю в виз редакторе. Подскажите как правильно экранировать
CODE:
//*[@id="react-tabs-15"]/div[2]/span/div[8]/div[5]/button

? и пропускать div[8] ?
Везде уже пробовал ^ ставить.... )

(Отредактировано автором: 03 Июня, 2021 - 21:11:04)

 
 Top
Kibor
Отправлено: 03 Июня, 2021 - 22:13:14
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8094
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




konctantin777 ,
CODE:
//*[@id=^"react-tabs-15^"]/div[2]/span/div[8]/div[5]/button


//* виз редактор сам преобразует в /^/^*
Не забывайте весь текст этот в "" оформлять
 
 Top
konctantin777
Отправлено: 04 Июня, 2021 - 21:36:43
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 1134
Дата рег-ции: Окт. 2017  
Откуда: Архангельск
Репутация: 6




Спасибо.
Подскажите как сделать или статью почитать ?
Надо нажимать кнопку button с названием "выйти". элемент:
CODE:
<button class="btn lobby-item__button lobby-item__exit">Выйти</button>

путь
CODE:
//*[@id="react-tabs-15"]/div[2]/span/div[7]/div[5]/button

В пути div меняется. Как найти кнопку, с определённым названием ?

(Отредактировано автором: 04 Июня, 2021 - 21:37:17)

 
 Top
Kibor
Отправлено: 04 Июня, 2021 - 21:46:55
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8094
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




Может по классу?
Этот вопрос не этой темы. Создавайте тему по этим вопросам.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« О программе Кибор »


Все гости форума могут просматривать этот раздел.
Только администраторы и модераторы могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 




Powered by