読者です 読者をやめる 読者になる 読者になる

not good but great

プログラミング、アート、映画・本の感想について書きます。

PhantomJSでclickができないときはsetTimeoutで待ち時間を設ける

Javascript

ブラウザ上の操作を自動化したくて、どうやるか調べたらPhantomJSが出てきた。CasperJSなんかもあるらしい。

・参考
こちらをかなり参考にした。
PhantomJS でログインが必要なページでも自由自在にスクレイピング - 凹みTips

ボタンをクリックする

var left,top;
page.evaluate(function() {
 left = document.querySelector('.sampleClass').getBoundingClientRect().left;
 top = document.querySelector('.sampleClass').getBoundingClientRect().top;
});
page.sendEvent('click', left, top);

クリック位置を指定して、sendEventというものを使ってクリックをさせようと思ったが、うまくいかなかった。

CasperJSでやってみる

いろいろやってみたけど、できなかったので、PhatomJSではなくてCasperJSというのを使ってみた。
Quickstart — CasperJS 1.1.0-DEV documentation

casper.waitForSelector('form[action="/login"]', function() {
    this.fillSelectors('form#sampleIDName', {
        'input[name = email ]' : 'YYYYYY',
        'input[name = password ]' : 'XXXXXX'
    },true);
});

待ち時間を持って、ログインしようと思ってやってみたけどうまくいかず。PhantomJSではログインできたのに。。。

setTimeoutで待ち時間を設ける

PhantomJSでやり直しすることにした。

page.render('test.png');

キャプチャ画面を取ると、押したいボタンが非表示だった。これはまだローディングされていないということかと思ったので、待ち時間を設けることにした。

setTimeout(function(){
 page.evaluate(function() {
  left = document.querySelector('.sampleClass').getBoundingClientRect().left;
  top = document.querySelector('.sampleClass').getBoundingClientRect().top;
});
page.sendEvent('click', left, top);			
}, 3000);

setTimoutで適当に3000ms待ってみた。キャプチャしたらちゃんとボタンが現れて、クリックもされていた。よかったー。