MechanizeとWatir-Webdriver:楽天ログイン

Yahooオークションの自動出品スクリプトをRuby版Mechanizeを使って書いたが、それを楽天で応用すると最初のログインでつまづいてしまった。

この件に関していつも参照させていただいている「きたももんが」さんに泣きついた処:

原因の詳細と取り敢えずの対処法を御示唆をいただいた(「きたももんが」さんありがとうございます):

そもそもFireFox(以下FF)で楽天にログイン出来なかったり、仮に出来たとしてもその直後に再度ログインを求められるという不具合は有名らしい。原因は解らないが「きたももんが」さんの示唆にあるようにクッキーに関係が有る様だ。

Ubuntu10.10上のFF,Opera,Arora,Epipathyで同様の問題が起こる。楽天で安定して使えるブラウザーはUbuntu上ではChromeとChromiumだけだった。因みに深くは調べていないが、Win7,XP上でChromeとIEは安定しているが、FFとSafariは同様の問題がでる。

楽天かFFかどちらのクッキー取扱いが「RFC的や実際的に正しいのか」かはきたももんがさんにお任せするとして(きたももんがさんよろしく!)、ブラウザーChrome/Chromiumを指定できるWatir-Webdriverをつかって急場を凌ぐことにした。

  • Watir-Webdriverはサイトのテストを自動化するのには良いのかもしれないけれど、
  1. 自動出品/再出品等の大量の商品データを取得・サブミットを繰り返す作業には
  2. 毎回・毎タブごとChrome/Chromiumインスタンスを立ち上げるので、遅すぎるのとメモリを食いすぎる。特にマルチスレッドを使いロックしまくると
  3. 人間が手動で作業するのと大してかわらないぐらいまで遅くなる。
  4. timeout処理と遅すぎるが故のエラー処理にコードの多くが割かれ、例え完璧に例外を捕まえたとしても例外処理メッセージの方が作業終了メッセージ(browser.close)よりも多く表示されるジレンマに陥る

結論は「Watir-Webdriverを使った自動再出品等の単純大量作業には向かない」でした。恐らく、

  • 大量のメモリとCPUパワーがあれば速度の点は解決できるかもしれない(何方か、贅沢な環境をお持ちの方教えて下さい。)
  • selenium-serverを使ってChrome/Chromiumブラウザを立ち上げなければ早くなるかもしれない?

 -参照:http://memolog.org/2011/01/watir-webdriver-in-headless.php

  • 上記の解決法で速度の問題がある程度解決できたとして、例えば「楽天オークション自動再出品」を1タスクとして複数のタスクを複数の楽天アカウントにたいして同時に行うWebアプリを書く場合、十分な速度とコントロールが達成できるか?

がこれからも問題になるとおもう。