2010-02-01 7 views
0

기계가 올바른 게시물 쿼리을 전송하는지 알아 내려고하고 있습니다.게시물 양식 매개 변수가 파이어 폭스와 루비의 차이 기계적

포럼에 로그인하고 싶습니다. (다른 질문은 html source, mechanize log을 참조하십시오.) 로그인 페이지 만 다시 나타납니다. 그것으로 볼 때 나는 파이어 폭스

auth_username=myusername&auth_password=mypassword&auth_login=Login 같은 매개 변수로 게시물을 전송하지만 내 스크립트

auth_username=radek&auth_password=mypassword

가 확인 또는 &auth_login=Login 부분이 있어야합니다입니다 보내는 것을 볼 수있다? 그의 auth_login 양식 버튼이 아닌 필드 (이 중요한 경우 나도 몰라)는 정의되지 않은 메서드 그것은 나에게 보인다 search' for nil:NilClass (NoMethodError)

: 나는 내가 오류 'gems/mechanize-0.9.3/lib/www/mechanize/page.rb:13 in 메타있어 login_form['auth_login'] = 'Login'를 사용하여 추가하려고

당신은 더 많은 코드, HTML을 찾을 수 있습니다

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') #works 

puts login_form.buttons.inspect 
puts page.forms.inspect 
STDIN.gets 

    login_form.fields.each { |f| puts "#{f.name} : #{f.value}" } 
#STDIN.gets 
login_form['auth_username'] = 'myusername' 
login_form['auth_password'] = 'mypassword' 
    login_form['auth_login'] = 'Login' 
STDIN.gets 
page = agent.submit login_form 
#Display 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) } 

에 따라 내 다른 relat에 로그인 할

[#<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">}> 
] 

내 스크립트입니다 에 관한 질문 log in with browser and then ruby/mechanize takes it over?

답변

0

POST에서 firefox와 비교할 수있는 하나의 매개 변수가 없으면 로그인 할 수 없습니다. 새로운 매개 변수 추가로이 문제가 해결되었습니다. 그래서 웹 서버는 &auth_login=Login 매개 변수가 POST에 있어야한다고 생각합니다.

다른 질문으로 how to add new field to mechanize form을 읽을 수 있습니다.

관련 문제