課題
S::R::D (webDriver)+ PhantomJS でファイルダウンロードができない
解決法
前回から検証を進めた結果、以下の方法が良いと思いました。
- S::R::D でエクスポートボタンをクリックした状態を、PhantomJSにうまいこと渡してダウンロード処理をする
そもそも、前にGitHubでissueを発行したときも「ようわからん」的な返答を頂いたので、あまり一般的な方法じゃないんでしょうね。
How to download file with Phantomjs?
よって、webDriver の操作なしでファイルダウンロードを実行したほうが良いということになりました。
また、ログイン操作やクリック遷移はPhantomJS単体でもできるので、「うまいこと渡す」というのもやめました。そのサンプルコードが以下です。
// コマンドラインからparameter を受け取り、facebookにログインしてログイン後のホーム画面をキャプチャする
// 引数受け取り
var system = require("system");
var username = system.args[1];
var password = system.args[2];
// facebookログイン
var page = require("webpage").create();
page.open("https://ja-jp.facebook.com/",function(){
page.onLoadFinished = function(){
page.render("facebook_login.png");
phantom.exit();
}
page.evaluate(function(arr){
document.querySelector("#email").value = arr[0];
document.querySelector("#pass").value = arr[1];
document.querySelector("#login_form").submit(); //フォームのIDを指定
},[username,password]);
})
上記のコードはコンソールから以下のように実行します
phantomjs facebook_login.js <facebookユーザ名> <facebookパスワード>
正直、このサンプルはここの内容をほぼ パクっただけ なので、参照元様に感謝です。
今後
ここの記事を参考にしてcoffeescriptでコードを書いていますが、getElementById の箇所で TypeError: 'null' is not an object
エラーが頻発してます。慣れの問題なんでしょうが、coffeescriptは初めてなので何が問題なのかようわかっておりません。。