Casperjsを使って、テキストファイル内のURL一覧に沿って1行ずつURLを取り込み、URL毎にHTMLファイルと画像を保存したいと思っています。
javascript
1var stream = fs.open(files, 'r'); 2 3while(!stream.atEnd()) { 4 var line = stream.readLine(); 5 console.log(line + ' streamline'); 6 7 8var url = line; 9var links; 10 11// URLを開く 12casper.thenOpen(url,function() { 13 14 var article_str = this.evaluate(function() { 15 var Node = document.querySelector('html'); 16 return Node.innerHTML; 17 }); 18 19 20 //ファイル名取得 21 var src = url.lastIndexOf('='); 22 var itemid = url.substr(src + 1); 23 var htmlfile = itemid + '.txt'; 24 console.log(itemidfile + ' itemfile name'); 25 26 //取得した内容をファイルへ保存する(オプション’a'は追記モード) 27 fs.write(htmlfile, article_str, 'a'); 28 29 30 casper.then(function(){ 31 this.wait(5000, function() { 32 }); 33 }); 34 35 36 //メイン画像取得 37 38 var AnchorArrays = this.getElementsAttribute('#js-main-image', 'src'); 39 console.log('get element1'); 40 if(AnchorArrays == null) { 41 42 } 43 44 else { 45 46 var graphurl = "https://xxxxx.com" + AnchorArrays; 47 console.log(graphurl + ' mainurl'); 48 49 50 51 casper.then(function(){ 52 this.download(graphurl, itemid + '.jpg'); 53 console.log(graphurl + ' mainurl'); 54 55 console.log('wait 5sec A'); 56 casper.then(function(){ 57 this.wait(5000, function() { 58 }); 59 }); 60 61 }) 62 } 63}); 64}); 65
実際に動かしてみるとlog streamlineでテキストファイル内のURLがすべて表示されてしまいます。
その後、各URLが処理されているようなのですが、最終行のURL情報を使ったファイル名や画像名で上書きされているような動きを見せます。
ログメッセージで表示させたHTMLのURLと画像URLはきちんととれていました。
また保存されたファイルの中にすべてのURLのHTMLが保存されていました。
URL AはA.txt、Axxxx.jpg
URL BはB.txt、Bxxxx.jpg
になるようにするにはどうしたらよいのかご教授ください。
Javascriptは書き方で処理順番が変わると聞いたので、さっぱりイメージがわきません。
よろしくお願いします。
あなたの回答
tips
プレビュー