2014-10-10 73 views
2

我使用的PHP包裝器casperjs - https://github.com/alwex/php-casperjsPHP-casperjs讓內部文本

我在網絡上的一些自動化的工作周反覆,我需要訪問某個項目的innerText屬性,但它不是」我完全清楚如何從casperjs瀏覽器訪問dom。

我想在JS我想我們

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

但是我肯定新臺幣如何訪問從PHP包裝相同的陣列?我已經設法填寫表單並使用幾行代碼導航到我想要的頁面,但訪問dom看起來並不明顯。

我的包裝被稱爲$卡斯帕,所以我一直在使用

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

爲例,它把我的谷歌網頁上,如果我當時就想訪問DOM,並最終部分的innerText任何人可以告訴我該怎麼做?

回答

2

通常這是通過PhantomJS和CasperJS中的evaluate完成的。 php-casperjs確實提供了一個evaluate函數,但它不適用於您的用例,因爲$casper->evaluate不返回頁面上下文中的任何內容,而是返回$casper的引用。

這是有這樣一個小包裝的價格。它只是缺少CasperJS的很大一部分。您可以像使用JavaScript一樣編寫CasperJS腳本,並使用exec或其他類似函數從PHP中調用它。

然而,您也可以嘗試使用通過回調返回textContent的函數來擴展$casper(請注意,innerText在PhantomJS中不可用)。由於CasperJS的異步性質,必須通過回調來完成。我不完全確定這是可能的,不需要重寫大部分的包裝。

+0

謝謝我之前用Javascript做過這個,並且按照你的建議使用了exec函數,但我試圖把它全部放在一個屋檐下,可以這麼說,因爲PHP是我的首選語言。這是迄今爲止我發現的唯一封裝,所以我可能不得不如此堅持混合的JavaScript和PHP方法。 – dragonfly 2014-10-10 10:58:00

1

爲別人的方法,來實現這個奮鬥將來參考,我通過爲包裝代碼拖網,並且從腳本中的最終頁面的HTML,會返回一個陣列的一部分,當你執行

$result = $casper->run() 

希望這可以幫助別人。