繁体   English   中英

单击一个按钮在PHP中运行casperJS并使用按钮在相同的PHP页面中回显结果

[英]Clicking a button to run casperJS in PHP and echo results in same PHP page with button

我有一个casperJS脚本,它使用提供的凭据登录多个用户; 返回成功和失败登录的数量以及成功和失败的用户名。 我试图通过单击PHP页面中的按钮来运行此脚本,并且在运行casperJS之后,我希望将结果回显到单击按钮的同一页面(不重新加载页面)。 我查看并查看了以下Q / As,但这些都没有为我的问题提供足够的答案(因为一旦脚本结束就不会显示结果): 点击按钮运行php代码并回显结果运行/执行通过单击网页上的按钮CasperJS脚本CasperJS将数据传回PHP

我当前的Web服务器设置:

  • PhantomJS版本:1.9.7
  • CasperJS版本:1.1.0-beta3
  • Apache / 2.2.27(Unix)mod_ssl / 2.2.27 OpenSSL / 1.0.1h DAV / 2 PHP / 5.5.14
  • 在OS X 10.9.3上

我的casperJS脚本: 要点

我首先在PHP页面上调用了casperJS脚本(但这显然导致脚本首先运行,然后加载页面),使用它(来自如何从php API运行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>

这是激活的PHP页面,点击phpTest.php

<?php
echo exec("/home/user/casperjs/bin/casperjs /full/path/to/your_script.js"); 
?>

也许我这样做完全错了,我不应该有另一个PHP页面,我不确定。 我试图通过研究之前的Q / As来创建一个解决方案,但无法提出解决方案。 谢谢!

所以我想我可以使用AJAX在同一页面中显示casperjs回显结果。 我创建了一个带有两个按钮的HTML页面:1) 运行casperjs AJAX以运行AJAX,以及2) 运行casperjs以简单地加载执行casperjs脚本的PHP页面并将结果打印在新页面中。 这是HTML(在如何链接外部javascript文件的帮助下点击 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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM