Web crawler 如何使用噩梦ejs(或casperjs/phantomjs)实现表单的自动提交和重定向

Web crawler 如何使用噩梦ejs(或casperjs/phantomjs)实现表单的自动提交和重定向,web-crawler,phantomjs,nightmare,Web Crawler,Phantomjs,Nightmare,使用梦魇ejs,我想了解一些重定向和自动表单提交,这是由页面脚本调用的。我想看最后一页 例如,http://myexample/像这样: <html><body> <form action="http://somewhere/" method="post"> <!-- some params --> </form> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11

使用梦魇ejs,我想了解一些重定向和自动表单提交,这是由页面脚本调用的。我想看最后一页

例如,
http://myexample/
像这样:

<html><body>
<form action="http://somewhere/" method="post">
  <!-- some params -->
</form>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
$('form').submit();
</script>
</body></html>
var Nightmare = require('nightmare');
new Nightmare()
    .goto('http://myexample/')
    .wait(1000)
    .url(function(url) {
        console.log(url);
    })
    .evaluate(function () {
        return window.location.href;
    }, function (res) {
        console.log(res);
    })
    .run();
我尝试了
url
evaluate
方法,但无法获得最后一页

有没有办法支持这样的案例?使用casperjs或phantomjs的答案也很受欢迎

更新
我尝试过PhanomJS,并且能够跟踪重定向。但另一个问题是,由于
SSL握手失败
错误,连接失败。我解决了这个问题,添加了
--ssl protocol=any
选项

您可以使用API中描述的事件来检查何时发生重定向。如果使用
urlchanged
事件,您将获得可以使用的新URL

您可以使用.wait(fn[,arg1,arg2,…])方法来执行重新定向

var loginUrl = '...';
var loggedInUrl = '...';
new Nightmare().goto(loginUrl)
  .type('#username', '')
  .type('#password', '')
  .click('#loginBtn')
  .wait(function () {
    return window.location.href === loggedInUrl;
  });

或者,如果目标URL上有一些唯一的DOM元素,则可以使用.wait(选择器)方法。查看此处的文档:

这可能不适用于噩梦ejs。您是否尝试延长等待时间?这对于CasperJS来说应该很容易,但是过去在PhantomJS下的重定向存在问题。我尝试过PhantomJS,并且能够跟踪重定向。谢谢你的回复。谢谢你的回答。我通过添加
--ssl protocol=any
选项解决了这个问题。