我有一个casperJS脚本,该脚本使用提供的凭据登录多个用户;返回成功和失败登录的数量,以及成功和失败的用户名。我试图通过单击PHP页面中的按钮来运行此脚本,并且在casperJS运行之后,我希望结果回显到单击按钮的同一页面上(而不重新加载页面)。
我当前的Web服务器设置:
我的casperJS脚本:要点
我首先在PHP页面上调用了casperJS脚本(但这显然导致脚本先运行,然后再加载页面),使用方法如下(来自如何从phpAPI运行casperJS脚本):
echo exec("/home/user/casperjs/bin/casperjs /full/path/to/your_script.js");
页面加载后,它确实从运行脚本回显了一部分结果。我不确定为什么它只选择回显最后一个 this.echo(JSON.stringify(tracker)); 。我显然希望它在脚本中打印所有回显,但这可能是另一个问题。我还想成为打包回声的色彩。同样,屏幕截图也没有发生。
现在,我实际上有了一个按钮,当我按下它时,只要casperJS脚本正在运行,它就会一直保持按下状态,一旦完成,它将变为未按下状态,但是没有回显任何结果。我没有办法知道脚本是否运行,因为没有截图,尽管按住按钮的时间长短使我相信它已经执行了。这是我的PHP页面:
<html> <head> <title>casperJS testing</title> </head> <body> <center> <p>Welcome to the casperJS Automated Testing Utility</p> <br> <input type="button" name="runcasperjs" onclick="casperjs()"><div id="results">Waiting for echoes</> <br> <?php ## This Function Below Sets PhantomJs So CasperJS Can Use It putenv("PHANTOMJS_EXECUTABLE=/usr/local/bin/phantomjs"); echo "Running PhantomJS version: "; echo exec('/usr/local/bin/phantomjs --version 2>&1'); echo "<br />"; echo "Running CasperJS version: "; echo exec('/usr/local/bin/casperjs --version 2>&1'); echo "<br />"; echo 'Current PHP version: ' . phpversion(); echo "<br />"; $version = apache_get_version(); echo "$version\n"; ?> </center> <script> function casperjs(){ var xhReq = new XMLHttpRequest(); var request = "http://pathToLocalHost/phpTest.php" // this will prepare a request to your server xhReq.open("GET", request, false); // send a request xhReq.send(null); document.getElementsByID("results").innerHTML=xhReq.responseText /// this will display results } </script> </body> </html>
这是激活onclick phpTest.php 的PHP页面:
<?php echo exec("/home/user/casperjs/bin/casperjs /full/path/to/your_script.js"); ?>
也许我这样做完全错误,我不确定应该没有另一个PHP页面。我试图通过研究先前的Q / A来创建解决方案,但无法提出解决方案。谢谢!
因此,我认为可以使用AJAX 在同一页面上显示 casperjs 回显的结果。我用两个按钮制作了一个HTML页面:1) 运行casperjs AJAX 以运行AJAX,以及2) 运行casperjs 以简单地加载执行casperjs脚本并将结果打印到新页面中的PHP页面。这是HTML(在“如何链接外部javascript文件onclick按钮以实现AJAX按钮单击的帮助下”):
<!DOCTYPE html> <html> <head> <title>casperJS testing</title> </head> <center> <body> <div id="mainContent"> <p>Welcome to the Automated Testing Utility</p> <table> <tr> <td><button id="button_AJAX">Run casperjs AJAX</button></td> <td><form action="runscript.php"> <input type="submit" value="Run casperJS"> </form></td> </tr> </table> </div> <script type="text/javascript"> var button = document.getElementById('button_AJAX'); button.onclick = function(){ var script = document.createElement("script"); script.type = "text/javascript"; script.src = "casperjsajax.js"; document.getElementsByTagName("head")[0].appendChild(script); return false; } </script> </center> </body> </html>
该 casperjsajax.js 代码(带的帮助下JS基础培训):
// 1: Create the request var myRequest; // feature check! if (window.XMLHttpRequest) { // does it exist? we're in Firefox, Safari etc. myRequest = new XMLHttpRequest(); } else if (window.ActiveXObject) { // if not, we're in IE myRequest = new ActiveXObject("Microsoft.XMLHTTP"); } // 2: Create an event handler for request to call back myRequest.onreadystatechange = function(){ if (myRequest.readyState === 4) { var p = document.createElement("p"); var t = document.createTextNode(myRequest.responseText); p.appendChild(t); document.getElementById("mainContent").appendChild(p); } }; // Open and send it myRequest.open('GET', 'scriptresults.php', true); // any parameters? myRequest.send(null);
该 scriptresults.php 代码:
<?php echo "Here are your test results!"; echo "<br />"; echo exec("/home/user/casperjs/bin/casperjs /full/path/to/your_script.js"); ?>
以及非AJAX 的 runscript.php 链接
<html> <head> <title>casperJS Test Results</title> </head> <body> <center> <p>Here are your results!</p> <br> <?php echo exec("/usr/local/bin/casperjs /full/path/to/your_script.js"); ?> </center> </body> </html>