Mechanize を使用してログイン フォームを送信するときに問題が発生しました。たとえば、bitbucket にログインする必要がある場合:
a = Mechanize.new
a.get('https://bitbucket.org/') do |page|
login_page = a.click(page.link_with(text: 'Log In'))
my_page = login_page.form_with(action: '/account/signin/') do |f|
# The "username" and "password" below are the values of the "name" attribute of the two login form fields
f.username = 'MY_ACCOUNT_NAME'
f.password = 'MY_PASSWORD'
end.click_button
end
これは非常に簡単ですが、すべてのログイン フォームがこれら 2 つのフィールドに同じ「名前」の値を持っているわけではありません。たとえば、WordPress のログイン フォームは "log" と "pwd" を使用します。これにより、上記のコードが無効になります。
いくつかのパラメーターをこのメソッドに渡して、さまざまなログイン フォームで使用できるようにしたいと考えています。「文字列からオブジェクト属性名に変換する方法」に従おうとしましたが、失敗しました:
# auth_info is a hash
def website_login(auth_info)
a = Mechanize.new
a.get(auth_info[:login_page_url]) do |page|
land_page = page.form_with(action: auth_info[:login_form_action]) do |f|
# Now I am stuck with these two lines
????????
????????
# I tried to do it like this. Not working.
f.instance_variable_set('@'+auth_info[:username_field_name], auth_info[:username])
f.instance_variable_set('@'+auth_info[:password_field_name], auth_info[:password])
end.click_button
end
end
誰かが助けてくれれば本当に感謝します。