サイトからデータを抜き取る必要がありますが、最初にログインする必要があります。私はhpricotを使って他のサイトを削り取ってきましたが、私はmechanizeを初めて使用していました。私は本当にそれを動作させる方法に困惑しています。MechanizeでRubyを使用してウェブサイトにログインする
私は、一般的に引用され、この例を参照してください。
require 'rubygems'
require 'mechanize'
a = Mechanize.new
a.get('http://rubyforge.org/') do |page|
# Click the login link
login_page = a.click(page.link_with(:text => /Log In/))
# Submit the login form
my_page = login_page.form_with(:action => '/account/login.php') do |f|
f.form_loginname = ARGV[0]
f.form_pw = ARGV[1]
end.click_button
my_page.links.each do |link|
text = link.text.strip
next unless text.length > 0
puts text
end
end
をしかし、私はそれが非常に不可解なことがわかりました。私が特に理解していない部分は、ここで起こっていることです:
f.form_loginname = ARGV[0]
f.form_pw = ARGV[1]
ページからの入力タグが突然どのようにメソッドになるのですか?私はここに何かを逃していますか私はAppDataPro(http://www.appdata.com/login)にログインし、それを再作成しようとすると、私はこのように、入力された名前は角かっこが含まれていることを問題に遭遇:
<Table>
<tr><td width="150">
<label for="user_session_username">Username</label><br />
</td><td >
<input id="user_session_username" name="user_session[username]" size="30" type="text" />
</td></tr>
<tr><td>
<label for="user_session_password">Password</label><br />
</td><td>
<input id="user_session_password" name="user_session[password]" size="30" type="password" />
</td></tr>
</table>
これは私の試みです
a = Mechanize.new
a.get('http://www.appdata.com/login') do |page|
# Click the login link
login_page = a.click(page.link_with(:text => /Login/)) #login_page is basically a doc of appdata/login
my_page = login_page.form_with(:action => '/login') do |f|
f.user_session[username] = '****username here?****'
f.user_session[password] = '****password here?****'
end
end
が、それは私がやっていると間違って何
logintest01.rb:21:in `block (2 levels) in <main>': undefined method `user_session' for nil:NilClass (NoMethodError)
、エラーの原因:Mechanizeのを使用するには?
ありがとうございました!これは完全に動作します! – Spacew00t
ようこそ。 – Senthess