है एक public class method रूप.. नए क्षेत्र को जोड़ने का तरीका प्रपत्र मशीनीकरण के लिए (गहरे लाल रंग का/मशीनीकरण)
मैंने कोशिश की मशीनीकरण के लिए क्षेत्र को जोड़ने के लिए
#login_form.field.new('auth_login','Login')
#login_form.field.new('auth_login','Login')
और दोनों मुझे एक त्रुटि देता है undefined method "new" for #<WWW::Mechanize::Form::Field:0x3683cbc> (NoMethodError)
मैंने कोशिश की login_form.field.new('auth_login','Login')
जो मुझे एक त्रुटि देता है
mechanize-0.9.3/lib/www/mechanize/page.rb:13 n `meta': undefined method `search' for nil:NilClass (NoMethodError)
लेकिन उस समय मैं फॉर्म जमा करता हूं। क्षेत्र एचटीएमएल स्रोत में मौजूद नहीं है। मैं इसे जोड़ना चाहता हूं ताकि मेरी स्क्रिप्ट द्वारा पोस्ट की गई POST क्वेरी में auth_username=myusername&auth_password=mypassword&auth_login=Login
अभी तक यह केवल auth_username=radek&auth_password=mypassword
भेजता है, जिसके कारण मैं लॉग इन नहीं कर सकता। बस मेरा विचार।
स्क्रिप्ट लग रहा है
require 'rubygems'
require 'mechanize'
require 'logger'
agent = WWW::Mechanize.new {|a| a.log = Logger.new("loginYOTA.log") }
agent.follow_meta_refresh = true #Mechanize does not follow meta refreshes by default, we need to set that option.
page = agent.get("http://www.somedomain.com/login?auth_successurl=http://www.somedomain.com/forum/yota?baz_r=1")
login_form = page.form_with(:method => 'POST')
puts login_form.buttons.inspect
puts page.forms.inspect
#STDIN.gets
login_form.fields.each { |f| puts "#{f.name} : #{f.value}" }
login_form['auth_username'] = 'radeks'
login_form['auth_password'] = 'TestPass01'
#login_form['auth_login'] = 'Login'
#login_form.field.new('auth_login','Login')
#login_form.field.new('auth_login','Login')
#login_form.fields.each { |f| puts "#{f.name} : #{f.value}" }
#STDIN.gets
page = agent.submit login_form
#Display welcome message if logged in
puts page.parser.xpath("/html/body/div/div/div/table/tr/td[2]/div/strong").xpath('text()').to_s.strip
puts
puts page.parser.xpath("/html/body/div/div/div/table/tr/td[2]/div").xpath('text()').to_s.strip
output = File.open("login.html", "w") {|f| f.write(page.parser.to_html) }
की तरह फार्म के .inspect लग रहा है
तरह[#<WWW::Mechanize::Form
{name nil}
{method "POST"}
{action
"http://www.somedomain.com/login?auth_successurl=http://www.somedomain.com/forum/yota?baz_r=1"}
{fields
#<WWW::Mechanize::Form::Field:0x36946c0 @name="auth_username", @value="">
#<WWW::Mechanize::Form::Field:0x369451c @name="auth_password", @value="">}
{radiobuttons}
{checkboxes}
{file_uploads}
{buttons
#<WWW::Mechanize::Form::Button:0x36943b4
@name="auth_login",
@value="Login">}>
]
@btelles पोस्टिंग के समय में करने के लिए इतना है! तो आपके कोड और http://mechanize.rubyforge.org/mechanize/WWW/Mechanize/Form/Field.html सार्वजनिक विधि वर्ग फ़ील्ड के लिए नया क्या अंतर है? – Radek
मैंने सोचा कि 'login_form [' field_name '] =' value'' काम नहीं करता है क्योंकि मैं फ़ील्ड जोड़ने और संशोधित करने की कोशिश नहीं कर रहा था। हो सकता है कि कोई इस बारे में विस्तार कर सके कि अगर उसके बारे में कोई और जानकारी है। – Radek
यदि आप [] = विधि के लिए "शो स्रोत" पर क्लिक करते हैं, तो आप देखेंगे कि कार्यान्वयन एक फ़ील्ड बनाता है यदि कोई "add_field" चलाकर पहले से मौजूद नहीं है! तरीका। यह कहता है "क्या एक क्षेत्र पहले से ही उस नाम से मौजूद है?" यदि नहीं, तो "add_field! (field_name, value)" ... – btelles