[英]CasperJS timeout while logging into a bank account
我正在嘗試使用CasperJS登錄到Capital One 360銀行帳戶。 它會加載用戶名屏幕,正確輸入用戶名,加載密碼屏幕,但隨后會超時(大概沒有錯誤),並在輸入密碼后停止。
有人對我在做什么錯有任何想法嗎?
var casper = require('casper').create({
verbose: true,
logLevel: "debug"
});
var capone360 = "https://secure.capitalone360.com/myaccount/banking/login.vm";
casper.start(capone360);
casper.then(function(){
casper.waitForSelector("#ACNID", function() {
this.echo(this.getTitle());
this.sendKeys('#ACNID', username);
}, true);
});
casper.then(function(){
this.click("#btn_continue");
});
casper.then(function(){
this.waitForSelector("#currentPassword_TLNPI", function() {
this.echo(this.getTitle());
this.sendKeys('#currentPassword_TLNPI', password);
}, true);
});
casper.then(function(){
this.clickLabel("Continue", "a");
});
casper.then(function(){
this.waitForSelector("#deposittable", function() {
this.echo(this.getTitle());
}, true);
});
casper.run();
PhantomJS版本2.0.0
更新已切換到PhantomJS 1.9.8。 根據@Artjom B.建議。 現在有錯誤在說:“無法在不存在的選擇器上調度mousedown事件:xpath選擇器:// a [text()=“ Continue”]“。
嘗試點擊:
<a class="ada-new-win" href="javascript:void(0);" role="button" onclick="submitForm('continue'); return false;">Continue</a>
考慮到它正在等待密碼輸入框加載,我認為應該在那兒,但是我忘了其他東西嗎?
PhantomJS 2.0.0有一個錯誤,即使專門偵聽各種錯誤事件,錯誤也不會打印到控制台。 這就是為什么您看不到明顯的錯誤的原因:
TypeError:true不是函數
發生該錯誤的原因是您將true
作為waitForSelector()
的第三個參數提供,但函數簽名為
waitForSelector(String selector[, Function then, Function onTimeout, Number timeout])
腳本中的某些步驟似乎中斷了,因為找不到選擇器。 為onTimeout
傳遞的函數將被執行,但true
不是函數。 只需刪除第三個參數即可查看錯誤所在。 如果仍然沒有顯示任何內容,請嘗試使用PhantomJS 1.9.8。
您或者需要使用waitForSelector(x(selector))
等待“繼續”按鈕出現,並且/或者需要使用更強大的選擇器:
var x = require("casper").selectXPath;
...
var continueButtonSelector = x("//a[contains(text(), 'Continue')]");
casper.waitForSelector(continueButtonSelector);
casper.thenClick(continueButtonSelector);
有時這是必要的,因為元素可能是用這樣的空格定義的
<a> Continue </a>
^^^ ^^^
這意味着text()="Continue"
無法匹配。 瀏覽器渲染器無視此空白,但仍在DOM中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.