recognize_geetest(pageurl, gt, challenge, api_server="", proxy="", proxytype=""); - данная функция позволяет распознать geetest капчу.
Функция на вход принимает параметры:
pageurl - url страницы с капчей. gt - ID капчи. challenge - номер вызова, уникальный идентификатор процесса проверки. api_server - параметры сервера API. proxy - параметры proxy. proxytype - тип proxy.
После отработки функция возвращает результат своей работы в робот:
- Результат распознования
- Код ошибки
Пример использования recognize_geetest (PHP):
<?php $xhe_host = "127.0.0.1:7010"; // подключим объект для управления эмулятором, если еще не подключен if (!isset($path)) $path="../../../Templates/init.php"; require($path); // начало echo "<hr><font color=blue>rucaptcha->".basename (__FILE__)."</font><hr>"; // API ключ $rucaptcha->api_key="448b2d538fef6c236092492a947af85b"; // 1 echo "1. Перейдем на полигон для тестирования geetest капчи: "; echo $browser->navigate("https://www.geetest.com/en")."<br>"; // перейдём на пример капчи $anchor->click_by_inner_text("Demo"); sleep(1); $li->set_focus_by_number(10); // 2 echo "2. Распознать geetest капчу используя сервис rucaptcha.com : <br>"; // данные для отправки на сайт $api_server="api.geetest.com"; $date = new DateTime(); echo $t=$date->getTimestamp(); echo "<br>"; // получить gt и challenge для отправки на сервис echo $res = file_get_contents("https://www.geetest.com/demo/gt/register-enFullpage-official?t=$t"); echo "<br>"; // разбеёрм полученные данные из ответа $gt = get_string($res, '"gt":"', '",'); $challenge = get_string($res, '"challenge":"', '",'); echo "gt=$gt<br>challenge=$challenge<br>"; echo "<br>"; // отправляем запрос на сервис $result = $rucaptcha->recognize_geetest("https://www.geetest.com/en", $gt, $challenge, $api_server); // разбираем ответ от сервиса $geetest_challenge=get_string($result, 'geetest_challenge":"', '",'); $geetest_validate=get_string($result, 'geetest_validate":"', '",'); $geetest_seccode=get_string($result, 'geetest_seccode":"', '"'); // полученный результат вводим в поля $hiddeninput->set_value_by_name("geetest_challenge", $geetest_challenge); $hiddeninput->set_value_by_name("geetest_validate", $geetest_validate); $hiddeninput->set_value_by_name("geetest_seccode", $geetest_seccode); // нажимем на кнопку Click to verify $span->click_by_inner_text("Click to verify"); // конец echo "<hr><br>"; // разобрать строку по префиксам function get_string($str1, $pr1, $pr2, &$ind_st = 0) { //получаем стартовый индекс $ind1 = strpos($str1, $pr1, $ind_st); if($ind1 === false) { return ""; } $ind1_1 = $ind1 + strlen($pr1); //получаем финишный индекс $ind2 = strpos($str1, $pr2, $ind1_1); if ($ind2 === false) { return ""; } // получим результат $sres = substr($str1, $ind1 + strlen($pr1), $ind2 - $ind1_1); return trim($sres); } // Quit $app->quit(); ?>
Пример использования recognize_geetest (C#):
#region using using System; using System.Diagnostics; using System.Collections.Generic; using System.Linq; using System.IO; using System.Text; using System.Threading; using System.Net; using XHE; using XHE.XHE_DOM; using XHE.XHE_System; using XHE.XHE_Window; using XHE.XHE_Web; #endregion class Program:XHEScript { static void Main(string[] args) { // init XHE server="127.0.0.1:7010"; InitXHE(); // начало echo("<hr><font color=blue>rucaptcha.recognize</font><hr>"); // API ключ rucaptcha.api_key="448b2d538fef6c236092492a947af85b"; // 1 echo ("1. Перейдем на полигон для тестирования geetest капчи : "); echo (browser.navigate("https://www.geetest.com/en")+"<br>"); // перейдём на пример капчи anchor.click_by_inner_text("Demo"); sleep(1); li.set_focus_by_number(10); // 2 echo ("2. Распознать geetest капчу используя сервис rucaptcha.com : <br>"); // данные для отправки на сайт string api_server="api.geetest.com"; var timeStamp = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds(); echo (timeStamp + "<br>"); byte[] res = null; // получить gt и challenge для отправки на сервис using (var webClient = new WebClient()) { res = webClient.DownloadData("https://www.geetest.com/demo/gt/register-enFullpage-official?t="+timeStamp); } string sRes = Encoding.UTF8.GetString(res); echo (sRes+ "<br>"); // разбеёрм полученные данные из ответа string gt = get_string(sRes, "\"gt\":\"", "\","); string challenge = get_string(sRes, "\"challenge\":\"", "\","); echo ("gt="+gt+"<br>challenge="+challenge+"<br>"); // отправляем запрос на сервис string result = rucaptcha.recognize_geetest("https://www.geetest.com/en", gt, challenge, api_server); echo ("ответ сервера : "+result+"<br>"); // разбираем ответ от сервиса string geetest_challenge=get_string(result, "geetest_challenge\":\"", "\","); string geetest_validate=get_string(result, "geetest_validate\":\"", "\","); string geetest_seccode=get_string(result, "geetest_seccode\":\"", "\""); echo ("geetest_challenge="+geetest_challenge+"<br>geetest_validate="+geetest_validate+"<br>geetest_seccode="+geetest_seccode+"<br>"); // полученный результат вводим в поля hiddeninput.set_value_by_name("geetest_challenge", geetest_challenge); hiddeninput.set_value_by_name("geetest_validate", geetest_validate); hiddeninput.set_value_by_name("geetest_seccode", geetest_seccode); // нажимем на кнопку Click to verify span.click_by_inner_text("Click to verify"); // конец echo("<hr><br>"); app.quit(); } // разобрать строку по префиксам public static string get_string(string str1, string pr1, string pr2, int ind_st=0) { //получаем стартовый индекс int ind1 = str1.IndexOf(pr1, ind_st); if(ind1 ==-1) { return ""; } int ind1_1 = ind1 + pr1.Length; //получаем финишный индекс int ind2 = str1.IndexOf(pr2, ind1_1); if (ind2 == -1) { return ""; } ind_st=ind2; // получим результат string sres = str1.Substring (ind1 + pr1.Length, ind2 - ind1_1); return sres.Trim(); } }
Пример использования recognize_geetest (Python):
# Additional paths import sys sys.path.insert(0, '../../../Templates PY/') xhe_host = "127.0.0.1:7011" from xweb_human_emulator import * # разобрать строку по префиксам def get_string(str1, pr1, pr2, ind_st = 0): #получаем стартовый индекс ind1 = str1.find(pr1, ind_st) if ind1 == -1: return "" ind1_1 = ind1 + len(pr1) #получаем финишный индекс ind2 = str1.find(pr2, ind1_1) if ind2 == -1: return "" # получим результат s = s[ beginning : beginning + LENGTH] sres = str1[ind1 + len(pr1):ind1 + len(pr1)+ind2 - ind1_1] return sres.strip() # начало echo("<hr><font color=blue>rucaptcha.xxxxxxxxx</font><hr>") # API ключ rucaptcha.api_key="448b2d538fef6c236092492a947af85b" # 1 echo("1. Перейдем на полигон для тестирования geetest капчи: ") echo(browser.navigate("https://www.geetest.com/en"),"<br>") # перейдём на пример капчи anchor.click_by_inner_text("Demo") sleep(1) li.set_focus_by_number(10) # 2 echo( "2. Распознать geetest капчу используя сервис rucaptcha.com : <br>") # данные для отправки на сайт api_server="api.geetest.com" t=round(time.time()) echo(str(t)+"<br>") # получить gt и challenge для отправки на сервис #res = requests.get('https:#www.geetest.com/demo/gt/register-enFullpage-official?t='+t) res = '{"success":1,"challenge":"2190803726550c5d316c7289ed5ccb80","gt":"7b8ee24aa22172edf436fbaf851ff96c","new_captcha":true}'#browser.send_get_query("https://www.geetest.com/demo/gt/register-enFullpage-official",'t='+str(t)) echo ("answer:"+res+"<br>") # разбеёрм полученные данные из ответа gt = get_string(res, '"gt":"', '",') challenge = get_string(res, '"challenge":"', '",') echo("gt="+gt+"<br>challenge="+challenge+"<br>") # отправляем запрос на сервис result = rucaptcha.recognize_geetest("https://www.geetest.com/en", gt, challenge, api_server) # разбираем ответ от сервиса geetest_challenge=get_string(result, 'geetest_challenge":"', '",') geetest_validate=get_string(result, 'geetest_validate":"', '",') geetest_seccode=get_string(result, 'geetest_seccode":"', '",') # полученный результат вводим в поля hiddeninput.set_value_by_name("geetest_challenge", geetest_challenge) hiddeninput.set_value_by_name("geetest_validate", geetest_validate) hiddeninput.set_value_by_name("geetest_seccode", geetest_seccode) # нажимем на кнопку Click to verify span.click_by_inner_text("Click to verify") # конец echo("<hr><br>") # Quit app.quit()