Помогите новичку написать скрипт для Human!

вопросы и ответы по использованию PHP
satih
Сообщения: 269
Зарегистрирован: 31 мар 2010, 23:44

Re: Помогите новичку написать скрипт для Human!

Сообщение satih » 26 янв 2011, 23:24

nikson писал(а):
nikson писал(а): можно подсчитать сколько таких инпутов есть, и стирать им атрибут name, но это тоже решение, заполнил лишнее поле, и фиг с ним, скрипту же лишнее поле не мешает
Как это будет выглядеть?

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

substr_count($webpage->get_body(), 'name="input_name"');
и если знаешь что при условие что есть два инпута с таким именем первый лишний, удаляешь первый с

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

$input->remove_attribute_by_name($name,$name_attr);
но если заполнять лишние инпуты не мешает работе скрипта (а это редко мешает), лучше оставить как у тебя, иначе просто лишние телодвижения

nikson
Сообщения: 94
Зарегистрирован: 20 янв 2011, 02:36
Контактная информация:

Re: Помогите новичку написать скрипт для Human!

Сообщение nikson » 29 янв 2011, 17:39

Частенько бывает что сервис неправильно распознает капчу, как сделать чтобы к примеру, если капча введена неправильно, то регистрация данного урл начинается заново. И еще вопросик, после успешной регистрации, нужно сохранить ссылку на профиль, как эта функция выглядет, как называется? Приведите пожалуйста пример кода для подтверждения регистрации по email (Проходим регистрацию-> Переходим в почтовый ящик-> Подтверждаем активацию), где можно про это почитать?

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

Re: Помогите новичку написать скрипт для Human!

Сообщение satih » 29 янв 2011, 18:21

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

while (strpos($webpage->get_body(), 'сообщение о неправильной каптче')) {
  // разгадываем каптчу заново, заполняем ее поле, сабмитим страницу
}

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

$anchor->get_href_by_inner_text($inner_text,$exactly=false);
Почитай про imap_open и т.п. по пхп. Не у всех почтовых сервисов есть pop3, советую работать с теми у которых есть, заходить в почту через браузер слишком большая трата времени

nikson
Сообщения: 94
Зарегистрирован: 20 янв 2011, 02:36
Контактная информация:

Re: Помогите новичку написать скрипт для Human!

Сообщение nikson » 01 фев 2011, 13:33

satih писал(а):
nikson писал(а):
nikson писал(а): можно подсчитать сколько таких инпутов есть, и стирать им атрибут name, но это тоже решение, заполнил лишнее поле, и фиг с ним, скрипту же лишнее поле не мешает
Как это будет выглядеть?

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

substr_count($webpage->get_body(), 'name="input_name"');
и если знаешь что при условие что есть два инпута с таким именем первый лишний, удаляешь первый с

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

$input->remove_attribute_by_name($name,$name_attr);
но если заполнять лишние инпуты не мешает работе скрипта (а это редко мешает), лучше оставить как у тебя, иначе просто лишние телодвижения
Можно по подробнее, как это прописать? К примеру на странице регистрации есть 2 поля для ввода логина "uname" (для регистрации и авторизации) и 2 одинаковых по имени поля для ввода пароля "pass", при регистрации заполняются естественно первые поля для авторизации, вы выше написали код, но мне не совсем понятно как это прикрутить, чтобы если на странице есть 2 одинаковых имени, первый удалялся а второй вводился...

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

Re: Помогите новичку написать скрипт для Human!

Сообщение satih » 01 фев 2011, 15:26

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

// снимаем атрибут name с инпута под именем uname
$input->remove_attribute_by_name('uname' , 'name');
// так как с первого инпута с атрибутом name="uname" атрибут снят, заполнится второй инпут
$input->set_value_by_name('uname', $login);

ilekor
Сообщения: 54
Зарегистрирован: 07 ноя 2010, 20:12

Re: Помогите новичку написать скрипт для Human!

Сообщение ilekor » 01 фев 2011, 17:39

Все куда проще, ловите

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

// Поиск определенного текста на странице
function find($text, $where){
return strpos($where, $text);
}

//Определяем как наша форма называется, для этого движка их всего две.
if(find('userinfo', $webpage->get_source())) $nameform = 'userinfo';
if(find('regform', $webpage->get_source())) $nameform = 'regform';

//Проверим есть ли форма с именами выше
if($nameform){
//Заполняем поле логин если есть такое поле
if($input->set_value_by_name_by_form_name("uname","", $nameform)===true) $input->set_value_by_name_by_form_name("uname",$login, $nameform);
//тут дальнейшие действия заполнения формы
}
Да и у этого движка трудно определить неудачный ввод катчи.
Также на этом движке используется 5 видов каптчи + 5 различный инпутов
2 разных инпута ввода пароля без учета повторения пароля.
В продолжении регистрации используется 4 разных кнопок.
И наконец с формой входа также вам нужно что то будет делать. Так как кнопка входа не определить каким образом входить, нет никаких имен только внутренний текст который также не одинаков. Я использую подмену формы, тоесть вырезаю часть и делаю подмену.

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

Re: Помогите новичку написать скрипт для Human!

Сообщение satih » 01 фев 2011, 19:25

что за аццкий двиг? :)

вообще если есть вопрос про определенный код или какую то конкретную страницу, лучше приводить пример с урлом, иначе начинаются гадания кого-куда вставлять

ilekor
Сообщения: 54
Зарегистрирован: 07 ноя 2010, 20:12

Re: Помогите новичку написать скрипт для Human!

Сообщение ilekor » 01 фев 2011, 20:07

satih писал(а):что за аццкий двиг? :)

вообще если есть вопрос про определенный код или какую то конкретную страницу, лучше приводить пример с урлом, иначе начинаются гадания кого-куда вставлять
Или исходный код формы ))) :lol:

nikson
Сообщения: 94
Зарегистрирован: 20 янв 2011, 02:36
Контактная информация:

Re: Помогите новичку написать скрипт для Human!

Сообщение nikson » 07 фев 2011, 22:44

Добрый вечер!

Вот код:

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

// Есть ли инпут с name 'captcha_code'
if ($input->is_exist_with_name('captcha_code')) {
// сохраним картинку с name 'captcha_img_name' в файл captcha.jpg
$image->save_to_file_by_name('captcha', 'F:\captcha.jpg');
// пошлем на разспознавание
$captcha_text = $anticapcha->recognize('F:\captcha.jpg', $apikey, 'http://www.antigate.com',  $is_verbose = true, $rtimeout = 5, $mtimeout = 120, $is_phrase = 0, $is_regsense = 0, $is_numeric = 0, $min_len = 0, $max_len = 0);
// заполним поле текстом каптчи
$input->set_value_by_name('captcha_code', $captcha_text);
Проблема в том, что бывает инпут с name 'user_code', можно ли как-нибудь это реализовать?
К примеру какой-нибудь переборкой, то есть ищет инпут с 'captcha_code' и 'user_code'. К примеру if ($input->is_exist_with_name('captcha_code','user_code')) так можно?

И еще вопросик, аналогичная ситуация только уже с

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

$image->save_to_file_by_name('captcha', 'F:\captcha.jpg');
Каптча может быть или по имени 'captcha' или по номеру 6, 9, 11, можно ли так сделать чтобы к примеру сначало каптча ищется по имени, если нет то по номеру. Возможно ли на Human такое сделать? Как-то не охото делать два скрипта под каптчу по номеру и по имени, тем более я еще только учусь...

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

Re: Помогите новичку написать скрипт для Human!

Сообщение satih » 07 фев 2011, 23:07

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

// Есть ли инпут с name 'captcha_code'
if ($input->is_exist_with_name('captcha_code')) $custom_input = 'captcha_code';
// Есть ли инпут с name 'user_code'
elseif ($input->is_exist_with_name('user_code')) $custom_input = 'user_code';
// Инпута нет, что делать???
else {
  echo 'ERROR: input not found<br>';
  $app->pause();
}

// сохраним картинку с name 'captcha_img_name' в файл captcha.jpg
$image->save_to_file_by_name('captcha', 'F:\captcha.jpg');
// пошлем на разспознавание
$captcha_text = $anticapcha->recognize('F:\captcha.jpg', $apikey, 'http://www.antigate.com',  $is_verbose = true, $rtimeout = 5, $mtimeout = 120, $is_phrase = 0, $is_regsense = 0, $is_numeric = 0, $min_len = 0, $max_len = 0);

// заполним поле текстом каптчи
$input->set_value_by_name($custom_input, $captcha_text);
возможно сделать перебор как показал выше, нашел подходящий инпут или каптчу, поставил в переменную, с ней работаешь. лучше конечно в сурсе регуляркой найти

nikson
Сообщения: 94
Зарегистрирован: 20 янв 2011, 02:36
Контактная информация:

Re: Помогите новичку написать скрипт для Human!

Сообщение nikson » 08 фев 2011, 00:32

satih писал(а):лучше конечно в сурсе регуляркой найти
Где об этом можно почитать? Что это такое?

nikson
Сообщения: 94
Зарегистрирован: 20 янв 2011, 02:36
Контактная информация:

Re: Помогите новичку написать скрипт для Human!

Сообщение nikson » 08 фев 2011, 00:38

satih писал(а):возможно сделать перебор как показал выше, нашел подходящий инпут или каптчу, поставил в переменную, с ней работаешь. лучше конечно в сурсе регуляркой найти
Это и здесь можно реализовать?

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

$image->save_to_file_by_name('captcha', 'F:\captcha.jpg');

Каптча может быть или по имени 'captcha' или по номеру 6, 9, 11, можно ли так сделать чтобы к примеру сначало каптча ищется по имени, если нет то по номеру. Возможно ли на Human такое сделать? Как-то не охото делать два скрипта под каптчу по номеру и по имени, тем более я еще только учусь...

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

Re: Помогите новичку написать скрипт для Human!

Сообщение satih » 08 фев 2011, 12:52

nikson писал(а):Это и здесь можно реализовать?
можно, везде. регулярное выражение (regexp) это поиск фразы по тексту.
nikson писал(а):Где об этом можно почитать? Что это такое?
почитай в гугле что это, обьяснят лучше чем я как их использовать. я когда-то прочитал этот ман, за день понял как с этими регулярками работать для простых сочетаний, там на инглише правда. найди на русском если инг проблема, 1-2 дня, и сможешь нормально искать любой текст в сурсе, инструмент очень и очень полезный, решает очень много вопросов "есть ли на странице то или это, и как его оттуда достать".
nikson писал(а):Каптча может быть или по имени 'captcha' или по номеру 6, 9, 11, можно ли так сделать чтобы к примеру сначало каптча ищется по имени, если нет то по номеру. Возможно ли на Human такое сделать? Как-то не охото делать два скрипта под каптчу по номеру и по имени, тем более я еще только учусь...
я ж дал пример выше с if elseif else, тоже самое можно сделать и с каптчей и с любым другим полем. так как урл ты палить не хочешь, хз что там конкретно нужно, но если сделать по той же логике что выше

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

if ($image->save_to_file_by_name('captcha', 'F:\captcha.jpg')) echo 'captcha saved by name = captcha<br>';
elseif ($image->save_to_file_by_number(6, 'F:\captcha.jpg')) echo 'captcha saved by num = 6<br>';
elseif ($image->save_to_file_by_number(9, 'F:\captcha.jpg')) echo 'captcha saved by num = 9<br>';
elseif ($image->save_to_file_by_number(11, 'F:\captcha.jpg')) echo 'captcha saved by num = 11<br>';
else {
  echo 'ERROR: captcha not found<br>';
  $app->pause();
}
проблема в том, что на странице каптча может быть под номером 11, тогда другая картинка под номером 6 сохранится как каптча.. я вообще с номерами работать не люблю, так как хз что там за номером будет, в идеале работать по атрибутам: name, id, value, inner text и т.п.
$image->save_to_file_by_number() если видит картинку с таким номером, сохраняет, он не знает каптча это или нет. имхо для каптчи лучше всего $image->save_to_file_by_url($url,$filepath,$exactly="true"); чтоб сохранить. $image->is_exist_with_attribute($attr_name,$attr_value,$exactly); чтоб проверить если она есть на странице

ilekor
Сообщения: 54
Зарегистрирован: 07 ноя 2010, 20:12

Re: Помогите новичку написать скрипт для Human!

Сообщение ilekor » 08 фев 2011, 14:08

nikson писал(а):
satih писал(а):лучше конечно в сурсе регуляркой найти
Где об этом можно почитать? Что это такое?

А почему вы ищите по имени? Не проще по части урла искать?

Выше давал способ поиска ищите /captcha/-это одна из всех каптч и дальше

http://www.humanemulator.net/objects/DO ... by_src.php
http://www.humanemulator.net/objects/DO ... by_url.php

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

$captcha = $image->recognize_by_anticaptcha("",'$captcha_file',$captchakey,"http://www.antigate.com");
satih, выше упомянул, что лучше по части урла.

nikson
Сообщения: 94
Зарегистрирован: 20 янв 2011, 02:36
Контактная информация:

Re: Помогите новичку написать скрипт для Human!

Сообщение nikson » 18 фев 2011, 21:38

Возник вопрос, если определять капчу по части урл, то как сделать перебор, возможны два варианта:

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

$image->save_to_file_by_url("/cache/verify","F:\captcha.jpg", "false");
$image->save_to_file_by_url("/kcaptcha/kcaptcha","F:\captcha.jpg", "false");
И еще один, бывает что капча отсутствует

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

// Есть ли инпут с name 'captcha_code'
if ($input->is_exist_with_name('captcha_code')) $custom_input = 'captcha_code';
// Есть ли инпут с name 'user_code'
elseif ($input->is_exist_with_name('user_code')) $custom_input = 'user_code';
// Инпута нет, что делать???
else {
  echo 'ERROR: input not found<br>';
  $app->pause();
}
и тогда дальнейшая регистрация прекращается, как это предотвратить?

И еще вопросик как быть если кнопка завершить регистрацию

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

$button->click_by_number(2);
Во-первых имеет разный текст (завершить или ок), во-вторых везде разный номер или 0 или 1 или 2, может как-то сначало реализовать поиск по тексту а затем уже по номеру?

Ответить