【问题标题】:php-casperjs getting inner textphp-casperjs 获取内部文本
【发布时间】:2014-10-10 10:14:57
【问题描述】:

我正在使用 casperjs 的 php 包装器 - 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 有人可以告诉我怎么做吗?

【问题讨论】:

    标签: php dom casperjs


    【解决方案1】:

    通常这是通过 PhantomJS 和 CasperJS 中的evaluate 完成的。 php-casperjs 确实提供了一个evaluate 函数,但它不适用于您的用例,因为$casper->evaluate 不会从页面上下文返回任何内容,而是对$casper 的引用。

    这就是拥有这么小的包装纸的代价。它只是缺少 CasperJS 的很大一部分。您可以使用 JavaScript 编写 CasperJS 脚本,并使用 exec 或其他类似函数从 PHP 调用它。

    但是,您也可以尝试使用通过回调返回 textContent 的函数来扩展 $casper(请注意,innerText 在 PhantomJS 中不可用)。由于 CasperJS 的异步特性,它必须通过回调来完成。我不完全确定这是可能的,无需重写大部分包装器。

    【讨论】:

    • 谢谢,我之前使用 Javascript 并按照您的建议使用了 exec 函数,但我试图将所有这些都集中在一个屋檐下,可以这么说,因为 PHP 是我首选的此类语言的事情。这是迄今为止我发现的唯一包装器,所以不幸的是我可能不得不坚持使用混合的 javascript 和 php 方法。
    【解决方案2】:

    为了方便其他努力实现这一目标的其他人将来参考,我浏览了包装器的代码,脚本最后一页中的 html 在您执行时作为数组的一部分返回

    $result = $casper->run()
    

    希望这对其他人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-08
      • 1970-01-01
      • 2011-09-23
      • 2023-02-10
      • 1970-01-01
      • 1970-01-01
      • 2013-06-07
      • 1970-01-01
      相关资源
      最近更新 更多