2012-11-27 2 views
1

로그인이 완료된 기계화 스크립트가 있습니다. 로그인 한 후 페이지에 기본 로그인 페이지로 가기 전에 먼저 리디렉션이 표시됩니다.기계어로 자바 스크립트 양식을 제출하는 방법은 무엇입니까?

redirect()를 실행하면 다시 로그인 페이지로 돌아갑니다. 왜?

login()을 실행하면이 페이지가 표시되지만 기본 페이지로 계속 진행해야합니다.

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head><title> 

</title></head> 
<body> 
    <form name="form1" method="post" action="tmp.aspx" id="form1"> 
<div> 
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE2MTY2ODcyMjlkZCOgyU+AdP30f85W4DdUIV6LnCqa" /> 
</div> 

     <script type="text/javascript"> 
      top.location.href = document.location.href; 
      document.forms["form1"].submit(); 
     </script> 
      &nbsp;&nbsp;</form> 
     </body> 
</html> 

나는이 일에서 새로운 것을 해야할지 모르겠다.

첫 로그인에서 제공 한 이미 인증 된 데이터를 사용하여 어떻게 이런 종류의 양식을 제출합니까?

또한 인증 된 사용자와 함께 POST 데이터를 더 제출하는 방법은 무엇입니까? 지금까지

내 코드 :

import re 
import mechanize 

login_url = 'login.aspx' 

def login(id, username, password): 
    br = mechanize.Browser() 
    br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')] 
    br.open(login_url) 
    br.select_form(nr=0) 
    br.form.set_all_readonly(False) 
    br["__EVENTTARGET"] = "TransactBtn" 
    br["AccountID"] = id 
    br["UserName"] = username 
    br["Password"] = password 
    response = br.submit() 
    return response.geturl() 
    #after submitting this it goes to the redirect portal page then to the main page 

def redirect(url): 
    #after login we submit the redirect portal to see the main page 
    br = mechanize.Browser() 
    br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')] 
    br.open(url) 
    br.select_form(nr=0) 
    response = br.submit() 
    return response.read() #to the main 

def dostuff(): 
    #this will submit some data as POST with the authenticated user. 

print redirect(login('myid', 'myusername', 'mypassword')) 
+0

이미 양식을 제출 중입니다. 실제로 문제는 무엇입니까? – polin

+0

양식을 제출 한 후 response.read()는 리디렉션 페이지입니다. 이것은 이미 완료되었음을 의미합니까? 또한 인증 된 사용자를 사용하여 더 많은 데이터를 보내려면 어떻게해야합니까? 내가이 게시물을 삭제하고 싶다. 로그인 한 경우에만 그렇게 할 수 있습니다. 간단한 예제를 볼 수 있습니까? 감사. – user1855539

답변

3

모든 요청에 ​​대해 새로운 mechanise 인스턴스를 생성하기 때문에이 문제가 발생했다고 생각합니다. Mechanise는 브라우저와 비슷하며 쿠키 저장소 등이 있습니다. 그리고 그것의 목표를 다시 만드는 것은 브라우저에서 모든 데이터를 지우는 것과 완전히 같습니다.

그래서 모든 요청 중에서 하나의 브라우저 클래스 인스턴스를 공유해야합니다.

login 기능이 필요한 것처럼 보이면 br._ua_handlers['_cookies'].cookiejar을 인쇄하여 서버의 로그인 처리기에서 모든 쿠키를 설정하고 브라우저의 동일한 인스턴스를 사용하여 필요한 페이지를 가져 오십시오.

내가 생각하기에 가장 좋은 것은 클래스를 만들고 클래스 변수를 브라우저로 설정하는 것입니다.

class MyWorker(object): 
    def __init__(self): 
     self._br = mechanize.Browser() 
     self._br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')] 

    def login(self): 
     self._br.open(login_url) 
     self._br.select_form(nr=0) 
     self._br.form.set_all_readonly(False) 
     self._br["__EVENTTARGET"] = "TransactBtn" 
     self._br["AccountID"] = id 
     self._br["UserName"] = username 
     self._br["Password"] = password 
     self._br.submit() 

내가 틀릴 수도 있지만 자바 스크립트처럼 보이는 것은별로 중요하지 않습니다.

+0

더 자세히 설명해 주시겠습니까? 나는 이것에 정말로 새로운 것이다. 감사합니다 :) 또한 어떻게 클래스에서 로그인 전화합니까? – user1855539

+0

예, 쿠키가 좋은 것처럼 보입니다. – user1855539

+0

아, 알았어. :) – user1855539

2

기계화가 자바 스크립트를 지원하지 않습니다. Selenium을 봐야합니다. 기계화와 거의 같은 일을하지만, 자바 스크립트를 처리합니다.

+0

셀레늄을 사용했지만 설치시 오류가 발생합니다. 내 py 버전은 2.4 .. 최신으로 업데이트하는 방법은 무엇입니까? 셀레늄이 오래된 파이를 지원하지 않는다는 것을 읽었습니다. – user1855539

+0

python 2.4 (모든 모듈 이름을 가진 파일을 유지하고 어쩌면 함께 사용하는 것)와 Firefox 7을 제대로 설치하려고 했습니까? 가장 좋은 방법이 아닐 수도 있습니다. 미안하지만 한 가지 해결책이 될 수 있습니다! 아마도 치료법을 살펴볼 수도 있습니다. 어떤 버전의 파이썬이 지원되는지 모르겠다. 그리고 셀레늄보다 치료로 시작하는 것이 더 길어요 – nnaelle

관련 문제