CasperJS:为什么我的网址加载时会更改为:空白?

时间:2016-03-16 15:58:36

标签: javascript phantomjs casperjs

我是PhantomJS / CasperJS的初学者。

我只是想开始一个会话并确认它没问题。

这是我的代码:

var casper = require('casper').create({
    verbose: true,
    logLevel: 'debug',
    pageSettings: {
        loadImages: false,
        loadPlugins: false,
        userAgent: 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 Edge/12.0'
    }
});

casper.on('remote.message', function(msg) {
    this.echo('remote message caught: ' + msg);
});

casper.on("page.error", function(msg,trace) {
    this.echo("Page Error: " + msg, "ERROR");
});

casper.start('https://www.google.fr');

casper.then(function(){
    console.log('Page Loaded');
    this.test.assertTitle('Google', 'Welcome to Google');
});

casper.run();

当我运行这个简单的脚本时,我得到:

C:\Users\Booky\Documents\nike_project>casperjs --ignore-ssl-errors=true --ssl-protocol=tlsv1 debug.js

C:\Users\Booky\Documents\nike_project>[info] [phantom] Starting...
[info] [phantom] Running suite: 3 steps
[debug] [phantom] opening url: https://www.google.fr/, HTTP GET
[debug] [phantom] Navigation requested: url=https://www.google.fr/, type=Other, willNavigate=true, isMainFrame=true
[debug] [phantom] url changed to "https://www.google.fr/"
[debug] [phantom] Successfully injected Casper client-side utilities
[debug] [phantom] start page is loaded
[info] [phantom] Step anonymous 3/3 https://www.google.fr/ (HTTP 200)
Page Loaded
[debug] [phantom] Navigation requested: url=about:blank, type=Other, willNavigate=true, isMainFrame=true
[debug] [phantom] url changed to "about:blank"

我到处搜索,但我没有找到任何对我问题的回应。

环境

  • PhantomJS 2.1.1
  • CasperJS 1.1.0beta5

2 个答案:

答案 0 :(得分:4)

在CasperJS和PhantomJS Github Repos上有关于重定向到/打开的空白页面(请参阅下面的更新):空白页

  • - proxy-type = none 命令行参数
  

在Windows上,默认代理设置可能会导致大量网络   延迟(请参阅发行说明中的​​已知问题)。解决方法是   完全禁用代理,例如通过启动PhantomJS   --proxy-type = none命令行参数。 1

您的代码正常运行,具有以下版本:

  • PhantomJS 2.1.1
  • CasperJS 1.0.4
  • MacOSX的
[info] [phantom] Starting...
[info] [phantom] Running suite: 3 steps
[debug] [phantom] opening url: https://www.google.fr/, HTTP GET
[debug] [phantom] Navigation requested: url=https://www.google.fr/, type=Other, lock=true, isMainFrame=true
[debug] [phantom] url changed to "https://www.google.fr/"
[debug] [phantom] Successfully injected Casper client-side utilities
[debug] [phantom] start page is loaded
[info] [phantom] Step 3/3 https://www.google.fr/ (HTTP 200)
Page Loaded
PASS Welcome to Google
[info] [phantom] Step 3/3: done in 262ms.
[info] [phantom] Done 3 steps in 341ms

在casperjs 1.1.x beta和PhantomJS> 1.9.8中存在一些页面导航问题,其中建议将PhantomJS降级为1.9.7

我会建议,如果可能的话,尝试不同的版本

Github问题1485解决方案或@Ross解决方案可以解决问题 - 任何评论?

答案 1 :(得分:2)

我的步骤也有同样神秘的调试记录:

[debug] [phantom] Navigation requested: url=about:blank, type=Other, willNavigate=true, isMainFrame=true
[debug] [phantom] url changed to "about:blank"

在我的情况下,我需要单击AJAX表单上的“提交”按钮,该表单是href='javascript:;'的链接元素。事实证明,这本身并不是主要问题。相反,他们的Web系统是使用Apache Wicket java Web框架构建的,该框架为每次搜索交互发出有状态会话。它通过重定向发生 - 这是关键点。

现在,CasperJS支持两个引擎 PhantomJS SlimerJS ...在深入了解CasperJS文档时,我打开了这个链接页面Differences between SlimerJS and PhantomJS,其中指出:

'PhantomJS不进行重定向,而SlimerJS则进行重定向。'

这里的参考是我的选项设置为最松散并且启用了调试(其中一些是默认值):

var casper = require('casper').create({
    engine: 'slimmerjs',
    verbose: true,
    logLevel: 'debug',
    exitOnError: false,
    ignoreSslErrors: true,
    pageSettings: {
        javascriptEnabled: true,
        loadImages: true,
        loadPlugins: true,
        localToRemoteUrlAccessEnabled: true,
        userAgent: 'Mozilla/5.0 (X11; CrOS x86_64 8172.45.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.64 Safari/537.36',
        XSSAuditingEnabled: false,
        logLevel: 'debug'
    }
});