为什么Mechanize在尝试设置密码时返回“undefined method'value ='for nil:NilClass”?

时间:2013-07-11 02:13:54

标签: ruby scripting mechanize

我用Mechanize写了一个脚本来抓取一些链接,稍后我会编写代码放到Excel文件中。

目前我无法通过第一页进行身份验证。尝试在表单中设置密码并且无法在其中找到任何信息时,我一直收到一个未定义的方法value= for nil:NilClass

我的代码中甚至没有方法value=所以我不明白发生了什么。代码运行良好的用户名,但一旦我输入密码并按Enter键我得到错误:

users.rb:11:in `block (2 levels) in <main>': undefined method `value=' for nil:NilClass (NoMethodError)
    from (eval):23:in `form_with'
    from formity_users.rb:7:in `block in <main>'
    from /home/codelitt/.rvm/gems/ruby-2.0.0-p247/gems/mechanize-2.7.1/lib/mechanize.rb:433:in `get'
    from formity_users.rb:5:in `<main>'

这是我的users.rb脚本:

require 'rubygems'
require 'mechanize'

a = Mechanize.new
a.get('https://www.example.com') do |page| 
  #Enter information into forms
  logged_in = page.form_with(:id => 'frmLogin') do |f| 
    puts "Username?"
    f.field_with(:name => "LoginCommand.EmailAddress").value = gets.chomp
    puts "Password?"
    f.field_with(:name => "Login.Password").value = gets.chomp
  end.click_button

  #Click drop down
  admin_page = logged_in.click.link_with(:text => /Admin/)
  #Click Users and enter user admin section
  user_admin = admin_page.click.link_with(:text => /Users/)

  #Scrape and print links for now
  user_admin.links.each do |link|
    text = link.text.strip
    next unless text.length > 0 
    puts text
  end 
end

1 个答案:

答案 0 :(得分:1)

我认为您的错误来自

f.field_with(:name => "Login.Password")

似乎是nil。对于用户名,我看到您指定了输入名称LoginCommand.EmailAddress,密码输入名称为Login.Password

我希望任何编写此标记的人都使用一致的名称。也许你应该看看底层的html,看你在代码中使用了正确的字段名称。