Помогите новичку написать скрипт для Human!
Re: Помогите новичку написать скрипт для Human!
Тут же http://www.zhuk.net/users.php?m=register после подтверждения регистрации при заполнение профиля как реализовать вставку аватара с компа? Читал мануал, но так и не понял как это прописать...
Re: Помогите новичку написать скрипт для Human!
Доброй ночи!
Как реализовать:
1) После регистрации на сайте где-то нужна активация по email, а где-то не нужна. После регистрации ищем текст "проверьте свой почтовый ящик" (Здесь все понятно), интересует следующее: если нужный текст не найден, то тогда пропустить активацию и перейти к дальнейшей регистрации.
Как реализовать:
1) После регистрации на сайте где-то нужна активация по email, а где-то не нужна. После регистрации ищем текст "проверьте свой почтовый ящик" (Здесь все понятно), интересует следующее: если нужный текст не найден, то тогда пропустить активацию и перейти к дальнейшей регистрации.
Re: Помогите новичку написать скрипт для Human!
nikson писал(а):если нужный текст не найден, то
Код: Выделить всё
if (strpos($webpage->get_body(), 'нужный текст') === false) {
// go to the next registration
}
Re: Помогите новичку написать скрипт для Human!
if (strpos($webpage->get_body(), 'нужный текст') === false) {
// go to the next registration
Что сюда вставлять?
}
Я так понимаю тут вставлять код дальнейшей регистрации, который идет после подтверждения реги по мылу?
// go to the next registration
Что сюда вставлять?
}
Я так понимаю тут вставлять код дальнейшей регистрации, который идет после подтверждения реги по мылу?
Re: Помогите новичку написать скрипт для Human!
у тебя регистрация по всем ресурсам идет в цикле или как? если в цикле, то можно вставить continue или break или $app->restart если в другом файле.. без твоего скрипта хз что вставить, вставить переход к следущей реге по большому счету.
ты поставил условие "если нужный текст не найден, то", я его перевел в код.
ты поставил условие "если нужный текст не найден, то", я его перевел в код.
Re: Помогите новичку написать скрипт для Human!
Регистрация по ресурсам проходит в цикле. Почитал про работу оператора continue на примере числовых значений, но так и не разобрался к примеру ( Условие $i="бла-бла-бла"; если условие не выполняется то не прекратить работу цикла, а начать его новую итерацию, тоесть перейти к регистрации следующего url).
Re: Помогите новичку написать скрипт для Human!
правильно, поэтому как перейти к следущей регистрацие в цикле? прекратить данную итерацию и перейти к слeдущей, для чего и был придуман continue.
скажем если цикл переходит по урлам сайтов где регишься
foreach ($url_ar as $url) {
$browser->navigate($url);
// register
// submit
// проверка если нужна активация
if (strpos($webpage->get_body(), "проверьте свой почтовый ящик"))
continue; // тут прерываем данную итерацию и продолжаем к следущей
// если мы тут (continue не исполнился), значит нужна имеил верификация
// email verification
}
скажем если цикл переходит по урлам сайтов где регишься
foreach ($url_ar as $url) {
$browser->navigate($url);
// register
// submit
// проверка если нужна активация
if (strpos($webpage->get_body(), "проверьте свой почтовый ящик"))
continue; // тут прерываем данную итерацию и продолжаем к следущей
// если мы тут (continue не исполнился), значит нужна имеил верификация
// email verification
}
Re: Помогите новичку написать скрипт для Human!
Спасибо, разобрался...
Re: Помогите новичку написать скрипт для Human!
Интересует еще один вопрос, который я задавал в самом начале этой темы, тогда я просто использовал лишнее заполнение полей и не стал вникать во все тонкости, сейчас хочу разобраться...
При стандартной регистрации заполняем 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');
}
Какое условие еще нужно дописать, чтобы все работало?
При стандартной регистрации заполняем 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!
Условие количества. Если больше одного тогда убираем у первого инпута на странице атрибут name:
if (substr_count($webpage->get_body(), 'name="input_name"')>1);
{
// снимаем атрибут name с инпута под именем input_name
$input->remove_attribute_by_name('input_name','name');
}
if (substr_count($webpage->get_body(), 'name="input_name"')>1);
{
// снимаем атрибут name с инпута под именем input_name
$input->remove_attribute_by_name('input_name','name');
}
Re: Помогите новичку написать скрипт для Human!
Никак не могу понять в чем дело, здесь:
Толи xuman тупит, то-ли я. По коду если нужный текст не найден, то должно выполняться условие, в моем случае условие то выполняется, то нет. Пробовал я и бред писать вместо нужного текста (условия выполнялись через раз). Я так понимаю текст ищется по полному словосочетанию или любое из слов?
Можно ли сделать так, если нужный текст найден, то
Кстате тоже не работает.
И здесь непонятно, почему так происходит:
По коду, если на странице 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 (strpos($webpage->get_body(), 'нужный текст') === false) {
// go to the next registration
}
Можно ли сделать так, если нужный текст найден, то
Код: Выделить всё
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->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);
Re: Помогите новичку написать скрипт для Human!
Код: Выделить всё
$html = $webpage->get_body();
if (strpos($html, 'текст_1') !== false || strpos($html, 'текст_2') !== false || strpos($html, 'текст_3') !== false) {
// Дальнейшие действия
}
в примере выше мы ищем одно из трех словосочетаний, это вроде то что тебе было нужно. мелкая поправка, strpos сравнивают обычно с false, и именно через !== , так как если строка начинается с искомого текста, strpos возвращает ноль. если же текст найден, возвращается его место, что в принципе пойдет как true, но через === кажется не прокатит, так как возвращается номер, integer, а ты сравниваешь с true, boolean, другой тип.
отличие == от === (снова, прочитай по ссылкам выше), это что оба сравнивают, но === проверяет также совпадение типов, например integer или boolean.
-------------------------------------------------------------------
знак ; означает в пхп окончание логической команды. писать if (); просто бесмысленно, так как после if знаком ; ты прекратил действие if. писать if(){} да логично, исполнится все что между {}, так что там где у тебя if (); этот if можно выкинуть, он не добавляет никакого логического функционала. (igvard случайно написал ; после if ())
условие исполнятся недолжно, в сурсе ищется строка name="input_name" , если условие исполняется когда ты видишь только один такой инпут, значит второй тоже есть в сурсе, просто ты его не видишь на экране, скорее всего он скрытый (hidden). посмотри в сурсе, убедишься что он там, гад, прячется.nikson писал(а):Тут проблема в том, что если на странице два input_name то все работает, но если на странице один input_name то условие тоже работает (хотя не должно)
кстати иногда хуман воспринимает id как name, поэтому бывает необходимо сделать две строки
Код: Выделить всё
$input->remove_attribute_by_name('input_name','id');
$input->remove_attribute_by_name('input_name','name');
Re: Помогите новичку написать скрипт для Human!
Спасибо за помощь! Вот только чего-то условие не выполняется:
Не могу понять почему не выполняется условие, точно знаю что на странице два 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);
Код: Выделить всё
// снимаем атрибут name с инпута под именем input_name
$input->remove_attribute_by_name('input_name','name');
// Вводим логин
$input->set_value_by_name('input_name', $login);
Re: Помогите новичку написать скрипт для Human!
Возможно надо проверить 'name="input_name"' что бы строка была в обоих случаях именно такой, а не например 'name = "input_name" '.
Re: Помогите новичку написать скрипт для Human!
командойсохрани сурс в файл, и посмотри в текстовом редакторе что-же там за поля. точно что два раза это поле как 'name="input_name"' не стоит, иначе бы сработало.
Код: Выделить всё
file_put_contents('debug.html', $webpage->get_body());