使用PhantomJS提交表格后如何获得结果?

时间:2016-12-29 03:36:41

标签: phantomjs

我试图使用PhantomJS从简单的表单中获取结果。我使用jQuery但不能工作。我有这个HTML:

<!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();

    };  


  });
});

1 个答案:

答案 0 :(得分:3)

不能在page.onLoadFinished内调用{p> page.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,并且即使在提交表单之前,幻像也会在第一次加载页面时退出。

您需要执行一些检查以区分页面的第一次和第二次加载。例如,如果return html变量为空,则表示我们尚未提交页面。