簡體   English   中英

重新運行casperjs腳本

[英]Re-run casperjs script

我是CasperJS的新手,已經編寫了簡單的抓取腳本,現在我面臨着更加艱巨的任務:我想從網址列表中抓取某種數據,但是有些頁面有時會“失敗”,我有一個驗證碼解析服務,因為默認情況下此頁面中的一些頁面具有驗證碼,但是phantomjs在呈現某些驗證碼時有時會不一致,有時會加載,有時則不會。

我認為的解決方案是使用無法加載驗證碼的頁面重新運行腳本,以獲取所需的數據量。 但是我似乎沒有讓它運行,我想到了用整個東西創建一個函數,然后在casper.run()方法內部調用它,並檢查所刮取的數據量是否達到了我需要的最小值(如果不重新運行),但是我真的不知道如何完成它,就我所見,casperjs在調用函數之前將步驟添加到了堆棧中(如果我錯了,請更正我)。 我也在考慮使用run.complete事件,但不確定如何做到這一點。 我的腳本是這樣的:

// This variable stores the amount of data collected
pCount = 0;
urls = ["http://page1.com","http://page2.com"];    
// Create casperjs instance...
casper.start();

casper.eachThen(urls, function(response) {
    if (pCount < casper.cli.options.number) {
        casper.thenOpen(response.data, function(response) {
        // Here is where the magic goes on
        })
    }
})
casper.run();

無論如何,我可以將casper.eachThen()塊包裝在一個函數中並執行類似的操作嗎?

casper.start();
function sample () {
    casper.eachThen(urls, function(response) {
        if (pCount < casper.cli.options.number) {
            casper.thenOpen(response.data, function(response) {
            // Here is where the magic goes on
            })
        }
    })
}
casper.run(sample);

另外,我嘗試使用slimerjs作為引擎來避免“不一致”,但是我無法設法在我擁有的casper.evaluate()內部使用casper.evaluate() __utils__.sendAjax()方法,所以這是一個大問題。 還是有一種方法可以在單獨的實例中異步執行GET請求? 如果是這樣,我將不勝感激您的建議

更新:我從未設法用casperjs解決它,但是我找到了針對我的特定用例的解決方法,請查看我的答案以獲取更多信息

也許帶有back功能,所以像這樣:

casper.start()
.thenOpen('your url');
.then(function(){
    var count = 0;
    if (this.exists("selector contening the captcha")){
    //continue the script
    }
    else if (count==3){
        this.echo("in 3 attempts, it failed each time");
        this.exit();
    }
    else{
        count++;
        casper.back();//back to the previous step, so will re-open the url
    }
.run();

我從來沒有找到一種方法可以從casper中做到這一點,這就是我解決的方法:

有一個程序A,用於管理用戶輸入(在我的情況下以C#編寫)。 該程序A是執行casperjs腳本並讀取其輸出的程序。 如果我需要重新運行該腳本,則只輸出一條帶有某些規范的消息,以便將其捕獲到程序A中。

這可能不是最好的方法,但是對我有用。 希望能幫助到你

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM