как получить значение элемента 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-а исполненного кода
доступ к DOM по аналогии с jscript
Re: доступ к DOM по аналогии с jscript
для получения атрибутов у любого элемента по имени или id можно использовать функцию $element->get_element_attribute_by_name($name,$attribute,$frame=-1);
так же во всех объектах, которые работают с элементами есть аналогичные функции.
для подмены body можно использовать функцию $webpage->set_body($body);.
если это не то, тогда распишите пожалуйста задачу более подробно.
так же во всех объектах, которые работают с элементами есть аналогичные функции.
для подмены body можно использовать функцию $webpage->set_body($body);.
если это не то, тогда распишите пожалуйста задачу более подробно.
Re: доступ к DOM по аналогии с jscript
вопрос - функции изменения атрибутов сразу же влияют на результаты поиска по атрибутам или фнукции поиска по атрибутам работают по однажды загруженному документу и изменения в 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);
это не работает. непонятно почему. почему?
чтобы перебрать все ссылки с одинаковым текстом хочу
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);
это не работает. непонятно почему. почему?
Re: доступ к DOM по аналогии с jscript
такой код для "перебрать все ссылки с одинаковым текстом" пойдет?
Код: Выделить всё
$tmp = explode('<br>', $anchor->get_all_inner_texts()); // парсим все урлы
$urls_numbers = array_keys($tmp, 'url_text'); // получаем номера всех урлов с текстом url_text
foreach ($urls_numbers as $url_num) {
// обрабатываем все урлы с одинаковым текстом
}
Re: доступ к DOM по аналогии с jscript
к сожалению не подойдет. тексты урлов разные. в том числе задача получить эти тексты.
пример: ссылки на друзей со страницы списка друзей ВК.
интересует и ссылка из которой виден 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--;
находится уже следующая нужная ссылка
метод работае но достаточно медленно
а раскрывать полный список друзей вк постоянно перемещаясь в низ страницы отдельная история
п.с. балуюсь
пример: ссылки на друзей со страницы списка друзей ВК.
интересует и ссылка из которой виден 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--;
находится уже следующая нужная ссылка
метод работае но достаточно медленно
а раскрывать полный список друзей вк постоянно перемещаясь в низ страницы отдельная история
п.с. балуюсь