Вопросы Php по Human Emulator

если не затруднит, у меня еще вопрос. вот проверил я регуляркой какой-нибудь шаг, после, два варианта, либо продолжаем, либо перезагружаемся и опять продолжаем, и в обе ветви приходится писать весь скрипт, в один просто скрипт, в другую перезагрузка и скрипт, вот пример
PHP:
$subject = $webpage->get_source();
$pattern = '/\bSorry\b/i';
if (preg_match($pattern, $subject))
 {
  перезагрузка и дальше скрипт  
} else {
    дальше скрипт
}
если после каждого шага то скрипт вырастет до бесконечных размеров, вопрос, что я делаю не так? :thenks:

Используем циклы, если нужно повторить несколько независимых шагов то самый простой цикл, если основывается на каких-то данных то читаем из файла по строчно и делаем на этих данных.
Перезагрузка - в данном случае заменится на команду continue - которая переходит к следующей иттерации цикла
 
чтобы разобраться накидал скрипт
PHP:
 while (1)
{
    $subject = $webpage->get_body();
    $pattern = '/\подключения\b/i';
    if (preg_match($pattern, $subject))
    {
     $browser->refresh();
sleep(10);


    }
    $browser->navigate('http://google.com/');
$browser->wait_for(240,1);

 $browser->navigate('http://rambler.ru/');
$browser->wait_for(240,1);

 $browser->navigate('http://rambler.rur/');
$browser->wait_for(240,1);
}
после перезагрузки он возвращается на гугль, а мне надо rambler.rur , т.е. где встали на страничку с ошибкой туда и вернуться, а не в начало скрипта.и как бы это все у меня еще в цикле for должо быть, дабы подставлять нужные строки из файла

p.s. rambler.rur это типа интернет отрубился, после перезагрузки он появился и rur превратилось в ru :) для наглядности
 
после перезагрузки он возвращается на гугль, а мне надо rambler.rur , т.е. где встали на страничку с ошибкой туда и вернуться, а не в начало скрипта.и как бы это все у меня еще в цикле for должо быть, дабы подставлять нужные строки из файла
p.s. rambler.rur это типа интернет отрубился, после перезагрузки он появился и rur превратилось в ru :) для наглядности

Что значит после перезагрузки?
Что имеется ввиду под страничкой с ошибкой?, где она возникает, и куда нужно вернуться

А так, у тебя сейчас бесконечный цикл, который получает код страницы(но перед этим навигации никуда не было, то есть страницы нету)
Далее проверяет регулярку, если есть совпадение, то ждет 10 сеукнд, обновляет страницу, и переходит на гагл, и два раза рамблер, и так по кругу
Как-то он немного бессмысленно выглядит =\
 
идет процесс, сначала на гугль, потом на рамблер, потом допустим отрубается интернет и надо опять на рамблер, но так как его нет выскакивает страничка "немогу загрузить страницу" (я для этого сделал не rambler.ru а rur, это для примера.), регулярка на ней видит слово "подключения" и выполняет перезагрузку страницы, и после этого по идее все в норме и надо перейти опять на рамблер, а скрипт выполняет опять все сначала и переходит на гугль, а мне это не надо.
P.S. я не превожу весь скрипт в пример, у меня все в цикле For, потом идут задачи одна, вторая и т.д. хочу после каждой поставить на проверку, если и инет отрубится то появится страничка,"невозможно отобразить страницу" на ней будет слово "подключения" и мне надо чтобы при обнаружении этого слова была перезагрузка до тех пор пока оно не исчезнит, и после, выполнение скрипта ДАЛЬШЕ, а не с начала, ребята, Super_BOT и mrr, если поможете, с меня WMZ гарантирую!!! могу дать скрипт в личку, может и вам пригодится, если поможете подправить, не прошу его переписывать, прошу подтолкнуть на путь истинный, не опытного программиста :)
 
после каждой загрузки страницы нужно проверять результат, это хороший принцип для скриптов которые работают круглосуточно, а тем более через прокси, которые часто дохнут посради работы.
В твоем случае можно сделать такой цикл:
PHP:
do {
 $browser->navigate('http://rambler.rur/');
 $browser->wait_for(240,1);
} while (CheckPage('rambler.rur') === false);
где нить добавь функцию:
PHP:
function CheckPage($page){
 switch ($page) {
  case 'google.com':
   if (загрузилась) return true;
   else return false;
  case 'rambler.ru':
   if (загрузилась) return true;
   else return false;
  case 'rambler.rur':
   if (загрузилась) return true;
   else return false;
 }
}

проверку загрузилась ли можно делать по урлу, по тексту на странице и по любым признакам. если не хочешь чтоб скрипт бешенно проверял страницу в цикле do while, можешь поставить там sleep(3) скажем. если не хочешь безконечный луп который может застрять на неизвестной ситуацие, можешь вместо do while, поставить for($i=0;;$i++) с рестартом когда $i дойдет до нелогичного числа при нормальном исполнение скрипта.
 
Попробуйте воспользоваться командами
PHP:
//$browser->check_connection($url,$timeout);
// проверим соединение с яндексом в течении 5 сек
if ($browser->check_connection("http://ya.ru/",5))
  echo "есть соединение c яндексом<br>";
else
  echo "нет соединения с яндексом<br>";
и, или
PHP:
//$browser->check_internet_connection();
// проверка включен ли инет вообще на компе
$op = $browser->check_internet_connection();
if($op===FALSE)
   echo  "нет инет соединения!!!";
else
 echo "есть инет!!";

Это проверка на соединение, и интернет, ну а правильность загрузки страницы, уже определяете по каким-нибудь уникальным словам на страницы, типа Гугл, Рамблер
 
возник вопрос, пользуюсь циклом
PHP:
$url=file('url.txt');
$url2=file('url2.txt');

for ($i=0;$i<10;$i++)

{
$browser->navigate($url[$i]);
$browser->wait_for(240,1);

$browser->navigate($url2[$i]);
$browser->wait_for(240,1);}
поочередно берет, сначала первую строчку, потом вторую и так 10 раз 10 строк. Вопрос, каким образом можно получить не первую строку, а скажем первых 3 строки, потом следующие три и т.д. и нужно это только для $url2, а $url пусть берет по одной.
 
PHP:
for ($i=0;$i<10;$i+=3) {
$url[$i]
$url[$i+1]
$url[$i+2]
}

надеюсь, смысл ясен?
 
поочередно берет, сначала первую строчку, потом вторую и так 10 раз 10 строк. Вопрос, каким образом можно получить не первую строку, а скажем первых 3 строки, потом следующие три и т.д. и нужно это только для $url2, а $url пусть берет по одной.

Проще было бы вынести в разные циклы, но если не получается, то нужно уточнить файлы одинакового размера, или урл2 в три раза больше? Если разного, то надо будет добавлять проверку на существование элемента ( фунцицей isset)
и к элементам обращаться примерно так $url2[$i*3] $url2[$i*3+1] $url2[$i*3+2]
 
Super_BOT тебе спасибо, но я ни чего непонял, а вот wal подкинул идею, оказывается можно вот так сделать и тогда все получится
PHP:
$url2=file('url2.txt');
$url=file('url.txt');

for ($i=0,$y=0;$i<110,$y<11;$i+=10,$y++) 
{
echo $url2[$y];
echo $url[$i];
echo $url[$i+1];
echo $url[$i+2];
echo $url[$i+3];
echo $url[$i+4];
echo $url[$i+5];
echo $url[$i+6];
echo $url[$i+7];
echo $url[$i+8];
echo $url[$i+9];
sleep(2);
}
 
Назад
Сверху