我使用php包装器为casperjs - https://github.com/alwex/php-casperjs
我在网络上自动执行一些重复性作业,我需要访问项目的innerText,但我并不完全清楚如何从casperjs浏览器访问dom。
我认为在js中我会是
var arr = document.querySelector('label.input__label--above').innerText;
但是我不确定如何从php包装器访问同一个数组?我已设法填写表单并使用几行代码导航到我想要的页面,但访问dom似乎并不明显。
我的包装名为$ casper,所以我一直在使用
$casper->start("google.com")
作为一个例子,它应该把我放在谷歌页面,如果我然后想要访问dom,最终一些innerText可以告诉我怎么做?
答案 0 :(得分:4)
通常这是通过PhantomJS和CasperJS中的evaluate
完成的。 php-casperjs确实提供了evaluate
函数,但它并不适用于您的用例,因为$casper->evaluate
不会从页面上下文返回任何内容,而是对{{$casper
的引用1}}。
这是拥有如此小包装的价格。它只是缺少CasperJS的重要部分。您可以使用JavaScript编写CasperJS脚本,并使用exec
或其他类似函数从PHP调用它。
但是,您也可以尝试使用通过回调返回$casper
的函数扩展textContent
(请注意,innerText
在PhantomJS中不可用)。由于CasperJS的异步特性,它必须通过回调来完成。我不完全确定这是可能的,不重写大部分包装器。
答案 1 :(得分:1)
为了以后参与任何其他努力实现这一目标的人的参考,我浏览了包装器的代码,并且在执行时,脚本中最后一页的html作为数组的一部分返回
$result = $casper->run()
希望这有助于其他人。