2016-03-23 14 views
0

初めてAPKファイルをGoogle Playにアップロードするスクリプトを作成する必要があります(APIは、最初のバージョンの公開後にAPKをアップロードすることしかできません)。CasperJSを使用してGoogle PlayにAPKファイルをアップロードする

var fs = require('fs'); 
var data = fs.read('test.cookies'); 
phantom.cookies = JSON.parse(data); 

var x = require('casper').selectXPath; 
var casper = require('casper').create({ 
    //verbose: true, 
    //logLevel: 'debug', 
    stepTimeout: 60000, 
    pageSettings: { 
     loadImages: false, 
     loadPlugins: false, 
     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' 
    } 
}); 

casper.start().thenOpen('https://play.google.com/apps/publish/?dev_acc=14088528817615018970', function() { 
    if (this.getCurrentUrl().indexOf('accounts.google.com') == -1) { 
     // cookies working 
     this.bypass(3); 
    } else { 
     console.log('sign in page opened!') 
    } 
}); 

casper.then(function() { 
    console.log('populating form with email'); 

    this.evaluate(function() { 
     document.querySelector('input#Email').value = "[email protected]"; 
     document.querySelector('input#next').click(); 
    }); 
}) 

casper.waitForSelector("input#Email-hidden", function() { 
    console.log('populating form with password'); 

    this.evaluate(function() { 
     document.querySelector('input#Passwd').value = "passwd"; 
     document.querySelector('input#signIn').click(); 
    }); 
}) 

//Wait to be redirected to the Home page, and then make a screenshot 
casper.then(function(){ 
    console.log(this.getCurrentUrl()); 

    var cookies = JSON.stringify(phantom.cookies); 
    fs.write('test.cookies', cookies, 644); 
}); 

// Google play page 
casper.then(function() { 
    console.log('Current page: ' + this.getCurrentUrl()); 
}); 

casper.waitForSelector(".BVO4BTD-b-a.BVO4BTD-b-o.BVO4BTD-Be-a", function() { 
    console.log('Add new app'); 

    this.evaluate(function() { 
     document.querySelector('.BVO4BTD-b-a.BVO4BTD-b-o.BVO4BTD-Be-a').click(); 
    }); 
}); 

casper.waitForSelector(".BVO4BTD-hj-a", function() { 
    console.log('Filling form'); 
    this.capture('5.png',{ 
     top: 0, 
     left: 0, 
     width: 500, 
     height: 400 
    }); 

    this.evaluate(function() { 
     document.querySelector('.BVO4BTD-hj-a > input.gwt-TextBox').value = "App Teste"; 
     document.querySelector('.BVO4BTD-g-K .BVO4BTD-b-a.BVO4BTD-b-o').click(); 
    }); 
}); 

casper.waitForSelector(".BVO4BTD-gg-a .BVO4BTD-b-a.BVO4BTD-b-o", function() { 
    this.capture('6.png',{ 
     top: 0, 
     left: 0, 
     width: 500, 
     height: 400 
    }); 
    console.log('Current page: ' + this.getCurrentUrl()); 

    console.log('Click for app upload'); 
    this.evaluate(function() { 
    document.querySelector(".BVO4BTD-gg-a .BVO4BTD-b-a.BVO4BTD-b-o").click(); 
    }); 
}); 

casper.waitForSelector(".BVO4BTD-Re-b.BVO4BTD-g-U.BVO4BTD-d-b", function() { 

    this.capture('7.png',{ 
     top: 0, 
     left: 0, 
     width: 500, 
     height: 400 
    }); 

    /**/ 


    this.evaluate(function() { 
     document.querySelector(".BVO4BTD-Re-b.BVO4BTD-g-U.BVO4BTD-d-b .BVO4BTD-b-a.BVO4BTD-b-m").click(); 
     casper.page.uploadFile(".BVO4BTD-Re-b.BVO4BTD-g-U.BVO4BTD-d-b input[type=file]", '/path/to/apk/file.apk'); 
    }); 

    this.wait(3000, function() { 
     this.capture('8.png',{ 
      top: 0, 
      left: 0, 
      width: 500, 
      height: 400 
     }); 
    }); 
}); 

casper.run(function() { 
    console.log('end'); 
}); 

これらの手順は、すでに仕事:Googleの

  • (クッキーが保存されますので、それはこの部分をスキップ)再生中

    • サインここ

      は、私がこれまでしているスクリプトですApp Teste

    • アップロード先APK画面

    アップロードスクリプトを機能させることができません.Google Playのアップロードメカニズムの背後には多くのjavascriptがあります。

    アップロードの試行は、最後のwaitForSelectorセクションで行われます。

    ありがとうございます。

  • +0

    'evaluate'がサンドボックスです。その中に 'casper'を使うことはできません。 –

    +0

    私は同じことをしようとしています、そして私は同じ問題を抱えています。私のアップロードは0%でハングアップします。 –

    答えて

    1

    casper.pageは実際にはphantomjs WebPageオブジェクトであり、おそらくthis.evaluateの内部で使用すべきではありません。

    が同じ目標を達成するために、あなたは試すことができます。また

    casper.waitForSelector(".form-selector", function() { 
        // your capture code 
        casper.page.uploadFile('selector', '/path/to/file'); 
    }); 
    
    casper.then(function() { 
        // whatever you need to do after file upload 
    }); 
    

    を、フォームに記入し、あなたがcasper.fill()を試すことができます。

    出典:http://docs.casperjs.org/en/latest/modules/casper.html#then(キャスパー)、http://phantomjs.org/api/webpage/method/upload-file.html(phantomjs)

    0

    は、以下のスクリプトを確認してくださいそれが 注働くかもしれない:「ファイル名」は、ローカルディレクトリからファイルのパスです。

    var filename = /home/xyz/android/file_you_want_to_upload.apk

    casper.then(function() { 
         this.evaluate(function (fileName) { 
          __utils__.findOne('input[type="file"]').setAttribute('value', fileName) 
         }, {fileName: fileName}); 
         this.page.uploadFile('input[type="file"]', fileName); 
         console.log('Selecting a file'); 
        }); 
        casper.then(function() { 
         console.log("Clicking on Upload "); 
         this.click(x("xpath of upload button")); 
        }); 
    
    関連する問題