доступ к DOM по аналогии с jscript

Все вопросы касающиеся использования
программы можно задать здесь
Ответить
sas
Сообщения: 75
Зарегистрирован: 24 апр 2011, 18:46

доступ к DOM по аналогии с jscript

Сообщение sas » 27 апр 2011, 01:19

как получить значение элемента DOM из атрибута по аналогии с jscript например для

this.document.getElementById('mai_9').style

this.document.all.myH1.innerHTML

document.body.innerHTML

в данном случае речь не о том что можно вызвать $webpage->get_document_body("false"); а о том есть ли какая-то функция которой можно передать как параметр "document.body.innerHTML" и получить результат?

с учетом что this.document.getElementById() это функция то возможно ищется функция типа jscript eval которая выполнит jscript код и вернет результат из return-а исполненного кода

Аватара пользователя
igvard
Site Admin
Сообщения: 241
Зарегистрирован: 31 июл 2008, 22:53

Re: доступ к DOM по аналогии с jscript

Сообщение igvard » 29 апр 2011, 13:46

для получения атрибутов у любого элемента по имени или id можно использовать функцию $element->get_element_attribute_by_name($name,$attribute,$frame=-1);

так же во всех объектах, которые работают с элементами есть аналогичные функции.

для подмены body можно использовать функцию $webpage->set_body($body);.

если это не то, тогда распишите пожалуйста задачу более подробно.

sas
Сообщения: 75
Зарегистрирован: 24 апр 2011, 18:46

Re: доступ к DOM по аналогии с jscript

Сообщение sas » 28 июн 2011, 22:14

вопрос - функции изменения атрибутов сразу же влияют на результаты поиска по атрибутам или фнукции поиска по атрибутам работают по однажды загруженному документу и изменения в DOM модели на поиск не влияют?

чтобы перебрать все ссылки с одинаковым текстом хочу
1. найти ссылку (номер) по тексту
2. получить из нее данные
3. тут нужно было бы найти следующую ссылку с тем же текстом, но такой функции нет. по-этому добавляю свой атрибут
4. изменяю внутренний текст элемента по поиску по своему атрибуту
5. сначала

$a_num=$anchor->get_number_by_inner_text("одинаковый текст",true);
$anchor->add_attribute_by_number($a_num,"my".$a_num,"");

$element->set_inner_text_by_atribute("my".$a_num,"","",true,-1);
или
$element->set_inner_html_by_atribute("my".$a_num,"","<div></div>",true,-1);

это не работает. непонятно почему. почему?

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

Re: доступ к DOM по аналогии с jscript

Сообщение satih » 29 июн 2011, 05:38

такой код для "перебрать все ссылки с одинаковым текстом" пойдет?

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

$tmp = explode('<br>', $anchor->get_all_inner_texts()); // парсим все урлы
$urls_numbers = array_keys($tmp, 'url_text'); // получаем номера всех урлов с текстом url_text
foreach ($urls_numbers as $url_num) {
  // обрабатываем все урлы с одинаковым текстом
}

sas
Сообщения: 75
Зарегистрирован: 24 апр 2011, 18:46

Re: доступ к DOM по аналогии с jscript

Сообщение sas » 03 июл 2011, 01:27

к сожалению не подойдет. тексты урлов разные. в том числе задача получить эти тексты.
пример: ссылки на друзей со страницы списка друзей ВК.
интересует и ссылка из которой виден id и название из которого видно имя

знаю что это должно делаться фунцией get_body_inter_prefix_all но как выяснилось с ней тоже есть проблемы (отдельная ветка в ошибках), во-вторых это для примера подходит get_body_inter_prefix_all а могло бы быть не так и нужно было бы перебрать все ссылки с разным окружающим кодом и выбор производить по отдельной логике типа средний цвет картинки на который ссылается анкор - зеленый. так что вопрос актуален для занесения в "good practice"/типовые решения.

кстати сейчас пытаюсь делать пример уже третим способом (повышаю скорость работы), а первый способ как раз к этому топику - делал

//удалить для поиска последующих
$anchor->add_attribute_by_number($a_num,"name","my".$a_num);
$anchor->add_attribute_by_number($a_num,"id","my".$a_num); //не стал искать какой id/name правильно

// СОБСТВЕННО НАКОНЕЦ-ТО ДОСТУП НАПРЯМУЮ К DOM !! ТО ЧТО Я ХОТЕЛ СОЗДАВАЯ ТОПИК !! согласитесь - это коряво
$browser->navigate('javascript:document.all.my'.$a_num.'.innerHTML="";void 0;');

и при следующем поиске

//получить номер по тексту
$a_num=$anchor->get_number_by_inner_text("Написать сообщение",true);
//нужная ссылка перед найденной
$a_num--;

находится уже следующая нужная ссылка

метод работае но достаточно медленно

а раскрывать полный список друзей вк постоянно перемещаясь в низ страницы отдельная история :)

п.с. балуюсь

Ответить