Selenium-WebDriverNokogiriで同じファイルを開いても違うxpathを書かないといけないとダメで少しハマったのでメモ。

違いの原因

同じHTMLを解析してもSelenium-WebDriverChromeFirefoxで開いた時は任意の要素であるtbodyが挿入されるために違いが発生します。

実際の例

例えば

とある時に

Nokogiri の場合

Selenium WebDriver の場合

基本的な対策

大体の場合は//table//trとどちらにも対応できるように書いたらいいわけですが、汚いHTMLを解析するときに

//tr/td/font[contains(text(), 'Keyword')]/../../following-sibling::tr[3]/td

な感じで正確なタグの数が必要になることがあるのでそういう時に気をつけましょう。

参考

ruby – How to get element that have same parent and n th different position by xpath – Stack Overflow


sshでログインして処理の重たいコマンドを実行した後にセッションが途切れてしまうとそのコマンドをもう一度fbなどでフォアグラウンドに持ってこようと思っても残念ながらできません。違うシェルのインスタンスから立ち上げたらプロセスは別のインスタンスのシェルには持ってこれないかららしいです。

Screenの使い方

まず初めからコマンドをscreenを使って立ち上げておきましょう。

$ screen ruby it_takes_very_long.rb

そして、一旦sshの接続を切って繋ぎ直します。

$ screen -listをするとこんな感じで表示されるので

$ screen -r 31744.pts-0.Sakuraでスクリーンに繋ぎ直せば画面への出力をもう一度見ることが出来ます。

参考

Linux Screen Tutorial – YouTube


knife solo cook fooとするとBerkshelf::LockfileParserErrorってエラーが出てビビる。

対策

rm Berkshelf.lock で ロックファイルをを消したら治った。.gitignoreに加えてたほうが良いのかな? Gemfile.lockと同じく加えるかどうかに賛否両論ありそう。


デフォルトではConEmuで複数のタブを開いた状態でタスクバーのアイコンをクリックすると、どのタブを選択するかを選ばないとアクティブにすることができません。

自分はとりあえずクリックしたらアクティブになって欲しいので設定を変えてしまいます。

変え方

ConEmuのタイトルバーを右クリックしてSettingsを開いて
左上のFind:のところでActive console onlyと検索します。

するとMain->Task bar->Taskbar buttonsの項目のShow all consolesがデフォルトで選ばれてると思うので、それをActive console only (ConEmu window)に変えてSave settingsすればOKです。ステキ!


こんなふうにファイルを読み込むと標準では改行が入ってしまいます。

解決策

改行はいらないので消しちゃいましょう。


例えば foo.rbというRubyスクリプトの実行時間をシェル上で知りたかったらtime foo.rbとすればいいわけですが、残念ながらirb上ではtimeコマンドをそのまま使うことができません。

解決策

標準で用意されているBenchmarkライブラリを使えばOK.

こんな感じで表示されます。

0.750000がCPUを使った時間で0.835234が実際にかかった時間。
気にしないといけないのはCPUを実際に使ってたじかんなので前者のほうになります。

ちなみに自分の環境だと裏で動画のエンコードを走らせながらVirtualBox上のOSでやってたのでCPU使用時間の50倍ぐらい実際にかかってしまってました。

参考

Module: Benchmark (Ruby 2.1.1)

When benchmarking, what causes a lag between CPU time and "elapsed real time"? – Stack Overflow


基礎知識

コンソールとシェルは別物です

bashとかnyaosとかコンソールウィンドウの中で動くものがシェルです。この用語の違いをわかってないとそもそもコンソールというものを探すことができないので必須の知識になります。

シェルは nyaos がオススメ

Windows上で使うシェルはcygwinのbashとかGit付属のbashとかMSYSあたりのbashとか試してみましたが、結局はちゃんとWindows用に作られてるnyaos が一番便利だという結論にたどり着きました。

コンソールを変えよう

標準のcmd.exeで起動するコンソールウィンドウは文字幅が固定でコピペもまともに出来ない何かの罰ゲームではないかという出来なので別のものを探します。

候補はこんな感じ

  • ConEmu
  • Console 2
  • ckw-mod
  • ColorConsole
  • PowerCmd

ConEmu

現在一番よさそうなコンソールです。タブが使えて、新しいタブを開くときに現在のディレクトリを残したまま開けるのもポイントが高い。

Ctrl-aで行頭に移動とかそういうのも実装されてるし日本語も使えるし開発もさかんでStackoverflowに質問すると製作者が該当タグをウォッチしてるらしく直接回答をもらえる率が高いです。

ただ、何故か自分の環境だと時折動きがカクカクしだしビープ音が連続で鳴り響く時があります。間違えて大量にイベントが飛んでるくさいんですが、これが発生するとイライラするので使うのを控え中。

Console 2

動作も安定してるしタブも使える海外では定番のコンソールのようですが日本語が使えません。はい詰んだ。

ColorConsole, PowerCmd

この2つはそもそもシェルの変更ができませんでした。

ckw-mod

日本人が作られてるらしいので日本語周りのバグはなさそうなのですが、いかんせんタブがない。古くからのタブ信者である自分には使いづらい。

結論

誰かよいWindows上で使えるコンソールを教えてください。