Я использую 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 может кто-нибудь сказать мне, как это сделать?
Обычно это делается через evaluate
в PhantomJS и CasperJS. php-casperjs действительно обеспечивает evaluate
функция, но это не относится к вашему случаю использования, потому что $casper->evaluate
ничего не возвращает из контекста страницы, а скорее ссылка на $casper
,
Это цена наличия такой маленькой обертки. Ему просто не хватает большой части CasperJS. Вы можете написать скрипт CasperJS так, как он предназначен для JavaScript, и вызывать его из PHP с помощью exec
или какая-то другая подобная функция.
Вы также можете попытаться продлить $casper
с функцией, которая возвращает textContent
через обратный вызов (обратите внимание, что innerText
недоступно в PhantomJS). Это должно быть сделано с помощью обратного вызова из-за асинхронной природы CasperJS. Я не совсем уверен, что это возможно, не переписывая большие части обертки.
Для дальнейшего использования кем-либо, кто борется со способами достижения этой цели, я просмотрел код для оболочки, и HTML-код с последней страницы в скрипте возвращается как часть массива при выполнении
$result = $casper->run()
Надеюсь, что это помогает другим.