Добавлен экранирующий символ.
В Кибор это символ ^
Его назначение реализация управляющих символов и возможность в блоке двойных и одинарных кавычек указывать другие двойные и одинарные кавычки в виде текста.
Возможны комбинации:
^r - Вставляет символ \r 10. Возврат каретки в начало строки.
^n - Вставляет символ \n 13. Новая строка.
^t - Горизонтальная табуляция.
^v - Вертикальная табуляция.
^' - Апостроф (одинарные кавычки)
^" - Двойные кавычки
^x - Указывает что далее идет символ в 16 ричной системе. ^x41 = символ A.
^/ - Позволяет разделить // в тексте не прибегая к разрывам строки. /^/ выведет //
^* - Позволяет разделить начало комментирования /* в тексте. /^* выведет /*
^^ - Если необходимо вывести символ ^, а после него стоит один из управляющих символов, то можно ^ заэкранировать им же самим. ^^n выведет текст ^n
При многократном экранирование ^ самим собой (более одного раза "^^"), и если после последнего ^ стоит управляющий символ или символ который последний ^ экранирует, надо эту группу отделить от строки путем разъединения строк:
messagebox("^^'");//Не более ^^ Разъединять не надо
messagebox("^^^^^'");//Более. Надо разъединить messagebox("^^^^"+"^'"); Выделив последнюю пару ^ с символом которй он экранирует отдельно.
Для использования в тексте / не обязательно его экранировать. Экранировать стоит только в том случае, если необходимо вводить более одного идущего по порядку слеша. К примеру в ссылке.
Для использования в тексте ^, если после него нет управляющего символа не обязательно его экранировать. Кроме случаев когда он в конце строки и после него идет закрывающий ". То есть тот же управляющий символ.
Экранирующий символ имеет подсветку.
Подсвечиваются только экранирующие и спец символы табуляции. Символы которые печатаются в следствие экранирования подсветки не имеют.
1. Kibor - 08 Июня, 2020 - 14:37:02 - перейти к сообщению
2. Kibor - 09 Июня, 2020 - 04:42:05 - перейти к сообщению
Использование экранирующего символа .
Еще
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++;
}
{
"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;
}
//Загружаем файл с капчей 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;
}
3. Kibor - 24 Июня, 2020 - 08:10:45 - перейти к сообщению
Добавил подсветку экранирующих символов.
Подсвечиваются только экранирующие и спец символы табуляции. Символы которые печатаются в следствие экранирования подсветки не имеют.
Подсвечиваются только экранирующие и спец символы табуляции. Символы которые печатаются в следствие экранирования подсветки не имеют.
4. Kibor - 25 Января, 2021 - 05:14:14 - перейти к сообщению
Добавлена возможность экранировать символ *
^* - Позволяет разделить начало комментирования /* в тексте. /^* выведет /*
^* - Позволяет разделить начало комментирования /* в тексте. /^* выведет /*
CODE:
messagebox ("/^**/");// /**/
5. AdryV - 25 Января, 2021 - 08:01:24 - перейти к сообщению
сорян я с json не работал но зачем это издевательство?
"url":"http:\/\/61.39.233.233\/1\/147220556452507.jpg"
my_site[0]="http:/"+"/mysite.rr.ru";
если на то пошло не проще заранее строки заготовить.....
а то плин смотриш на текс с кучей экранов как на новый язык
экран кажтоко слеша
экран кавычек
да и ваще я так бегло пробежался что мне аж страшно стало, хатя я слегка понимаю с++ с# кибор
а сообщение от 12 августа мой мозг взорвался
кажись пытались упростить понимание и освоение.... но чет мне кажется простой json проще)
"url":"http:\/\/61.39.233.233\/1\/147220556452507.jpg"
my_site[0]="http:/"+"/mysite.rr.ru";
если на то пошло не проще заранее строки заготовить.....
а то плин смотриш на текс с кучей экранов как на новый язык
экран кажтоко слеша
экран кавычек
да и ваще я так бегло пробежался что мне аж страшно стало, хатя я слегка понимаю с++ с# кибор
а сообщение от 12 августа мой мозг взорвался
кажись пытались упростить понимание и освоение.... но чет мне кажется простой json проще)
6. Kibor - 25 Января, 2021 - 08:28:12 - перейти к сообщению
AdryV пишет:
сорян я с json не работал но зачем это издевательство?
Ну так познакомьтесь и узнаете, что именно такими символами и приходит ответ. Кибор то тут при чем?
7. konctantin777 - 03 Июня, 2021 - 13:10:42 - перейти к сообщению
Делаю в виз редакторе. Подскажите как правильно экранировать
? и пропускать div[8] ?
Везде уже пробовал ^ ставить.... )
CODE:
//*[@id="react-tabs-15"]/div[2]/span/div[8]/div[5]/button
? и пропускать div[8] ?
Везде уже пробовал ^ ставить.... )
8. Kibor - 03 Июня, 2021 - 14:13:14 - перейти к сообщению
konctantin777 ,
//* виз редактор сам преобразует в /^/^*
Не забывайте весь текст этот в "" оформлять
CODE:
//*[@id=^"react-tabs-15^"]/div[2]/span/div[8]/div[5]/button
//* виз редактор сам преобразует в /^/^*
Не забывайте весь текст этот в "" оформлять
9. konctantin777 - 04 Июня, 2021 - 13:36:43 - перейти к сообщению
Спасибо.
Подскажите как сделать или статью почитать ?
Надо нажимать кнопку button с названием "выйти". элемент:
путь
В пути div меняется. Как найти кнопку, с определённым названием ?
Подскажите как сделать или статью почитать ?
Надо нажимать кнопку 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 меняется. Как найти кнопку, с определённым названием ?
10. Kibor - 04 Июня, 2021 - 13:46:55 - перейти к сообщению
Может по классу?
Этот вопрос не этой темы. Создавайте тему по этим вопросам.
Этот вопрос не этой темы. Создавайте тему по этим вопросам.