ruby - 为什么 Mechanize 在尝试设置密码时返回 "undefined method ' 值 =' for nil:NilClass"?

标签 ruby scripting mechanize

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

现在我无法通过第一页进行身份验证。我不断收到未定义的方法 value= for nil:NilClass尝试在表单中设置密码但找不到任何相关信息时。

我什至没有方法value=在我的代码中,所以我不明白发生了什么。该代码对于用户名运行良好,但是一旦我输入密码并按回车键,我就会收到错误消息:

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

最佳答案

我认为你的错误来自

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

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

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

关于ruby - 为什么 Mechanize 在尝试设置密码时返回 "undefined method ' 值 =' for nil:NilClass"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17583980/

相关文章:

java - Unix 脚本 : accessing required . 耳文件(按文件名掩码)

ruby - Watir 更改 Mozilla Firefox 首选项

python - 如何使用 Python 登录到简单的 Web 访问登录?

python - 在 python 的 mechanize 模块中写入文本输入时出现问题

ruby-on-rails - 使用 Mechanize 检查复选框

ruby - Watir:如何验证网页中不存在文本

ruby-on-rails - 可以访问 Rails 模型的 Ruby 脚本

ruby-on-rails - 格式化日期 ruby

ruby - 如何在 Ruby 中替换字符串中每个区分大小写的单词实例?

c# - Ruby和Dot net之间的加解密