как использовать $webpage->get_body_inter_prefix_all ?

Все вопросы касающиеся использования
программы можно задать здесь
Ответить
Gilman
Сообщения: 8
Зарегистрирован: 08 мар 2013, 00:49

как использовать $webpage->get_body_inter_prefix_all ?

Сообщение Gilman » 08 мар 2013, 21:47

Привет, у меня вопрос, как правильно использовать $webpage->get_body_inter_prefix_all ?
Мне надо сделать авторегер для форумов
$browser->navigate('http://forum.v-galaktike.ru');
$anchor->click_by_inner_text('Регистрация');
$browser->wait(1);
$checkbox->click_by_id('cb_rules_agree');
$button->click_by_value('Регистрация');
$browser->wait(1);
$input->set_value_by_name('username','Gilman');
$input->set_value_by_name('password','passwrd12345');
$input->set_value_by_name('passwordconfirm','passwrd12345');
$input->set_value_by_name('email','xakep@mail.ru');
$input->set_value_by_name('emailconfirm','xakep@mail.ru');

echo $webpage->get_location_url();
echo $webpage->get_body_inter_prefix_all('<label for="humanverify">','</label>');


дело в том что на форуме в качестве антикапчи используется случайный вопрос и у меня не получается его выцыпить. Я попробовал так же и по другим шаблонам собрать элементы страницы. Но не получилось, как быть?


Так есть ли варианты?

Аватара пользователя
bigfozzy
Site Admin
Сообщения: 3047
Зарегистрирован: 28 июл 2008, 17:24
Контактная информация:

Re: как использовать $webpage->get_body_inter_prefix_all ?

Сообщение bigfozzy » 11 мар 2013, 14:43

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

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

echo $webpage->get_body_inter_prefix_all('<LABEL for="humanverify">','</LABEL>');
функцию

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

echo $webpage->get_body_inter_prefix('<LABEL for=humanverify>','</LABEL>');
описание get_body_inter_prefix_all: http://humanemulator.net/objects/WEB/we ... ix_all.php
описание get_body_inter_prefix: http://humanemulator.net/objects/WEB/we ... prefix.php

и в тексте страницы префиксы для разбора выглядят как: '<LABEL for=humanverify>','</LABEL>'
а не '<label for="humanverify">','</label>'

в итоге имеем скрипт ввиде:

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

$browser->navigate('http://forum.v-galaktike.ru');
$anchor->click_by_inner_text('Регистрация');
$browser->wait(1); 
$checkbox->click_by_id('cb_rules_agree');
$button->click_by_value('Регистрация');
$browser->wait(1); 
$input->set_value_by_name('username','Gilman');
$input->set_value_by_name('password','passwrd12345');
$input->set_value_by_name('passwordconfirm','passwrd12345');
$input->set_value_by_name('email','xakep@mail.ru');
$input->set_value_by_name('emailconfirm','xakep@mail.ru');

echo $webpage->get_location_url();
echo "<br>";
echo $webpage->get_body_inter_prefix('<LABEL for=humanverify>','</LABEL>');

Gilman
Сообщения: 8
Зарегистрирован: 08 мар 2013, 00:49

Re: как использовать $webpage->get_body_inter_prefix_all ?

Сообщение Gilman » 12 мар 2013, 08:45

кстати у вас в примере, тут указано http://humanemulator.net/objects/WEB/we ... prefix.php echo $webpage->get_body_inter_prefix_all("<TD>","</TD>"); потому и косяк получился. Да и я не совсем понял для чего указывать префикс заглавными, ведь в исходнике они написаны строчными?

Аватара пользователя
bigfozzy
Site Admin
Сообщения: 3047
Зарегистрирован: 28 июл 2008, 17:24
Контактная информация:

Re: как использовать $webpage->get_body_inter_prefix_all ?

Сообщение bigfozzy » 12 мар 2013, 13:42

Да и я не совсем понял для чего указывать префикс заглавными, ведь в исходнике они написаны строчными?
body часто отличается от исходного кода, т.е после обработки браузером исходный код может слегка отличаться, особенно в плане заглавных и строчных букв, да и после отработки JS.

Gilman
Сообщения: 8
Зарегистрирован: 08 мар 2013, 00:49

Re: как использовать $webpage->get_body_inter_prefix_all ?

Сообщение Gilman » 14 мар 2013, 15:55

Создавать новую тему не буду, просто отпишу тут.
На этот раз проблема уже связана с get_body_inter_prefix_all. Пытаюсь сделать свой парсер гугла, что бы разобраться с программой и за одно набить руку.
За основу решил использовать парсер гугла X-Scripts.com. Но работает он через одно место. Он выцыпляет ссылки из <cite> ссылка</cite>, но вид они могут иметь вида rutracker.org › ... › Разное (Веб-разработка и программирование). Естественно такой вид ссылки меня не устраивает. Чистить очень муторно, потому я хочу выдерать информацию из

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

<H3 class="r"><A class="l" onmousedown="return rwt(this,'','','','3','AFQjCNE-dFAI6dijgn-Zg7q7eIOcJtRXvQ','','0CDcQFjAC','','',event)" 

href="http://forum.blablabla.ru/">Форум Бла бла бла  - <EM>Powered by 

vBulletin</EM></A></H3>
Для этого пытаюсь заюзать функцию get_body_inter_prefix_all('<H3 class="r">','</H3>'); да бы потом почистить от мусора. Но функция не выдирает из html ничего вообще. пробовал и строчными писать.. так и не получилось запустить. Что я делаю не так?

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

$key = "запрос";

   $browser->navigate("google.com");

   $input->set_value_by_name("q",$key);
   $input->click_by_name("q");
   $keyboard->send_key(32,true);

   $keyboard->send_key(13,true);

	sleep(1);

echo $webpage->get_body_inter_prefix_alll('<H3 class="r">','</H3>');
echo $key;


Аватара пользователя
bigfozzy
Site Admin
Сообщения: 3047
Зарегистрирован: 28 июл 2008, 17:24
Контактная информация:

Re: как использовать $webpage->get_body_inter_prefix_all ?

Сообщение bigfozzy » 14 мар 2013, 17:35

Нужно использовать функцию так:

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

   $key = "веб";

   $browser->navigate("google.com");

   $input->set_value_by_name("q",$key);
   $input->click_by_name("q");
   $keyboard->send_key(32,true);

   $keyboard->send_key(13,true);

   sleep(1);

   echo $webpage->get_body_inter_prefix_all('<h3 class="r">','</h3>');
   echo $key;
Чтоб ыопределить префиксы и суффиксы нужно смотреть не source а текст DOM (меню Отладка->Показать Текст DOM) и еще в коде в функции на конце get_body_inter_prefix_alll

Ответить