我正在尝试使用CasperJS来自动化大量繁琐的数据输入。具体来说,要在佳能网站上注册一大批相机设备。
我有处理表单填写的代码,使用CasperJS浏览网页时没有问题,但我无法让CasperJS导航到登录页面。
这是我到目前为止所拥有的:
var casper = require('casper').create({
verbose: true,
userAgent: 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36',
logLevel: "debug"
});
phantom.cookiesEnabled = true;
casper.start();
casper.thenOpen('https://b2cweb.usa.canon.com/b2cweb/view/myAccountHome.jsf?LOGINACTION=Y', function(response) {
require('utils').dump(response);
});
casper.run();
注意:上面的代码一旦到达页面就会转储标题内容。我还尝试了不同的用户代理字符串,以防Adobe主动阻止抓取工具。
该链接可在Google Chrome中完美运行,但CasperJS只记录以下内容。
加载资源失败,状态=失败
从Google Dev Tools看来链接302重定向到
https://b2cweb.usa.canon.com/b2cweb/view/myAccountHome.jsf?LOGINACTION=Y
然后301重定向到:
我假设重定向是导致CasperJS无法获取登录页面的原因。
是否有可能让CasperJS遵循这些类型的重定向?可以使用CasperJS通过HTTPS浏览和/或登录吗?
更新
我不确定这是否是导致问题的重定向。
作为一种解决方法,我尝试将会话cookie(从chrome复制)预先预加载到casperjs中,然后直接导航到帐户页面。
我也尝试在命令中添加--ignore-ssl-errors = true标志但没有成功。
无论我做什么,它都会返回一个about:blank url。
答案 0 :(得分:-1)
以下内容将引导您进入登录页面:
var casper = require("casper").create ({
waitTimeout: 15000,
stepTimeout: 15000,
verbose: true,
viewportSize: {
width: 1400,
height: 768
},
onWaitTimeout: function() {
logConsole('Wait TimeOut Occured');
this.capture('xWait_timeout.png');
this.exit();
},
onStepTimeout: function() {
logConsole('Step TimeOut Occured');
this.capture('xStepTimeout.png');
this.exit();
}
});
casper.on('remote.message', function(msg) {
logConsole('***remote message caught***: ' + msg);
});
casper.userAgent('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4');
// vars
var gUrl = 'http://www.usa.canon.com/cusa/home';
// Open URL and click sign in
casper.start(gUrl, function() {
this.clickLabel('Sign In', 'a');
});
//Sign in page
casper.then(function () {
//+++ ready for you to fill user information.
this.capture('xSignIn.png'); //+++ shows you are on signin page. can remove.
});
casper.run();