Ruby 初心者スレッド Part 52at TECH
Ruby 初心者スレッド Part 52 - 暇つぶし2ch85:デフォルトの名無しさん
13/07/13 14:31:13.67
宝石がまたひとつ増えた

86:デフォルトの名無しさん
13/07/16 00:26:20.97
Tkのスレで聞いた方がいいかも知れないけど、
フレームをdestroyする時パックされてるボタンも一緒にdestroyされますか?

何か残骸みたいのが残ってたら気持ち悪いので

87:デフォルトの名無しさん
13/07/17 16:50:43.33
自力で解決できず行き詰っています。
どこが悪くてどうすればいいのか、どうか教えて下さい。

プログラムの目的:ニコニコ動画にログインする。
OS:Windows7
Ruby2.0.0を使っています。
(続きます)

88:デフォルトの名無しさん
13/07/17 19:41:35.84
(続き)
require 'mechanize'

agent = Mechanize.new

url = 'ニコニコ動画のURL'
page = agent.get(url)

next_page = page.link_with(:text => 'login').click

next_page = page.form_with(:name => 'mail' 'password') do |form|
form.mail = "自分のメールアドレス"
form.password =自分の設定したパスワード
end.submit

これに出たエラー↓
ファイル名:8:in `<main>': undefined method `click' for nil:NilClass (NoMethodError)

89:デフォルトの名無しさん
13/07/17 20:00:08.33
Mechanize 知らないのだけど page.link_with(:text => 'Login') だったりして

90:デフォルトの名無しさん
13/07/17 20:27:21.73
require 'mechanize'
mech = Mechanize.new
mech.user_agent_alias = 'Windows IE 7'
mech.ssl_version = 'SSLv3'

login = mech.get("URLリンク(www.nicovideo.jp)).forms[0]
login['mail'] = @mail
login['password'] = @password
login.submit

あれ? cant_loginになるな

91:87
13/07/17 20:28:30.01
>89 'Login'にしてみたらまた違うエラーになってしまいました・・・
エラーメッセージが長くてここに書けなそうです

92:87
13/07/17 20:32:19.74
>90 私も試してみましたが、また長いエラーメッセージが出ちゃいました

93:デフォルトの名無しさん
13/07/17 21:56:36.03
とりあえず、 >>88 の link_with(:text => 'login') はサンプルか何かの丸コピーで、
意味を把握してない疑いが…

標的となるフォームの構造は

<dt><label for="mail">ログインメールアドレス/電話番号</label></dt>
<dd><input id="mail" name="mail_tel" type="text" class="txt"></dd>

だからな。

94:87
13/07/17 22:22:58.68
>93ここを参考にしました
ownway.info/Ruby/index.php?mechanize%2Fabout

95:デフォルトの名無しさん
13/07/17 22:30:45.31
こんなんでいける? >>90 を参考にさせてもらいました

require 'mechanize'

ua = Mechanize.new do |mech|
  mech.user_agent_alias = 'Windows IE 7'
  mech.ssl_version = 'SSLv3'
end

homepage = ua.get("URLリンク(www.nicovideo.jp))
loginpage = homepage.link_with(:text => "Login").click
loginpage.form_with(:action => "URLリンク(secure.nicovideo.jp)) do |form|
  form["mail_tel"] = MYMAILADDR
  form["password"] = MYPASSWD
end.submit
# p ua.page

96:87
13/07/17 23:02:50.24
>95 また長いエラーメッセージが出ちゃいました

97:デフォルトの名無しさん
13/07/17 23:18:16.24
>>96
なんてエラーメッセージ?
個人情報伏せたうえで pastebin とかに貼ってもいいよ

98:87
13/07/17 23:47:25.61
エラーメッセージはこれです。
C:/Ruby200/lib/ruby/2.0.0/net/http.rb:918:in `connect': SSL_connect returned=1 e
rrno=0 state=SSLv3 read server certificate B: certificate verify failed (OpenSSL
::SSL::SSLError)
(続きます)

99:87
13/07/17 23:51:34.63
(続き)
from C:/Ruby200/lib/ruby/2.0.0/net/http.rb:918:in `block in connect'
from C:/Ruby200/lib/ruby/2.0.0/timeout.rb:52:in `timeout'
from C:/Ruby200/lib/ruby/2.0.0/net/http.rb:918:in `connect'
from C:/Ruby200/lib/ruby/2.0.0/net/http.rb:862:in `do_start'
from C:/Ruby200/lib/ruby/2.0.0/net/http.rb:857:in `start'
from C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-http-persistent-2.8/lib/net
/http/persistent.rb:628:in `start'
(続きます)

100:デフォルトの名無しさん
13/07/17 23:59:09.53
>>98
Windows だとうまくいかないんだって
URLリンク(rubydoc.info)

よくわかんなかったら 証明書 mechanize windows でぐぐって

101:87
13/07/18 00:03:22.24
(続き)
from C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-http-persistent-2.8/lib/net
/http/persistent.rb:570:in `connection_for'
from C:/Ruby200/lib/ruby/gems/2.0.0/gems/net-http-persistent-2.8/lib/net
/http/persistent.rb:926:in `request'
from C:/Ruby200/lib/ruby/gems/2.0.0/gems/mechanize-2.7.1/lib/mechanize/h
ttp/agent.rb:257:in `fetch'
from C:/Ruby200/lib/ruby/gems/2.0.0/gems/mechanize-2.7.1/lib/mechanize/h
ttp/agent.rb:974:in `response_redirect'

102:87
13/07/18 00:08:48.62
(続き)
from C:/Ruby200/lib/ruby/gems/2.0.0/gems/mechanize-2.7.1/lib/mechanize/h
ttp/agent.rb:298:in `fetch'
from C:/Ruby200/lib/ruby/gems/2.0.0/gems/mechanize-2.7.1/lib/mechanize.r
b:431:in `get'
from C:/Ruby200/lib/ruby/gems/2.0.0/gems/mechanize-2.7.1/lib/mechanize.r
b:330:in `click'
from C:/Ruby200/lib/ruby/gems/2.0.0/gems/mechanize-2.7.1/lib/mechanize/p
age/link.rb:30:in `click'
from ファイル名.rb:9:in `<main>'
(終わりです)

103:87
13/07/18 00:24:14.51
>>100 ありがとうございます。今度はエラーが出ませんでした!
エラーが出なかったということは、成功で良いのですよね?
確認する方法が分からないので少し不安ではありますが

104:デフォルトの名無しさん
13/07/18 07:06:02.53
サイト構造(HTML的な意味も含めて)を理解してないと辛い
いわゆるモダンブラウザが自動でやってる手順の多くを手動で書かないといけないからね

で、今なにやってるかというと、サイト利用のためにログイン済みクッキーが必要なので、
ログインページでログインしてMechanizeにクッキーを持たせてるんだ
Mechanizeオブジェクト(の、中)にクッキーが書き込まれてるので、そのままトップページや動画を読み込んでみればいい
たとえばトップページならユーザー名がHTMLに埋め込まれて送られてきているはず
ログイン失敗ならそのようなHTMLが送られてきているはず

余談だけどクッキーを外部保存して再利用することはニコ動ではおすすめできない(他のサイトでは可能)
これはサイト側の制限で、こちらではどうしようもない

105:デフォルトの名無しさん
13/07/18 10:02:07.58
そうだぬ
二重管理だと看做されると
強制ログアウトさせられるぬ


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch