PhantomJS同期方法でそれを使ってあなたを停止することは何もありませんが(あなたの結果は準備ができている前に、スクリプトが終了する)あなたは上記の記述1
のような問題を引き起こして、デフォルトで非同期に実行されます。
whileループでphantom.page.sendEvent('mousemove')
をちょうど使用してください。これにより、Webkitエンジンがページをロードしたり、必要なブラウザーイベントを処理したりするまで、イベントポンプをループし続けます。
var page = require('webpage').create();
// Step 1: View item
page.open('http://localhost/item3324.php');
do { phantom.page.sendEvent('mousemove'); } while (page.loading);
page.render('step1-viewitem.png');
// Step 2: Add to cart
page.evaluate(function() {$('#add-to-cart').click(); });
do { phantom.page.sendEvent('mousemove'); } while (page.loading);
page.render('step2-viewcart.png');
// Step 3: Confirm contents
page.evaluate(function() {$('#confirm-cart').click(); });
do { phantom.page.sendEvent('mousemove'); } while (page.loading);
page.render('step3-confirm.png');
page.loading
はまた、例えば、他のブール条件であることに注意してください:
do { phantom.page.sendEvent('mousemove'); }
while (page.evaluate(function() {return $("#panel").is(":visible");}));
呼び出しをエミュレートしようとしているtriflejs.orgプロジェクト(ファントムのInternet Explorerのバージョン)に取り組んでいる間、私はこのアプローチを発見PhantomJS環境内のtrifle.wait(ms)
に転送します。 page.evaluate内部
愚か溶液はのsetTimeout() – igor