2010-05-26 8 views
53

어떻게해야합니까? 나는 (URLLIB 포함) 일부 지정된 링크를 입력하려고했지만, 그것을 할, 내가 로그인 할 필요가 파이썬으로 웹 사이트에 로그인하려면 어떻게해야합니까?

나는 사이트에서이 소스가 있습니다.이게 가능

<form id="login-form" action="auth/login" method="post"> 
    <div> 
    <!--label for="rememberme">Remember me</label><input type="checkbox" class="remember" checked="checked" name="remember me" /--> 
    <label for="email" id="email-label" class="no-js">Email</label> 
    <input id="email-email" type="text" name="handle" value="" autocomplete="off" /> 
    <label for="combination" id="combo-label" class="no-js">Combination</label> 
    <input id="password-clear" type="text" value="Combination" autocomplete="off" /> 
    <input id="password-password" type="password" name="password" value="" autocomplete="off" /> 
    <input id="sumbitLogin" class="signin" type="submit" value="Sign In" /> 

를?

답변

50

은 아마 당신은 (그것이 mechanize을 기반으로) twill를 사용하고 싶습니다. 사용하기가 쉽고 원하는 것을 할 수 있어야합니다.

은 다음과 같이됩니다 : 당신은 당신이 로그인 할 사이트를 찾아 go(...)을 사용하면 모든 양식을 나열 showforms()을 사용할 수 있습니다

from twill.commands import * 
go('http://mysite.org') 

fv("1", "email-email", "blabla.com") 
fv("1", "password-clear", "testpass") 

submit('0') 

. 그냥 파이썬 인터프리터에서보십시오. 자세한 내용을 보려면 다음 사이트를 방문

+0

어떤 경우에는 submit()을 사용해야합니다.http://lists.idyll.org/pipermail/twill/2006-August/000526.html submit() 작업을 사용하여 www.pge.com에 로그인하여이 문제를 확인했습니다. – user391339

+0

파이썬 3.6을위한 해결책이 있습니까? 능 직물이 파이썬 3.5 나 3.6을 지원하지 않는 것 같습니다. 나는 그것을 다운로드하고'2to3'을 사용하여 변환하려고 시도했지만, 이제 그것을 임포트하려고 할 때'ModuleNotFoundError'를 얻습니다. – CGFoX

+0

사실 저는 Twill 1.8.0을 사용/변환하고'pip install '을 사용하여'lxml'과'requests'를 설치하여'ModuleNotFoundError'를 해결할 수있었습니다. 하지만 어쨌든'False = 0' 때문에 가져 오기를 시도 할 때'SyntaxError'가 생깁니다 ... – CGFoX

5

일반적으로 웹 사이트는 여러 가지 방법으로 인증을 확인할 수 있지만 타겟팅하는 사이트는 합리적으로 쉽게 만들 수 있습니다.

POST ~ auth/login URL은 폼으로 인코딩 된 얼룩을 다양한 필드와 함께 표시하는 것입니다 (레이블은 for인데 사람이 방문하는 사람을 위해 장식 됨). handle=whatever&password-clear=pwd 등등. 핸들 (AKA 전자 메일)의 값과 암호를 알고 있으면 괜찮을 것입니다.

아마도 POST는 Set-Cookie 헤더가 세션을 확인하는 "성공적으로 로그인했습니다"페이지로 리디렉션 할 것입니다 (쿠키를 저장하고 세션을 통한 추가 상호 작용에서 다시 보내야합니다!).

14
import cookielib 
import urllib 
import urllib2 

url = 'http://www.someserver.com/auth/login' 
values = {'email-email' : '[email protected]', 
      'password-clear' : 'Combination', 
      'password-password' : 'mypassword' } 

data = urllib.urlencode(values) 
cookies = cookielib.CookieJar() 

opener = urllib2.build_opener(
    urllib2.HTTPRedirectHandler(), 
    urllib2.HTTPHandler(debuglevel=0), 
    urllib2.HTTPSHandler(debuglevel=0), 
    urllib2.HTTPCookieProcessor(cookies)) 

response = opener.open(url, data) 
the_page = response.read() 
http_headers = response.info() 
# The login cookies should be contained in the cookies variable 

: https://docs.python.org/2/library/urllib2.html

+0

링크가 작동하지 않습니다.'docs.python.org' URL에'2'가 추가되었습니다. https://docs.python.org/2/library/urllib2.html –

21

일반적으로 당신은 cookielib, URLLIB 및 urllib2가를 의미 사이트에 로그인하기 위해 쿠키를해야합니다. 여기에 페이스 북의 웹 게임을 할 때 내가 다시 쓴 클래스의 :

import cookielib 
import urllib 
import urllib2 

# set these to whatever your fb account is 
fb_username = "[email protected]" 
fb_password = "secretpassword" 

class WebGamePlayer(object): 

    def __init__(self, login, password): 
     """ Start up... """ 
     self.login = login 
     self.password = password 

     self.cj = cookielib.CookieJar() 
     self.opener = urllib2.build_opener(
      urllib2.HTTPRedirectHandler(), 
      urllib2.HTTPHandler(debuglevel=0), 
      urllib2.HTTPSHandler(debuglevel=0), 
      urllib2.HTTPCookieProcessor(self.cj) 
     ) 
     self.opener.addheaders = [ 
      ('User-agent', ('Mozilla/4.0 (compatible; MSIE 6.0; ' 
          'Windows NT 5.2; .NET CLR 1.1.4322)')) 
     ] 

     # need this twice - once to set cookies, once to log in... 
     self.loginToFacebook() 
     self.loginToFacebook() 

    def loginToFacebook(self): 
     """ 
     Handle login. This should populate our cookie jar. 
     """ 
     login_data = urllib.urlencode({ 
      'email' : self.login, 
      'pass' : self.password, 
     }) 
     response = self.opener.open("https://login.facebook.com/login.php", login_data) 
     return ''.join(response.readlines()) 

당신은 반드시 HTTPS 필요하거나 처리기를 리디렉션하지 않습니다,하지만 그들은 다치게하지 않아, 그것은 오프너 훨씬 더 강력합니다. 또한 쿠키가 필요하지 않을 수도 있지만 게시 한 양식만으로는 알기가 어렵습니다. 나는 당신이 아마도 '내 생각을 기억하십시오.'라는 의견을 주석으로 처리했다고 생각합니다. HTTP의 것들에 대한

33

날은 간단하게 해보자 사이트의 가정하자 URL이 www.example.com이며 사용자 이름과 암호를 작성하여 가입해야합니다, 그래서 우리는 지금 'http://example.com/userinfo.php 될 것 절대 URL을 만들기 위해 userinfo.php 가지고는

<form name="loginform" method="post" action="userinfo.php"> 

같은 형태의 태그 일에있을 것입니다 지금 http://www.example.com/login.php 말을하고 소스 코드의 확인 및 조치 URL을 검색 로그인 페이지로 이동 ', 이제 간단한 파이썬 스크립트를 실행하십시오.

import requests 
url = 'http://example.com/userinfo.php' 
values = {'username': 'user', 
      'password': 'pass'} 

r = requests.post(url, data=values) 
print r.content 

저는 언젠가 누군가에게 도움이되기를 바랍니다.

+0

대부분의 경우 작동하지 않습니다. 내가 시도한 웹 사이트 중 –

+0

20 개 도움말/stackoverflow 페이지 중 내가 본 것은 내가 필요한 한 사이트에서만 작동하는 유일한 솔루션이었다. – Buoy

관련 문제