ブラウザ上の操作を自動化したくて、どうやるか調べたら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というのを使ってみた。
http://docs.casperjs.org/en/latest/quickstart.html
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待ってみた。キャプチャしたらちゃんとボタンが現れて、クリックもされていた。よかったー。