当前位置: 首页 > 面试题库 >

单击一个按钮以在PHP中运行casperJS并在带有按钮的同一PHP页面中生成结果

班安平
2023-03-14
问题内容

我有一个casperJS脚本,该脚本使用提供的凭据登录多个用户;返回成功和失败登录的数量,以及成功和失败的用户名。我试图通过单击PHP页面中的按钮来运行此脚本,并且在casperJS运行之后,我希望结果回显到单击按钮的同一页面上(而不重新加载页面)。

我当前的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脚本(但这显然导致脚本先运行,然后再加载页面),使用方法如下(来自如何从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>

这是激活oncl​​ick 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>


 类似资料:
  • 在我的程序中,它将单击浏览器中的一个按钮,并且在该页面中,应该会出现另一个按钮。出现该按钮后,我的程序将立即运行下一个操作来单击下一个按钮。我目前收到此错误: ElementNotVisibleException:消息:元素不可见 因此,我假设我正在调用该操作,以便在该按钮出现之前单击下一个按钮。我的问题是,我该怎么做才能让我的程序等到我可以点击按钮,再点击按钮? 这就是我的程序底部的代码的样子。

  • 在上图中,我正试图点击“继续发送电子邮件”按钮。这是我的代码: 要么是我的语法错误,要么是我对网页的糟糕理解让我失望了 任何帮助-非常感谢 谢了Rob

  • 我正在设计一个使用html和php的登录页面。它包括两个按钮,一个用于登录,另一个用于重定向到注册页面。我计划使用php代码验证同一页面上的登录数据。这是我的密码 但是注册按钮工作不正常。它不会重定向到注册页面。我不想把登记按钮放在表格外面。我希望保持相同的设计并实现所需的功能。

  • 我正试图让JQuery在按下下一个按钮时自动单击该按钮。在互联网上,我发现应该是这样的(查看JQuery部分)。但由于某种原因,它不起作用。 它们必须在同一个代码中吗? 我尝试过的:JQuery: 表单中的按钮1 HTML: 表单中的按钮2 HTML:

  • 我正在尝试在javafx的表格视图中实现一列中的两个按钮。我能够在一列中实现一个按钮,但无法在一列中添加两个按钮。我从这个链接中得到了一些想法 如何在JavaFX表视图中添加按钮 在TableView(JAVAFX)中的单元格中添加按钮 如何在TableView JavaFX的表列中添加两个按钮 我在上面的链接中使用了这个想法。然而,代码对我不起作用。 在中,不会显示“操作”列按钮。我哪里做错了。