복붙노트

[PYTHON] 파이썬으로 페이스 북에 로그인하기

PYTHON

파이썬으로 페이스 북에 로그인하기

다음 코드를 연속 10 회 실행하면 약 절반의 시간이 걸리고 나머지는 실패합니다. 왜 그런지 알아?

import urllib2, cookielib, re, os, sys

class Facebook():
    def __init__(self, email, password):
        self.email = email
        self.password = password

        cj = cookielib.CookieJar()
        opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
        opener.addheaders = [('Referer', 'http://login.facebook.com/login.php'),
                            ('Content-Type', 'application/x-www-form-urlencoded'),
                            ('User-Agent', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 (.NET CLR 3.5.30729)')]
        self.opener = opener

    def login(self):
        url = 'https://login.facebook.com/login.php?login_attempt=1'
        data = "locale=en_US&non_com_login=&email="+self.email+"&pass="+self.password+"&lsd=20TOl"

        usock = self.opener.open('http://www.facebook.com')
        usock = self.opener.open(url, data)
        if "Logout" in usock.read():
            print "Logged in."
        else:
            print "failed login"
            print usock.read()
            sys.exit()

f = Facebook("test@gmail.com", "asdfasdf")
f.login()

해결법

  1. ==============================

    1.그래서 귀하의 코드를 시도하고, 한 번 로그인 한 다음, 다시 로그인하는 데 어려움이 있습니다. 'if'문 앞에 한 줄에 print usock.read () 그리고 html 코드를 많이 얻었습니다. 그런 다음 해당 코드를 메모장에 놓고 html 파일로 저장 한 다음 가져 왔습니다. 이런 일이 벌어지고 있습니다. 페이스 북은 우리가 컴퓨터 프로그램에서 로그인하는 것에 의심스러워하고, 우리가 captcha라는 단어를 보여줌으로써 우리가 진짜인지를 확인하기를 기다리고 있습니다. 이 프로그램은 이것을 고려하지 않고, 실제로 보류중인 로그인 일 때 "실패한 로그인"을 인쇄합니다.

    그래서 귀하의 코드를 시도하고, 한 번 로그인 한 다음, 다시 로그인하는 데 어려움이 있습니다. 'if'문 앞에 한 줄에 print usock.read () 그리고 html 코드를 많이 얻었습니다. 그런 다음 해당 코드를 메모장에 놓고 html 파일로 저장 한 다음 가져 왔습니다. 이런 일이 벌어지고 있습니다. 페이스 북은 우리가 컴퓨터 프로그램에서 로그인하는 것에 의심스러워하고, 우리가 captcha라는 단어를 보여줌으로써 우리가 진짜인지를 확인하기를 기다리고 있습니다. 이 프로그램은 이것을 고려하지 않고, 실제로 보류중인 로그인 일 때 "실패한 로그인"을 인쇄합니다.

  2. ==============================

    2.나는 같은 문제를 겪었다. 내가 찾은 유일한 해결책은 페이스 북 모바일이 더 안정적이라는 것입니다.

    나는 같은 문제를 겪었다. 내가 찾은 유일한 해결책은 페이스 북 모바일이 더 안정적이라는 것입니다.

    class Acc:
        jar = cookielib.CookieJar()
        cookie = urllib2.HTTPCookieProcessor(jar)       
        opener = urllib2.build_opener(cookie)
    
        headers = {
            "User-Agent" : "Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.8.1.14) Gecko/20080609 Firefox/2.0.0.14",
            "Accept" : "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,text/png,*/*;q=0.5",
            "Accept-Language" : "en-us,en;q=0.5",
            "Accept-Charset" : "ISO-8859-1",
            "Content-type": "application/x-www-form-urlencoded",
            "Host": "m.facebook.com"
        }
    
        def login(self):
            try:
                params = urllib.urlencode({'email':'test@test.test','pass':'dempassword','login':'Log+In'})
                req = urllib2.Request('http://m.facebook.com/login.php?m=m&refsrc=m.facebook.com%2F', params, self.headers)
                res = self.opener.open(req)
                html = res.read()
    
                #print res.getheader('location').split('/')[3]
    
            except urllib2.HTTPError, e:
                print e.msg
            except urllib2.URLError, e:
                print e.reason[1]
            return False
    
        def fetch(self,url):
            req = urllib2.Request(url,None,self.headers)
            res = self.opener.open(req)
            return res.read()
    
    bla = Acc()
    bla.login()
    

    또한 페이 스북 모바일은 아약스로 채워지지 않으므로 어떤 요청을해야하는지 파악하는 것이 훨씬 쉽습니다.

  3. ==============================

    3.이 픽스는 매번 저에게 효과적이었습니다. 그런 다음 실제로 로그인 한 후 페이지 내용을 읽으려고했습니다.이 경우 'print'Logged ''다음에 'print usock.read ()'를 추가했지만 빈 문자열이 반환되었습니다. 나는 그것이 usock에 두 번 호출되기 때문에 그것은 단지 usock에 대한 첫 번째 호출을 수정 한 것 같았습니다.

    이 픽스는 매번 저에게 효과적이었습니다. 그런 다음 실제로 로그인 한 후 페이지 내용을 읽으려고했습니다.이 경우 'print'Logged ''다음에 'print usock.read ()'를 추가했지만 빈 문자열이 반환되었습니다. 나는 그것이 usock에 두 번 호출되기 때문에 그것은 단지 usock에 대한 첫 번째 호출을 수정 한 것 같았습니다.

        a = usock.read()
        if "logout" in a:
            print "Logged in."
            return a
    

    이 방법은 처음으로 usock에 대한 호출이 하나 뿐이며 작동합니다. print a 대신 return a를 사용했습니다. 그러면 login ()을 직접 사용하여 페이지 소스를 반환 할 수 있었기 때문입니다. 그러나 스스로 적응하십시오.

  4. ==============================

    4.페이스 북은 분당 최대 로그인 시도 횟수를 제한 할 수 있습니다. 그것은 단지 추측입니다.

    페이스 북은 분당 최대 로그인 시도 횟수를 제한 할 수 있습니다. 그것은 단지 추측입니다.

  5. ==============================

    5.그래, 기본적으로 응답 데이터를보고 대답을 찾은 것 같습니다.

    그래, 기본적으로 응답 데이터를보고 대답을 찾은 것 같습니다.

    "로그 아웃"은 존재하지 않습니다 - 적어도 저에게는 - "로그 아웃"과 "로그 아웃"(나중에 다른 로케일에서 변경되지 않는 logout.php로 나타납니다). 따라서 특정 문제에 대해 "로그 아웃"을 "로그 아웃"으로 바꾸면 모든 설정이 완료됩니다.

    자, 첫 시도 후에 왜 작동하는지에 관해서는, 확인하기가 번거롭지 않았습니다.

    또한, "&", ";"로 내용을 보낼 때 불쾌한 버그를 피하기 위해 urllib의 urlencode를 사용하여 데이터를 전송하는 것이 좋습니다. 및 제어에 사용되는 다른 문자. (전자 메일의 "@"도 인코딩해야하지만이 특별한 경우는 깨지는 않습니다)

    참고 : 내 테스트는 기본적으로 문자열을 변경하고 잠시 루프를 통해 실행했지만 아무런 문제도 발견되지 않았습니다. 네가 깨면 Andrey가 맞을지도 몰라.

  6. from https://stackoverflow.com/questions/2030652/logging-into-facebook-with-python by cc-by-sa and MIT license