Как правильно вставить скрипт для разгадывания КАПЧИ
Как правильно вставить скрипт для разгадывания КАПЧИ
Есть скрипт, который авторизуется на сайте, переходит к списку форм, выбирает форму, после оставляя данные в форме без изменений, нажимает кнопку сохранить. (Нужно это только для того что бы изменилось время сохранения формы, для повышения ее в списке в самый верх)
Для того что бы сохранить форму нужно ввести цифры с капчи.
ВОПРОС: как правильно в скрипт вписать код распознавания капчи с помощью 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- где взять этот параметр?
Для того что бы сохранить форму нужно ввести цифры с капчи.
ВОПРОС: как правильно в скрипт вписать код распознавания капчи с помощью 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- где взять этот параметр?
Re: Как правильно вставить скрипт для разгадывания КАПЧИ
это урл картинкиkmvxhe писал(а):$src- где взять этот параметр?
Re: Как правильно вставить скрипт для разгадывания КАПЧИ
Спасибо, разобрался.
Правильный код будет таким.
Комментарии думаю правильные, если что то не верно, просьба поправить, для новичков будет хорошей инструкцией.
$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'); //нажимает кнопку отправить
Правильный код будет таким.
Комментарии думаю правильные, если что то не верно, просьба поправить, для новичков будет хорошей инструкцией.
$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'); //нажимает кнопку отправить
Re: Как правильно вставить скрипт для разгадывания КАПЧИ
$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. для педантов желательно проверять сурс страницы что таки переход/сабмит сработал и находишься там где нужно
$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. для педантов желательно проверять сурс страницы что таки переход/сабмит сработал и находишься там где нужно
Re: Как правильно вставить скрипт для разгадывания КАПЧИ
- в последних версиях уже не обязательно , $browser->wait_for(); встроено внутри команд навигации, щелчков и сабмита формы$browser->wait_for(); // ждет готовность браузера
Re: Как правильно вставить скрипт для разгадывания КАПЧИ
Что это значит и как это сделать?satih писал(а): 3. для педантов желательно проверять сурс страницы что таки переход/сабмит сработал и находишься там где нужно
Re: Как правильно вставить скрипт для разгадывания КАПЧИ
сурс = хтмл код страницы, ты скажем перешел на новую страницу или засабмитил форму, в браузере видны изменения? да. значит хтмл код страницы изменился, значит чтоб проверить а загрузилась ли та страница что нужна была или засабмитилась ли та форма правильно, проверяем хтмл код и ищем то изменение которое говорит об успешном шаге. выглядит просто:
я обычно "принимаю меры" одну из двух:
1. если скрипт на стадии дебага, "принимаем меры" = останавливаем скрипт, чтоб посмотреть в чем ошибка и добавить этот вариант в возможные варианты исполнения скрипта. чем больше возможных ошибок/вариантов исполнений скрипта пропишешь, тем стабильней будет работать скрипт, т.е. меньше шансов что он окажется в ситуацие что случилось что-то на что у него нет ответа.
2. если скрипт уже после дебага и в стадии эксплутации, т.е. отловили 99% ошибок и лень перестраховыватся от того что раз из ста пробегов будет непредвиденная ситуация, просто записываем ошибку и забиваем на нее и рестартим скрипт ($app->restart например или continue при цикле) чтоб начал заного. раз в проверяем файл дебага и думаем стоит ли подправлять скрипт или и так все работает удовлетворительно.
правильный дебаг даст например существенную экономию каптч, более быструю работу скрипта (так как не будут ненужные действия после ошибки, например зачем заполнять поля если страница не загрузилась или загрузилась не та) и моральное удовлетворение что ты продвинулся на еще 1 шаг от говно кода
Код: Выделить всё
if (strpos($webpage->get_body(), "Success!!!") === false) {
// записываем ошибку (дебаг)
// принимаем меры
}
1. если скрипт на стадии дебага, "принимаем меры" = останавливаем скрипт, чтоб посмотреть в чем ошибка и добавить этот вариант в возможные варианты исполнения скрипта. чем больше возможных ошибок/вариантов исполнений скрипта пропишешь, тем стабильней будет работать скрипт, т.е. меньше шансов что он окажется в ситуацие что случилось что-то на что у него нет ответа.
2. если скрипт уже после дебага и в стадии эксплутации, т.е. отловили 99% ошибок и лень перестраховыватся от того что раз из ста пробегов будет непредвиденная ситуация, просто записываем ошибку и забиваем на нее и рестартим скрипт ($app->restart например или continue при цикле) чтоб начал заного. раз в проверяем файл дебага и думаем стоит ли подправлять скрипт или и так все работает удовлетворительно.
правильный дебаг даст например существенную экономию каптч, более быструю работу скрипта (так как не будут ненужные действия после ошибки, например зачем заполнять поля если страница не загрузилась или загрузилась не та) и моральное удовлетворение что ты продвинулся на еще 1 шаг от говно кода
Re: Как правильно вставить скрипт для разгадывания КАПЧИ
Не пойму как проверить наличие на странице капчи, что бы ее разгадать или не разгадать в случае ее отсувствия?
Мне нужно что бы капча не отправлялась если ее нет, а просто нажималась кнопка отправить.
И еще, как проверить на странице наличия определенного текста?
Может быть я не понял вышестоящего сообщения?
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');
}
}
Мне нужно что бы капча не отправлялась если ее нет, а просто нажималась кнопка отправить.
И еще, как проверить на странице наличия определенного текста?
Может быть я не понял вышестоящего сообщения?
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');
}
}
Re: Как правильно вставить скрипт для разгадывания КАПЧИ
Как отправить капчу русскому человеку?
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?
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?
Re: Как правильно вставить скрипт для разгадывания КАПЧИ
$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);