dom — php-casperjs получает внутренний текст

Я использую PHP-оболочку для casperjs — https://github.com/alwex/php-casperjs

Я автоматизирую некоторые повторяющиеся задания в Интернете, и мне нужен доступ к внутреннему тексту элемента, но мне не совсем понятно, как получить доступ к dom из браузера casperjs.

Я думаю, в JS я бы нам

var arr = document.querySelector('label.input__label--above').innerText;

Однако я не уверен, как получить доступ к тому же массиву из оболочки PHP? Мне удалось заполнить формы и перейти на нужную страницу с помощью нескольких строк кода, но доступ к DOM не кажется очевидным.

Моя оболочка называется $ casper, поэтому я использую

$casper->start("google.com")

в качестве примера, который должен поместить меня на страницу Google, если я затем захочу получить доступ к DOM, и в конце концов какой-нибудь innerText может кто-нибудь сказать мне, как это сделать?

2

Решение

Обычно это делается через evaluate в PhantomJS и CasperJS. php-casperjs действительно обеспечивает evaluate функция, но это не относится к вашему случаю использования, потому что $casper->evaluate ничего не возвращает из контекста страницы, а скорее ссылка на $casper,

Это цена наличия такой маленькой обертки. Ему просто не хватает большой части CasperJS. Вы можете написать скрипт CasperJS так, как он предназначен для JavaScript, и вызывать его из PHP с помощью exec или какая-то другая подобная функция.

Вы также можете попытаться продлить $casper с функцией, которая возвращает textContent через обратный вызов (обратите внимание, что innerText недоступно в PhantomJS). Это должно быть сделано с помощью обратного вызова из-за асинхронной природы CasperJS. Я не совсем уверен, что это возможно, не переписывая большие части обертки.

4

Другие решения

Для дальнейшего использования кем-либо, кто борется со способами достижения этой цели, я просмотрел код для оболочки, и HTML-код с последней страницы в скрипте возвращается как часть массива при выполнении

$result = $casper->run()

Надеюсь, что это помогает другим.

1

По вопросам рекламы [email protected]