2011-02-18 8 views
4

mechanize로 양식을 제출하려고합니다. 그러나 제출시에는 아무런 변화가 없습니다. 로그인 페이지가 다시 나타납니다.Mechanicalize로 양식을 사용하여 로그인 할 수 없습니다.

형태 :

http://affilate.mikkelsenmedia.dk/partnersystem/mylogins.php

require 'Mechanize' 
agent = WWW::Mechanize.new 
agent.get("http://affilate.mikkelsenmedia.dk/partnersystem/mylogins.php") 

form = agent.page.forms.first 
form.username = 'username' 
form.password = 'password' 
form.submit 

라이브 HTTP 로그 때 브라우저에서 로그인 :

http://affilate.mikkelsenmedia.dk/partnersystem/mylogins.php 

POST /partnersystem/mylogins.php HTTP/1.1 
Host: affilate.mikkelsenmedia.dk 
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; da; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: da,en-us;q=0.7,en;q=0.3 
Accept-Encoding: gzip,deflate 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Keep-Alive: 115 
Connection: keep-alive 
Referer: http://affilate.mikkelsenmedia.dk/partnersystem/mylogins.php 
Cookie: XXX 
Content-Type: application/x-www-form-urlencoded 
Content-Length: 47 
username=username&password=password&send=Submit 
HTTP/1.1 200 OK 
Date: Fri, 18 Feb 2011 17:07:15 GMT 
Server: Apache/2.0.63 (CentOS) 
X-Powered-By: PHP/5.1.6 
Expires: Thu, 19 Nov 1981 08:52:00 GMT 
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
Pragma: no-cache 
Content-Length: 77 
Connection: close 
Content-Type: text/html; charset=UTF-8 

콘솔 :

irb(main):001:0> require 'Mechanize' 
=> true 
irb(main):002:0> agent = Mechanize.new { |agent| 
irb(main):003:1* agent.user_agent_alias = 'Mac Safari' 
<"http://affilate.mikkelsenmedia.dk/partnersystem/mylogins.php") 
=> #<Mechanize::Page 
{url 
    #<URI::HTTP:0x2a1c770 URL:http://affilate.mikkelsenmedia.dk/partnersystem/mylo 
gins.php>} 
{meta} 
{title "Partner System - Log-in"} 
{iframes} 
{frames} 
{links} 
{forms 
    #<Mechanize::Form 
    {name "loginform"} 
    {method "POST"} 
    {action "mylogins.php"} 
    {fields 
    #<Mechanize::Form::Text:0x2836680 
    @name="username", 
    @node= 
     #(Element:0x141b3e8 { 
     name = "input", 
     attributes = [ 
      #(Attr:0x13e4458 { name = "type", value = "text" }), 
      #(Attr:0x13e4440 { name = "name", value = "username" }), 
      #(Attr:0x13e43e0 { name = "size", value = "30" })] 
     }), 
    @value=""> 
    #<Mechanize::Form::Field:0x2836230 
    @name="password", 
    @node= 
     #(Element:0x141b22c { 
     name = "input", 
     attributes = [ 
      #(Attr:0x13ac148 { name = "type", value = "password" }), 
      #(Attr:0x13ac13c { name = "name", value = "password" }), 
      #(Attr:0x13ac10c { name = "size", value = "30" })] 
     }), 
    @value="">} 
    {radiobuttons} 
    {checkboxes} 
    {file_uploads} 
    {buttons 
    #<Mechanize::Form::Submit:0x2835f90 
    @name="send", 
    @node= 
     #(Element:0x141b01c { 
     name = "input", 
     attributes = [ 
      #(Attr:0x13702e0 { name = "type", value = "submit" }), 
      #(Attr:0x13702d4 { name = "name", value = "send" }), 
      #(Attr:0x13702c8 { name = "class", value = "style2" }), 
      #(Attr:0x13702bc { name = "value", value = "Submit" })] 
     }), 
    @value="Submit">}>}> 

irb(main):006:0> form = agent.page.forms.first 
irb(main):007:0> form.username = 'username' 
=> "username" 
irb(main):008:0> form.password = 'password' 
=> "password" 
irb(main):009:0> form.submit 
=> #<Mechanize::Page 
{url 
    #<URI::HTTP:0x2a82e78 URL:http://affilate.mikkelsenmedia.dk/partnersystem/mylo 
gins.php>} 
{meta} 
{title "Partner System - Log-in"} 
{iframes} 
{frames} 
{links} 
{forms 
    #<Mechanize::Form 
    {name "loginform"} 
    {method "POST"} 
    {action "mylogins.php"} 
    {fields 
    #<Mechanize::Form::Text:0x2a52c50 
    @name="username", 
    @node= 
     #(Element:0x1529694 { 
     name = "input", 
     attributes = [ 
      #(Attr:0x1513c14 { name = "type", value = "text" }), 
      #(Attr:0x1513c08 { name = "name", value = "username" }), 
      #(Attr:0x1513bfc { name = "size", value = "30" })] 
     }), 
    @value=""> 
    #<Mechanize::Form::Field:0x2a52998 
    @name="password", 
    @node= 
     #(Element:0x1529550 { 
     name = "input", 
     attributes = [ 
      #(Attr:0x15121d4 { name = "type", value = "password" }), 
      #(Attr:0x15121c8 { name = "name", value = "password" }), 
      #(Attr:0x15121bc { name = "size", value = "30" })] 
     }), 
    @value="">} 
    {radiobuttons} 
    {checkboxes} 
    {file_uploads} 
    {buttons 
    #<Mechanize::Form::Submit:0x2a52758 
    @name="send", 
    @node= 
     #(Element:0x152940c { 
     name = "input", 
     attributes = [ 
      #(Attr:0x151062c { name = "type", value = "submit" }), 
      #(Attr:0x1510614 { name = "name", value = "send" }), 
      #(Attr:0x1510608 { name = "class", value = "style2" }), 
      #(Attr:0x15105fc { name = "value", value = "Submit" })] 
     }), 
    @value="Submit">}>}> 

irb(main):010:0> 
+0

@Railsbeginner 사용하도록 코드를 수정하십시오 비 사용되지 않는 일정 및 게시물의 모든없이 IRB 단계를 업데이트 소음. – Phrogz

+0

@Phrogz 지금은 더 좋습니까? –

+0

실패한 로그인을하면 페이지 내부에 메타 새로 고침이있는 페이지가 깜박입니다. the와 함께 놀고 싶을 수도 있습니다. agent.follow_meta_refresh 옵션 –

답변

11

또한 서버는 전송 버튼 매개 변수 '보내기'가 있는지 확인합니다. 실행하는 동안

form.submit

form.add_field! 'send','Submit' 
+0

감사합니다! 이것은 나를 도왔다. 나는 Mechanize가 게시물과 함께 제출 버튼을 보내 겠지만, 분명히 아니라고 생각했다. –

2

한 가지 내가 실행 보았다 당신의 이자형 예 :

>> agent = WWW::Mechanize.new 
!!!!! DEPRECATION NOTICE !!!!! 
The WWW constant is deprecated, please switch to the new top-level Mechanize 
constant. WWW will be removed in Mechanize version 2.0 

You've referenced the WWW constant from (irb):3:in `irb_binding', please 
switch the "WWW" to "Mechanize". Thanks! 

Sincerely, 

    Pew Pew Pew 

해당 시스템에 계정이 없으므로 로그인 할 수 없습니다. IRB에서 초기 단계를 수행하면 무엇을 볼 수 있습니까?

+0

콘솔의 로그를 게시했습니다. –

0

하기 전에이 줄을 추가 "에이전트 = WWW를 :: Mechanize.new는"당신은 "WWW"이 상수는 최신판에서 더 이상 사용되지 않습니다으로 중단 경고를 받게됩니다. 'WWW'상수없이 명령을 실행해야합니다. 변경된 명령은 다음과 같습니다

에이전트 = Mechanize.new

감사

관련 문제