Как правильно вставить скрипт для разгадывания КАПЧИ

Все вопросы касающиеся использования
программы можно задать здесь
Ответить
kmvxhe
Сообщения: 23
Зарегистрирован: 30 мар 2012, 09:04

Как правильно вставить скрипт для разгадывания КАПЧИ

Сообщение kmvxhe » 31 мар 2012, 14:41

Есть скрипт, который авторизуется на сайте, переходит к списку форм, выбирает форму, после оставляя данные в форме без изменений, нажимает кнопку сохранить. (Нужно это только для того что бы изменилось время сохранения формы, для повышения ее в списке в самый верх)
Для того что бы сохранить форму нужно ввести цифры с капчи.
ВОПРОС: как правильно в скрипт вписать код распознавания капчи с помощью antigate?

СКРИПТ:

<?php

$xhe_host ="127.0.0.1:7011";

// The following code is required to properly run XWeb Human Emulator
require("C:\XWeb\Human Emulator/Templates/xweb_human_emulator.php");

$browser->clear_cookies("",true);
$browser->navigate('http://ati.su');
$browser->wait_for();
$input->set_value_by_name('ctl00$ctl00$main$extLogin$ctlHeaderLogin$UserName','kmvtest1');
$input->set_value_by_name('ctl00$ctl00$main$extLogin$ctlHeaderLogin$Password','kmvtest1kmvtest1');
$inputimage->click_by_name('ctl00$ctl00$main$extLogin$ctlHeaderLogin$btnHeaderLogin');
$anchor->click_by_name('ctl00_ctl00_main_AtiMenu1_ctl08_ATIMenuItemTemplate1_ctl00_hlkOwnLoads');
$image->click_by_name('ctl00_ctl00_main_cphMain_grdEntities_ctl02_ctl03_Image11');
$button->click_by_name('btnSubmit');
$button->click_by_name('btnOk');

// Quit
$app->quit();
?>

Куда нужно вставить следующий код и в какой последовательности?

$image->screenshot_by_src('C:\123.jpg',$src,false,$frame=-1);
$cap = $anticapcha->recognize('C:\123.jpg', $apikey, 'http://www.antigate.com');

$apikey- это понятно ключ.
$src- где взять этот параметр?

satih
Сообщения: 269
Зарегистрирован: 31 мар 2010, 23:44

Re: Как правильно вставить скрипт для разгадывания КАПЧИ

Сообщение satih » 01 апр 2012, 00:24

kmvxhe писал(а):$src- где взять этот параметр?
это урл картинки

kmvxhe
Сообщения: 23
Зарегистрирован: 30 мар 2012, 09:04

Re: Как правильно вставить скрипт для разгадывания КАПЧИ

Сообщение kmvxhe » 01 апр 2012, 09:29

Спасибо, разобрался.
Правильный код будет таким.
Комментарии думаю правильные, если что то не верно, просьба поправить, для новичков будет хорошей инструкцией.

$browser->clear_cookies("",true); // очищает куки
$browser->navigate('http://ati.su'); // переходит на сайт
$browser->wait_for(); // ждет готовность браузера
$input->set_value_by_name('ctl00$ctl00$main$extLogin$ctlHeaderLogin$UserName','логин'); //вводит логин
$input->set_value_by_name('ctl00$ctl00$main$extLogin$ctlHeaderLogin$Password','пароль'); // вводит пароль
$inputimage->click_by_name('ctl00$ctl00$main$extLogin$ctlHeaderLogin$btnHeaderLogin'); // нажимает кнопку входа
$anchor->click_by_name('ctl00_ctl00_main_AtiMenu1_ctl08_ATIMenuItemTemplate1_ctl00_hlkOwnLoads'); //переходит на нужную страницу
$image->click_by_name('ctl00_ctl00_main_cphMain_grdEntities_ctl02_ctl03_Image11'); // переходит на нужную страницу
$apikey=('ключ антигате'); // ключ антигате
$src=('http://ati.su/EditPages/CaptchaImage.axd'); // урл картинки капчи
$image->screenshot_by_src('C:\123.jpg',$src,false,$frame=-1);//сохраняет картинку капчи
$cap = $anticapcha->recognize('C:\123.jpg', $apikey, 'http://www.antigate.com'); //отправляет капчу на антигате и получает результат
$input->set_value_by_name('ctlCaptcha$txtInput',$cap); // вставляет капчу
$button->click_by_name('btnSubmit'); //нажимает кнопку отправить
$button->click_by_name('btnOk'); //нажимает кнопку отправить

satih
Сообщения: 269
Зарегистрирован: 31 мар 2010, 23:44

Re: Как правильно вставить скрипт для разгадывания КАПЧИ

Сообщение satih » 01 апр 2012, 20:33

$browser->clear_cookies("",true); // очищает куки
$browser->navigate('http://ati.su'); // переходит на сайт
$browser->wait_for(); // ждет готовность браузера
$input->set_value_by_name('ctl00$ctl00$main$extLogin$ctlHeaderLogin$UserName','логин'); //вводит логин
$input->set_value_by_name('ctl00$ctl00$main$extLogin$ctlHeaderLogin$Password','пароль'); // вводит пароль
$inputimage->click_by_name('ctl00$ctl00$main$extLogin$ctlHeaderLogin$btnHeaderLogin'); // нажимает кнопку входа
$browser->wait_for(); // ждет готовность браузера
$anchor->click_by_name('ctl00_ctl00_main_AtiMenu1_ctl08_ATIMenuItemTemplate1_ctl00_hlkOwnLoads'); //переходит на нужную страницу
$browser->wait_for(); // ждет готовность браузера
$image->click_by_name('ctl00_ctl00_main_cphMain_grdEntities_ctl02_ctl03_Image11'); // переходит на нужную страницу
$browser->wait_for(); // ждет готовность браузера
$apikey='ключ антигате'; // ключ антигате
$src='http://ati.su/EditPages/CaptchaImage.axd'; // урл картинки капчи
$image->screenshot_by_src('C:\123.jpg',$src,false,$frame=-1);//сохраняет картинку капчи
$cap = $anticapcha->recognize('C:\123.jpg', $apikey, 'http://www.antigate.com'); //отправляет капчу на антигате и получает результат
$input->set_value_by_name('ctlCaptcha$txtInput',$cap); // вставляет капчу
$button->click_by_name('btnSubmit'); //нажимает кнопку отправить
$browser->wait_for(); // ждет готовность браузера
$button->click_by_name('btnOk'); //нажимает кнопку отправить


все окей, можно подправить следущие вещи:
1. $browser->wait_for() лучше ставить после каждой загрузки страницы, если нет полной загрузки страницы а только аяксом подгружаются/изменяются элементы, то sleep().
2. $src='...'; - скобки не нужны, таков синтаксис похапе.
3. для педантов :) желательно проверять сурс страницы что таки переход/сабмит сработал и находишься там где нужно

Аватара пользователя
bigfozzy
Site Admin
Сообщения: 3047
Зарегистрирован: 28 июл 2008, 17:24
Контактная информация:

Re: Как правильно вставить скрипт для разгадывания КАПЧИ

Сообщение bigfozzy » 01 апр 2012, 23:01

$browser->wait_for(); // ждет готовность браузера
- в последних версиях уже не обязательно , $browser->wait_for(); встроено внутри команд навигации, щелчков и сабмита формы

kmvxhe
Сообщения: 23
Зарегистрирован: 30 мар 2012, 09:04

Re: Как правильно вставить скрипт для разгадывания КАПЧИ

Сообщение kmvxhe » 02 апр 2012, 07:21

satih писал(а): 3. для педантов :) желательно проверять сурс страницы что таки переход/сабмит сработал и находишься там где нужно
Что это значит и как это сделать?

satih
Сообщения: 269
Зарегистрирован: 31 мар 2010, 23:44

Re: Как правильно вставить скрипт для разгадывания КАПЧИ

Сообщение satih » 03 апр 2012, 03:00

сурс = хтмл код страницы, ты скажем перешел на новую страницу или засабмитил форму, в браузере видны изменения? да. значит хтмл код страницы изменился, значит чтоб проверить а загрузилась ли та страница что нужна была или засабмитилась ли та форма правильно, проверяем хтмл код и ищем то изменение которое говорит об успешном шаге. выглядит просто:

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

if (strpos($webpage->get_body(), "Success!!!") === false) {
	// записываем ошибку (дебаг)
	// принимаем меры
}
я обычно "принимаю меры" одну из двух:
1. если скрипт на стадии дебага, "принимаем меры" = останавливаем скрипт, чтоб посмотреть в чем ошибка и добавить этот вариант в возможные варианты исполнения скрипта. чем больше возможных ошибок/вариантов исполнений скрипта пропишешь, тем стабильней будет работать скрипт, т.е. меньше шансов что он окажется в ситуацие что случилось что-то на что у него нет ответа.
2. если скрипт уже после дебага и в стадии эксплутации, т.е. отловили 99% ошибок и лень перестраховыватся от того что раз из ста пробегов будет непредвиденная ситуация, просто записываем ошибку и забиваем на нее и рестартим скрипт ($app->restart например или continue при цикле) чтоб начал заного. раз в проверяем файл дебага и думаем стоит ли подправлять скрипт или и так все работает удовлетворительно.

правильный дебаг даст например существенную экономию каптч, более быструю работу скрипта (так как не будут ненужные действия после ошибки, например зачем заполнять поля если страница не загрузилась или загрузилась не та) и моральное удовлетворение что ты продвинулся на еще 1 шаг от говно кода :)

kmvxhe
Сообщения: 23
Зарегистрирован: 30 мар 2012, 09:04

Re: Как правильно вставить скрипт для разгадывания КАПЧИ

Сообщение kmvxhe » 05 апр 2012, 08:36

Не пойму как проверить наличие на странице капчи, что бы ее разгадать или не разгадать в случае ее отсувствия?
Мне нужно что бы капча не отправлялась если ее нет, а просто нажималась кнопка отправить.
И еще, как проверить на странице наличия определенного текста?
Может быть я не понял вышестоящего сообщения?

function edit($ng, $apikey, $src)
{
global $browser,$image, $input, $button, $anticapcha;
for($i=0;$i<count($ng);$i++)
{
$browser->navigate('http://ati.su/EditPages/EditLoad.aspx?'.$ng[$i].'&Action=Edit&WindowMode=Popup');
sleep(5);
$image->screenshot_by_src('C:\123.jpg',$src,false);
$cap = $anticapcha->recognize('C:\123.jpg', $apikey, 'http://www.antigate.com');
$input->set_value_by_name('ctlCaptcha$txtInput',$cap);
$button->click_by_name('btnSubmit');
}
}

kmvxhe
Сообщения: 23
Зарегистрирован: 30 мар 2012, 09:04

Re: Как правильно вставить скрипт для разгадывания КАПЧИ

Сообщение kmvxhe » 09 апр 2012, 10:27

Как отправить капчу русскому человеку?

function antigate ($apikey,$src) {
global $anticapcha, $image;
$image->screenshot_by_src('c:\123.jpg',$src,false);
$cap=$anticapcha->recognize('c:\123.jpg',$apikey,'http://www.antigate.com');}

Куда вставить $is_russian?

4quest
Сообщения: 76
Зарегистрирован: 11 янв 2012, 20:17

Re: Как правильно вставить скрипт для разгадывания КАПЧИ

Сообщение 4quest » 09 апр 2012, 11:40

$anticapcha->recognize($filename, $apikey, $path ='http://www.anti-captcha.com', $is_verbose = true, $rtimeout = 5, $mtimeout = 120, $is_phrase = 0, $is_regsense = 0, $is_numeric = 0, $min_len = 0, $max_len = 0,$is_russian = 0);

Ответить