Распознавание капч с помощью сервиса ruCaptcha.com

Обсуждение статей из нашего блога
Ответить

Аватара пользователя
Support
Site Admin
Сообщения: 894
Зарегистрирован: 10 апр 2009, 17:45
Контактная информация:

Re: Распознавание капч с помощью сервиса ruCaptcha.com

Сообщение Support » 24 сен 2019, 17:03

пример распознавания на с#

ReCaptcha V2

Код: Выделить всё

#region using

using System;
using System.Diagnostics;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Text;
using System.Threading;

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";

		// Пример : ReCaptcha V2
		echo ("1. Перейдем на полигон ReCaptcha V2: ");
		echo (browser.navigate("https://www.google.com/recaptcha/api2/demo")+"<br>");
		sleep(1);
		echo ("2. Получение токена от сервиса распознования: ");
		string result = rucaptcha.recognize_recaptcha_v2(webpage.get_url(),"6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-");
		echo (result+"<br>");
		echo ("3. Используем полученный токен для обхода капчи: ");
		// установим токен в скрытое поле g-recaptcha-response
		textarea.set_value_by_name("g-recaptcha-response", result);
		// нажимаем на кнопку Submit
		button.click_by_id("recaptcha-demo-submit");
		echo ("<br>");
		// пауза 5 сек
		sleep(5);

		// Пример: Invisible ReCaptcha V2
		echo ("1. Перейдем на полигон Invisible ReCaptcha V2: ");
		echo (browser.navigate("https://www.google.com/recaptcha/api2/demo?invisible=true")+"<br>");
		sleep(1);

		echo ("2. Получить текущий урл страницы для отправки на сервер: ");
		string url_loc = webpage.get_url()+"<br>";
		echo(url_loc+"<br>");

        echo ("3. Получение токена от сервиса распознования: ");
        result = rucaptcha.recognize_recaptcha_v2(url_loc,"6LfP0CITAAAAAHq9FOgCo7v_fb0-pmmH9VW3ziFs",true);
        echo (result+"<br>");
        echo ("3. Используем полученный токен для обхода капчи: ");
		// установим токен в скрытое поле g-recaptcha-response
		textarea.set_inner_html_by_name("g-recaptcha-response", result);
		// вызов коллбек-функции
		browser.run_java_script("onSuccess();","");
		// нажимаем на кнопку Submit
		btn.click_by_id("recaptcha-demo-submit");

		// конец
		echo("<hr><br>");

		app.quit();            
	  }
}

geetest капча

Код: Выделить всё

#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(); 
	}
}

Аватара пользователя
Support
Site Admin
Сообщения: 894
Зарегистрирован: 10 апр 2009, 17:45
Контактная информация:

Re: Распознавание капч с помощью сервиса ruCaptcha.com

Сообщение Support » 24 сен 2019, 17:06

Пример распознавания на питоне

ReCaptcha V2

Код: Выделить всё

# Additional paths
import sys
sys.path.insert(0, '../../../Templates PY/')

xhe_host = "127.0.0.1:7013"
from xweb_human_emulator import *

# начало
echo("<hr><font color=blue>rucaptcha.xxxxxxxxx</font><hr>")

# API ключ
rucaptcha.api_key="448b2d538fef6c236092492a947af85b"

# 1 
# Пример : ReCaptcha V2
echo ("1. Перейдем на полигон ReCaptcha V2: ")
echo (browser.navigate("https://www.google.com/recaptcha/api2/demo"),"<br>")
sleep(1)
echo ("2. Получение токена от сервиса распознования: ")
result = rucaptcha.recognize_recaptcha_v2(webpage.get_url(),"6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-")
echo (result,"<br>")
echo ("3. Используем полученный токен для обхода капчи: ")
# установим токен в скрытое поле g-recaptcha-response
textarea.set_value_by_name("g-recaptcha-response", result)
# нажимаем на кнопку Submit
button.click_by_id("recaptcha-demo-submit")
echo ("<br>")
# пауза 5 сек
sleep(5)

# Пример: Invisible ReCaptcha V2
echo ("1. Перейдем на полигон Invisible ReCaptcha V2: ")
echo (browser.navigate("https://www.google.com/recaptcha/api2/demo?invisible=true"),"<br>")
sleep(1)

echo ("2. Получить текущий урл страницы для отправки на сервер: ")
url_loc = webpage.get_url()
echo (url_loc,"<br>")
echo ("3. Получение токена от сервиса распознования: ")
result = rucaptcha.recognize_recaptcha_v2(webpage.get_url(),"6LfP0CITAAAAAHq9FOgCo7v_fb0-pmmH9VW3ziFs",1)
echo (result,"<br>")
echo ("3. Используем полученный токен для обхода капчи: ")
# установим токен в скрытое поле g-recaptcha-response
textarea.set_inner_html_by_name("g-recaptcha-response", result)
# вызов коллбек-функции
browser.run_java_script('onSuccess()')
# нажимаем на кнопку Submit
btn.click_by_id("recaptcha-demo-submit")

# конец
echo("<hr><br>")

# Quit
app.quit()
geetest капча

Код: Выделить всё


# 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()


dimerm
Сообщения: 214
Зарегистрирован: 02 май 2013, 10:36

Re: Распознавание капч с помощью сервиса ruCaptcha.com

Сообщение dimerm » 19 июн 2020, 20:46

Было бы здорово иметь супер-функцию от рукапчи, примерно такого плана:

1) Скрипт уловил наличие капчи на странице (например в гугле или яндексе это видно просто по урлу);
2) Запускаем супер-функцию: chornyj_plashch($timelimit) она будет выполняться пока не избавит нас от капчи или пока время не выйдет;
3) Она там ищет всё что нужно чтобы понять что за капча, решает её, жмёт на картинки, вставляет слова куда нужно и т.п., жмёт на кнопку, а по готовности (или когда временной лимит уже вышел) переходит на следующую строчку и выдаёт нам что-то типа "готово, дорогой, тебе это обошлось с 0,13 копейки".

Даже пусть сначала делает через токен по более дорогому тарифу "Лёгкий но дорогой", главное чтобы актуальность этого поддерживалось вместе с хуман-эмулятором. Так рукапча будет постоянно востребована и нам меньше гиморов.

Аватара пользователя
Support
Site Admin
Сообщения: 894
Зарегистрирован: 10 апр 2009, 17:45
Контактная информация:

Re: Распознавание капч с помощью сервиса ruCaptcha.com

Сообщение Support » 19 июн 2020, 21:11

dimerm писал(а):
19 июн 2020, 20:46
Было бы здорово иметь супер-функцию от рукапчи, примерно такого плана:

1) Скрипт уловил наличие капчи на странице (например в гугле или яндексе это видно просто по урлу);
2) Запускаем супер-функцию: chornyj_plashch($timelimit) она будет выполняться пока не избавит нас от капчи или пока время не выйдет;
3) Она там ищет всё что нужно чтобы понять что за капча, решает её, жмёт на картинки, вставляет слова куда нужно и т.п., жмёт на кнопку, а по готовности (или когда временной лимит уже вышел) переходит на следующую строчку и выдаёт нам что-то типа "готово, дорогой, тебе это обошлось с 0,13 копейки".

Даже пусть сначала делает через токен по более дорогому тарифу "Лёгкий но дорогой", главное чтобы актуальность этого поддерживалось вместе с хуман-эмулятором. Так рукапча будет постоянно востребована и нам меньше гиморов.
Это нужна не функция, а режим, в котором при переходе на страницы хуман должен их анализировать на предмет наличия капч их типа и т.д. и на основе этого выполнять соответственный алгоритм. Причём ключ для сервиса надо тогда поместить в настройки, что бы можно было его оттуда в любой момент взять. Подумаем над этим.

Ответить