ブラウザ操作はpuppeteer一択、casperjs使ってる人は乗り換え推奨
2019-09-21
ポエムです。
色々あってアレやコレをごにょごにょしなければいけないことになってしまい、またスクレイピング(正確にはブラウザ操作)地獄に陥ってました。
「公式がスクレイピング禁止!って言ってんだろ」「頻繁に対策入れてるから動かなくなっても知らないよ?」と色々やりたくない理由を言い続けてきたのですが、「やらないと取引が!か、会社が潰れるかもしれないんだ!」みたいな剣幕で迫られたのでやることになってしまったのですが、casperjsでは不可能なことが発覚しました。
対象のサービスがガッツリ対策入れてたため、メンテナンスされてないphantomjsを前提としたcasperjsではお話にならず、seleniumでも通らない(使い込んでないからかも)。仕方ないからpuppeteer使うか…とpuppeteerに切り替えたのですが、これが大正解。
ちょっと癖のあるpuppeteerですが、「テストツール以外のブラウザ操作用途なら」puppeteer一択だと思います。
puppeteerは導入が楽
npm i puppeteer
これだけでインストール完了。
「いやいや、seleniumだって大した手間かからないじゃん」と思う人も居ると思いますが、まあその通りです。ただ、puppeteerは勝手にChromiumをインストールするので(しない方法もあるが)ブラウザのバージョン違いとかで怒られる心配がありません。
ある程度の経験者であればどっちでも良いと思いますが、Railsのインストールでエラーが出てあたふたしてしまうような人だとseleniumは苦戦する可能性があります。でもpuppeteerなら大丈夫。
puppeteerしか通らないWebサービスが色々とある
puppeteerにはslowMoオプションというものがあり、実行速度をいじることが出来ます。これをやっとかないと、「こいつロボ間違いなし、排除します」みたいな感じではじかれるサービスが世の中にはあります。まあ、スクレイピング禁止だからなんですが、でもpuppeteerなら通っちゃう。
また、slowMo関係なくseleniumだと要素指定でも座標指定でも絶対にクリック出来ないボタンみたいなのが設置されているサイトがあります。waitをかけようが、jsで要素いじって調整しようが、どうやってもクリックが出来ない。結果ログインできないみたいなことが割とあります。でもpuppeteerだと通っちゃう。
また、jsで動的に動くエディターみたいなやつに「持ってきたデータをペーストして送信」みたいなことをやろうと思った時、seleniumではどうやっても通らないケースがあるのですが、puppeteerだと同じ事やっても通っちゃうことがあります。
マウスで狙ったエディターの入力エリアを座標でクリック、クリップボードに任意のテキストをセット、キーボード操作でCTRL+Vみたいな感じで通っちゃいます。
何で通るのか理由は忘れましたが。
スクレイピング禁止サイトを破るのには最適
けしからんことですが、世の中には禁止されている自動投稿やスクレイピングをやりたくて仕方のない人が沢山います。
例えばとあるサービスは毎日データを投稿することで表示優先度が上がり、毎日の投稿に大きな集客効果があったりします。Googleのように内容を精査する能力が無いので、とにかく毎日データを投稿すれば良いのです。しかも沢山投稿すればするだけ上位表示されてしまったりします。
しかし、毎日毎日パソコンを開いてログインして文章書いて投稿して…というのはかなり面倒です。特に、オーナー経営者兼プレイヤーみたいな人からしたら「そんな時間あるわけないだろ!」というのが本音だったりします。そこで自動投稿です。
自動投稿は禁止されています。しかし、どんなデータでも投稿すれば優先表示してしまうサービスの方に問題はないのでしょうか?
否!悪とはすなわち無駄を強いるサービス側である!資本を武器にWebの特定分野を占有し、無価値な労働を強要している彼らこそが悪である!
正義は我にあり!我らは技術を用いて、この悪逆非道の資本家に鉄槌を下す者である!
彼らに思い知らせてやるのだ!無慈悲なスクレイピングを!
降らせてやるのだ!自動投稿の雨を!
…と、私は全く思っていませんが、そういった言い訳で依頼してくる人は沢山いるので、puppeteerは結構使えると思いますよ。