2014年8月1日金曜日

RubyでMechanizeを使ったときのめも

自動ログインするやつをRubyで書いたときのメモです。


文字コードとか

早速インストールします。
1
$ gem install mechanize

Fetching: unf_ext-0.0.6.gem (100%)
ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions for the /usr/local/lib/ruby/gems/2.1.0 directory.

1
$ sudo gem install mechanize

解決

「ページを読む部分」
ちなみに探しているフォームのnameがnilだった。
1
2
3
4
5
6
7
8
agent1 = Mechanize.new
page1 = agent1.get('URL')
 
p page1
page1.form_with(:name => nil){ |form|
  p form
  form.click_button
}
実行

incompatible character encodings: ISO-2022-JP and UTF-8
(Encoding::CompatibilityError)

参考サイト
Mechanizeでエンコーディングの推測に失敗するとき

1
2
3
4
5
6
7
8
9
agent1 = Mechanize.new
page1 = agent1.get('URL')
agent1.page.encoding = 'ISO-2022-JP'
 
p page1
page1.form_with(:name => nil){ |form|
  p form
  form.click_button
}

incompatible character encodings: ISO-2022-JP and UTF-8
(Encoding::CompatibilityError)

( ´,_ゝ`) ......
1
2
3
4
5
6
7
8
9
agent1 = Mechanize.new
page1 = agent1.get('URL')
agent1.page.encoding = 'UTF-8'
 
p page1
page1.form_with(:name => nil){ |form|
  p form
  form.click_button
}

解決
ruby側と同じ文字コードにする?p pageとかで表示すると読めないが通信はうまくいくっぽい。

httpsの場合

証明書をそのページからとってきて以下のようにするとうまくいった。
1
2
3
4
5
agent = Mechanize.new
agent.ssl_version = 'SSLv3'
agent.ca_file = "証明書があるパス"
agent.verify_mode = OpenSSL::SSL::VERIFY_PEER
agent.get('URL')

参考サイト

Mechanize についてgithub mechanize
Mechanize::Form
httpsでMechanizeを使う

0 件のコメント:

コメントを投稿