2011-10-17 2 views
0

일부 스크립트를 실행하려면 사이트에 로그인해야합니다. 노코 기리와 기계화는 작업에 대한 완벽한 외모,하지만 난 입력 필드 (수율 전무 agent.page.forms.first) 형태로 위치하지 않기 때문에 로그인 정보를 입력 힘든 시간을 보내고 있습니다 :Mechanize/Ruby에서 양식을 사용하지 않는 사이트에 대한 로그인 정보 입력

<div class="loginform" id="login_form"> 
     <div> 
     <input type="text" id="loginname" tabindex="1"/> 
     </div> 
     <div> 
     <input type="password" id="password" tabindex="2"/> 
     <input type="text" id="password_text" style="display:none;"/> 
     </div> 
     <div class="signin"><a href="javascript:void(0);" class="sp" id="login_submit_btn"></a> 
     </div> 
    </div> 

어떻게 든 입력 요소 (페이지에서 유일한 요소)로 이동 한 다음 로그인 할 때 사용한 사용자 이름과 암호를 제출할 수 있습니까? Mechanize가 이와 같은 작업을 수행 할 수 없다면 대안이 있습니까? 정말 고마워.

답변

1

나는 웹 사이트가 어떻게 연결되는지 전체 소스 (자바 스크립트 포함) 내부를 더 잘 검사 할 것이라고 생각한다. 그것은 내 의견에 HTTP POST 요청 ... 그리고 GET 요청에 의해 메인 페이지를 구문 분석하는 대신 Mechanize post method를 사용하지 않고 직접 로그인 할 때 사용한다 :

agent = Mechanize.new 
url = 'http://website.com/hidden_login_page.php' 
page = agent.post(url, {"login" => "foo", "password" => "bar"}) 

이 너무 도움이되기를 바랍니다.

+0

Yikes, 실제로 자바 스크립트가있는 것처럼 보이지만 실제로 게시하는 방법을 이해하는 데 필요한 skillz가 없습니다. 생각해 줘서 고마워. 나는 그것을 계속 질고 할 것이다. –

+0

어떤 웹 사이트 및 URL 페이지가 적합합니까? – cz3ch

+1

하하, 나는 공개적으로 말하고 싶지 않지만, 내가 당신에게 메시지를 보낼 수 있습니까? 다소 민감합니다 (불법적 또는 비 윤리적 인 의미는 아닙니다). 그러나 어떤 경우에, 다른 주석가가 제안한대로, 나는 셀레늄을 사용했고, 일부 결말을 낸 후에 트릭을했습니다! 도와 주신 선생님과 숀 감사합니다. –

0

최근에 이와 같은 문제가있었습니다. 기계화에서 다음을 시도하십시오.

page.field_with(:name => "loginname").value = "foo" 
page.field_with(:name => "password").value = "bar" 

희망이 도움이됩니다.

건배!

+0

팁 @sean for the tip! 불행히도, 페이지가 field_with 메소드를 수행 할 수 있는지 확실하지 않습니다. 나는 당신의 도움이되는 제안을 시도했을 때 'nokotest.rb : 11 : in

': 정의되지 않은 메소드 field_with for # (NoMethodError)' 을 얻습니다. 다시 말하지만, field_with ...를 사용하려면 양식이 필요하다고 생각합니다. 다른 제안 사항이 있습니까? –

+0

당신 말이 맞아요. field_with는 form action입니다 ... – Sean

+0

내가 생각할 수있는 것은 Selenium을 사용하여 로그인 작업을 기록한 다음 내보내서 그런 식으로 작업 할 수 있도록하는 것입니다. – Sean

관련 문제