2016-12-29 24 views
2

私はPhantomJSを使って簡単なフォームから結果を得ようとしています。私はjQueryを使用していますが、動作しません。PhantomJSで送信フォームを送信した後の結果の入手方法は?

<!doctype html> 
<html> 
<head> 
    <title>PhantomJS!</title> 
</head> 
<body> 
<form method="post" id="frm"> 
<input type="text" name="nombre" id="nombre" /> 
<input type="submit" value="Publicar" id="btn-submit" /> 
</form> 

Your name is <span id="nombrez"><?php if (isset($_POST['nombre'])) { echo $_POST['nombre'];} ?></span> 

</body> 
</html> 

そして、このJavascriptコード:

var page = require('webpage').create(); 
page.open('http://localhost/phantom/', function() { 
    page.includeJs("https://code.jquery.com/jquery-3.1.1.slim.js", function() { 
    page.evaluate(function() { 

     $('#nombre').val('Fabian'); 
    document.forms[0].submit(); 
    }); 

    page.onLoadFinished = function(){ 

    console.log($("#nombrez").html()); 
    phantom.exit(); 

    }; 


    }); 
}); 

答えて

3

page.onLoadFinishedpage.evaluateの内部が、主なPhantomJSスクリプト内で呼び出されてはなりません。

var page = require('webpage').create(); 

page.onLoadFinished = function(){ 

    var html = page.evaluate(function(){ 
     return document.getElementById("nombrez").innerHTML; 
    }); 
    console.log(html); 
    phantom.exit(); 

}; 

page.open('http://localhost/phantom/', function() { 
    page.includeJs("https://code.jquery.com/jquery-3.1.1.slim.js", function() { 
     page.evaluate(function() { 

     $('#nombre').val('Fabian'); 
      document.forms[0].submit(); 
     }); 
    }); 
}); 

しかしpage.onLoadFinished火災私はこのHTMLを持っていますページがロードされるたびに、この実装では、フォームが存在する前であっても、ファントムが最初にページがロードされる時間が終了します提出された。

ページの最初の読み込みと2番目の読み込みを区別するために、いくつかのチェックを実装する必要があります。たとえば、戻り値html変数が空の場合は、まだページを送信していないことを意味します。

+3

ありがとうございました。私はちょうどあなたのコードにこれを加えて、それは動作しますか: if(html!= ""){console.log(html); phantom.exit();} –

関連する問題