我有一个casperJS脚本,它使用提供的凭据登录多个用户;返回成功和失败登录的数量以及成功和失败的用户名。我试图通过单击PHP页面中的按钮来运行此脚本,并且在运行casperJS之后,我希望将结果回显到单击按钮的同一页面(不重新加载页面)。我查看并查看了以下问答,但这些都没有为我的问题提供足够的答案(因为一旦脚本结束,结果就不会显示):click on the button to run php code and echo result,Run/Execute CasperJS script by clicking a button on webpage,{{3 }}。
我当前的网络服务器设置:
我的casperJS脚本:CasperJS passing data back to PHP
我首先在PHP页面上调用了casperJS脚本(但这显然导致脚本首先运行,然后加载页面),使用它(来自gist):
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>
这是激活的PHP页面,点击 phpTest.php :
<?php
echo exec("/home/user/casperjs/bin/casperjs /full/path/to/your_script.js");
?>
也许我这样做完全错了,我不应该有另一个PHP页面,我不确定。我曾尝试通过研究之前的Q / As来创建解决方案,但无法提出解决方案。谢谢!
答案 0 :(得分:1)
所以我想我可以使用AJAX在同一页面中显示 casperjs 回显结果。我创建了一个带有两个按钮的HTML页面:1)运行casperjs AJAX 以运行AJAX,以及2)运行casperjs 以简单地加载执行casperjs脚本和打印的PHP页面结果在新页面中。这是HTML(在How to link external javascript file onclick of button的帮助下点击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 Essential Training):
// 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>