Страница 4 из 5
Re: Помогите новичку написать скрипт для Human!
Добавлено: 14 май 2011, 00:21
nikson
Тут же
http://www.zhuk.net/users.php?m=register после подтверждения регистрации при заполнение профиля как реализовать вставку аватара с компа? Читал мануал, но так и не понял как это прописать...
Re: Помогите новичку написать скрипт для Human!
Добавлено: 18 май 2011, 02:25
nikson
Доброй ночи!
Как реализовать:
1) После регистрации на сайте где-то нужна активация по email, а где-то не нужна. После регистрации ищем текст "проверьте свой почтовый ящик" (Здесь все понятно), интересует следующее: если нужный текст не найден, то тогда пропустить активацию и перейти к дальнейшей регистрации.
Re: Помогите новичку написать скрипт для Human!
Добавлено: 18 май 2011, 03:14
satih
nikson писал(а):если нужный текст не найден, то
Код: Выделить всё
if (strpos($webpage->get_body(), 'нужный текст') === false) {
// go to the next registration
}
Re: Помогите новичку написать скрипт для Human!
Добавлено: 18 май 2011, 15:02
nikson
if (strpos($webpage->get_body(), 'нужный текст') === false) {
// go to the next registration
Что сюда вставлять?
}
Я так понимаю тут вставлять код дальнейшей регистрации, который идет после подтверждения реги по мылу?
Re: Помогите новичку написать скрипт для Human!
Добавлено: 18 май 2011, 17:27
satih
у тебя регистрация по всем ресурсам идет в цикле или как? если в цикле, то можно вставить continue или break или $app->restart если в другом файле.. без твоего скрипта хз что вставить, вставить переход к следущей реге по большому счету.
ты поставил условие "если нужный текст не найден, то", я его перевел в код.
Re: Помогите новичку написать скрипт для Human!
Добавлено: 18 май 2011, 21:47
nikson
Регистрация по ресурсам проходит в цикле. Почитал про работу оператора continue на примере числовых значений, но так и не разобрался к примеру ( Условие $i="бла-бла-бла"; если условие не выполняется то не прекратить работу цикла, а начать его новую итерацию, тоесть перейти к регистрации следующего url).
Re: Помогите новичку написать скрипт для Human!
Добавлено: 19 май 2011, 03:57
satih
правильно, поэтому как перейти к следущей регистрацие в цикле? прекратить данную итерацию и перейти к слeдущей, для чего и был придуман continue.
скажем если цикл переходит по урлам сайтов где регишься
foreach ($url_ar as $url) {
$browser->navigate($url);
// register
// submit
// проверка если нужна активация
if (strpos($webpage->get_body(), "проверьте свой почтовый ящик"))
continue; // тут прерываем данную итерацию и продолжаем к следущей
// если мы тут (continue не исполнился), значит нужна имеил верификация
// email verification
}
Re: Помогите новичку написать скрипт для Human!
Добавлено: 21 май 2011, 20:00
nikson
Спасибо, разобрался...
Re: Помогите новичку написать скрипт для Human!
Добавлено: 21 май 2011, 20:15
nikson
Интересует еще один вопрос, который я задавал в самом начале этой темы, тогда я просто использовал лишнее заполнение полей и не стал вникать во все тонкости, сейчас хочу разобраться...
При стандартной регистрации заполняем input_name, на некоторых сайтах присутствуют два одинаковых по имени поля input_name (для авторизации и регистрации). Выше в теме советовали использовать так:
substr_count($webpage->get_body(), 'name="input_name"');
при условии если два инпута, то снимаем атрибут:
$input->remove_attribute_by_name('input_name','name');
и далее
$input->set_value_by_name('input_name', $login);
Я задал условие так:
if (substr_count($webpage->get_body(), 'name="input_name"'));
{
// снимаем атрибут name с инпута под именем input_name
$input->remove_attribute_by_name('input_name','name');
}
Какое условие еще нужно дописать, чтобы все работало?
Re: Помогите новичку написать скрипт для Human!
Добавлено: 22 май 2011, 01:22
igvard
Условие количества. Если больше одного тогда убираем у первого инпута на странице атрибут name:
if (substr_count($webpage->get_body(), 'name="input_name"')>1);
{
// снимаем атрибут name с инпута под именем input_name
$input->remove_attribute_by_name('input_name','name');
}
Re: Помогите новичку написать скрипт для Human!
Добавлено: 23 май 2011, 01:19
nikson
Никак не могу понять в чем дело, здесь:
Код: Выделить всё
if (strpos($webpage->get_body(), 'нужный текст') === false) {
// go to the next registration
}
Толи
xuman тупит, то-ли я. По коду если нужный текст не найден, то должно выполняться условие, в моем случае условие то выполняется, то нет. Пробовал я и бред писать вместо нужного текста (условия выполнялись через раз). Я так понимаю текст ищется по полному словосочетанию или любое из слов?
Можно ли сделать так, если нужный текст найден, то
Код: Выделить всё
if (strpos($webpage->get_body(), 'бла-бла-бла') === true);
elseif (strpos($webpage->get_body(), 'бла-бла-бла') === true);
elseif (strpos($webpage->get_body(), 'бла-бла-бла') === true);
{
// Дальнейшие действия
}
Кстате тоже не работает.
И здесь непонятно, почему так происходит:
Код: Выделить всё
// Ищем input_name
if (substr_count($webpage->get_body(), 'name="input_name"')>1);
{
// снимаем атрибут name с инпута под именем input_name
$input->remove_attribute_by_name('input_name','name');
}
// Вводим логин.
$input->set_value_by_name('input_name', $login);
По коду, если на странице input_name больше одного, то выполняется условие $input->remove_attribute_by_name('input_name','name');
после выполнения условия $input->set_value_by_name('input_name', $login);. Тут проблема в том, что если на странице два
input_name то все работает, но если на странице один
input_name то условие тоже работает (хотя не должно),
если немного поменять код вместо:
Код: Выделить всё
// Ищем input_name
if (substr_count($webpage->get_body(), 'name="input_name"')>1);
{
// снимаем атрибут name с инпута под именем input_name
$input->remove_attribute_by_name('input_name','name');
}
// Вводим логин.
$input->set_value_by_name('input_name', $login);
Сделать вот так (убрать точку с запятой):
Код: Выделить всё
// Ищем input_name
if (substr_count($webpage->get_body(), 'name="input_name"')>1) {
// снимаем атрибут name с инпута под именем input_name
$input->remove_attribute_by_name('input_name','name');
}
// Вводим логин.
$input->set_value_by_name('input_name', $login);
То так работает, но теперь уже на странице где два
input_name пока точку с запятой не поставишь ничего работать не будет. В чем косяк? Не вижу логики в
;
Re: Помогите новичку написать скрипт для Human!
Добавлено: 23 май 2011, 10:25
satih
Код: Выделить всё
$html = $webpage->get_body();
if (strpos($html, 'текст_1') !== false || strpos($html, 'текст_2') !== false || strpos($html, 'текст_3') !== false) {
// Дальнейшие действия
}
почитай про оператор OR ||
тут и
тут
в примере выше мы ищем одно из трех словосочетаний, это вроде то что тебе было нужно. мелкая поправка, strpos сравнивают обычно с false, и именно через !== , так как если строка начинается с искомого текста, strpos возвращает ноль. если же текст найден, возвращается его место, что в принципе пойдет как true, но через === кажется не прокатит, так как возвращается номер, integer, а ты сравниваешь с true, boolean, другой тип.
отличие == от === (снова, прочитай по ссылкам выше), это что оба сравнивают, но === проверяет также совпадение типов, например integer или boolean.
-------------------------------------------------------------------
знак
; означает в пхп окончание логической команды. писать
if (); просто бесмысленно, так как после
if знаком
; ты прекратил действие
if. писать
if(){} да логично, исполнится все что между
{}, так что там где у тебя
if (); этот
if можно выкинуть, он не добавляет никакого логического функционала. (
igvard случайно написал
; после if ())
nikson писал(а):Тут проблема в том, что если на странице два input_name то все работает, но если на странице один input_name то условие тоже работает (хотя не должно)
условие исполнятся недолжно, в сурсе ищется строка name="input_name" , если условие исполняется когда ты видишь только один такой инпут, значит второй тоже есть в сурсе, просто ты его не видишь на экране, скорее всего он скрытый (hidden). посмотри в сурсе, убедишься что он там, гад, прячется.
кстати иногда хуман воспринимает id как name, поэтому бывает необходимо сделать две строки
Код: Выделить всё
$input->remove_attribute_by_name('input_name','id');
$input->remove_attribute_by_name('input_name','name');
иначе не смотря на то что убрали один name, хуман все равно будет лепить в инпут по id, принимая его за name.
Re: Помогите новичку написать скрипт для Human!
Добавлено: 25 май 2011, 00:15
nikson
Спасибо за помощь! Вот только чего-то условие не выполняется:
Код: Выделить всё
// Ищем input_name
if (substr_count($webpage->get_body(), 'name="input_name"')>1) {
// снимаем атрибут name с инпута под именем input_name
$input->remove_attribute_by_name('input_name','name');
}
// Вводим логин
$input->set_value_by_name('input_name', $login);
Не могу понять почему не выполняется условие, точно знаю что на странице два input_name. Если же прописать без условия, а как в порядке вещей то все работает:
Код: Выделить всё
// снимаем атрибут name с инпута под именем input_name
$input->remove_attribute_by_name('input_name','name');
// Вводим логин
$input->set_value_by_name('input_name', $login);
Может что-то с условием напутано?
Re: Помогите новичку написать скрипт для Human!
Добавлено: 25 май 2011, 00:41
igvard
Возможно надо проверить 'name="input_name"' что бы строка была в обоих случаях именно такой, а не например 'name = "input_name" '.
Re: Помогите новичку написать скрипт для Human!
Добавлено: 25 май 2011, 02:28
satih
командой
Код: Выделить всё
file_put_contents('debug.html', $webpage->get_body());
сохрани сурс в файл, и посмотри в текстовом редакторе что-же там за поля. точно что два раза это поле как 'name="input_name"' не стоит, иначе бы сработало.