質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

CasperJS

CasperJSはJavaScriptで実装されたPhantomJSのユーティリティで UIテスト向けのJavaScript フレームワークです。

Q&A

解決済

1回答

3085閲覧

CasperJsで繰り返し処理

kadaj1613

総合スコア18

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

CasperJS

CasperJSはJavaScriptで実装されたPhantomJSのユーティリティで UIテスト向けのJavaScript フレームワークです。

0グッド

1クリップ

投稿2016/08/05 07:11

casperjsでとある処理を規定回数繰り返したいと思っています
繰り返す回数が多く繰り返す度に関数に渡す値が変わるので、for文で規定回数分casper.wait()と関数を使用しようと思っています。
関数を省いて、まず意図したとおりに繰り返し処理が行われるか確かめたところ、うまくいきません。
utils.dump()でどういった動きをしているか確かめてみたところ、

1 utils.dump(start);
2 utils.dump(end);
--1-2を規定回数繰り返し--
3 casper.wait()
4 utils.dump('wait突入')
--3-4を規定回数繰り返し--

startとendの内容が規定回数分表示され終わってから、casper.wait()内の utils.dump('wait突入');だけが規定回数繰り返されていました。

理想としては、
1 utils.dump(start)
2 utils.dump(end)
3 casper.wait()
4 utils.dump('wait突入')
--1-4を規定回数繰り返し--

上記1-4を1セットとして、規定回数繰り返したいです。

以上、ご回答を宜しくお願いいたします。

var casper = require('casper').create(); var utils = require('utils'); casper.start(); //指定のURLへ遷移する casper.open('http://???.co.jp/'); //検索条件設定後、検索開始 casper.then(function () { for(var start = 0; start < 50; start++){ for(var end = 0; end < 50; end++){ if(start == end){ continue; } utils.dump(start); utils.dump(end); casper.wait(100, function() { utils.dump('wait突入'); }); } } }); //処理の実行 casper.run();

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ご提示のプログラムですと、casper.then() の内部で実行された casper.wait() は、「waitする」という操作を登録するのみですので、実際に実行(wait)されるのは、casper.then() を抜けた後ですね。
(試してないですが、then() が他にいくつもあれば、それらの最後に追加されているのではと思います。)

似たような casper.then() を繰り返し記述せずに、ループの内部に記述するということで、以下のようにすれば目的の動きをしませんか?

lang

1// URLはYahooに変更し、ループの上限は3に変更してあります。 2 3casper = require('casper').create(); 4var utils = require('utils'); 5 6casper.start(); 7//指定のURLへ遷移する 8casper.open('https://www.yahoo.com/'); 9 10//検索条件設定後、検索開始 11for(var start = 0; start < 3; start++){ 12 for(var end = 0; end < 3; end++){ 13 if(start == end){ 14 continue; 15 } 16 (function(start, end){ 17 casper.then(function() { 18 utils.dump(start); 19 utils.dump(end); 20 casper.wait(100, function() { 21 utils.dump('wait突入'); 22 }); 23 }); 24 })(start, end); 25 } 26} 27 28//処理の実行 29casper.run();

投稿2016/08/07 09:38

q1701

総合スコア274

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kadaj1613

2016/08/08 01:35

ありがとうございます 目的通りに動きました 非常に助かりました、ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問