[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.그래서 귀하의 코드를 시도하고, 한 번 로그인 한 다음, 다시 로그인하는 데 어려움이 있습니다. 'if'문 앞에 한 줄에 print usock.read () 그리고 html 코드를 많이 얻었습니다. 그런 다음 해당 코드를 메모장에 놓고 html 파일로 저장 한 다음 가져 왔습니다. 이런 일이 벌어지고 있습니다. 페이스 북은 우리가 컴퓨터 프로그램에서 로그인하는 것에 의심스러워하고, 우리가 captcha라는 단어를 보여줌으로써 우리가 진짜인지를 확인하기를 기다리고 있습니다. 이 프로그램은 이것을 고려하지 않고, 실제로 보류중인 로그인 일 때 "실패한 로그인"을 인쇄합니다.
그래서 귀하의 코드를 시도하고, 한 번 로그인 한 다음, 다시 로그인하는 데 어려움이 있습니다. 'if'문 앞에 한 줄에 print usock.read () 그리고 html 코드를 많이 얻었습니다. 그런 다음 해당 코드를 메모장에 놓고 html 파일로 저장 한 다음 가져 왔습니다. 이런 일이 벌어지고 있습니다. 페이스 북은 우리가 컴퓨터 프로그램에서 로그인하는 것에 의심스러워하고, 우리가 captcha라는 단어를 보여줌으로써 우리가 진짜인지를 확인하기를 기다리고 있습니다. 이 프로그램은 이것을 고려하지 않고, 실제로 보류중인 로그인 일 때 "실패한 로그인"을 인쇄합니다.
-
==============================
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.이 픽스는 매번 저에게 효과적이었습니다. 그런 다음 실제로 로그인 한 후 페이지 내용을 읽으려고했습니다.이 경우 '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.페이스 북은 분당 최대 로그인 시도 횟수를 제한 할 수 있습니다. 그것은 단지 추측입니다.
페이스 북은 분당 최대 로그인 시도 횟수를 제한 할 수 있습니다. 그것은 단지 추측입니다.
-
==============================
5.그래, 기본적으로 응답 데이터를보고 대답을 찾은 것 같습니다.
그래, 기본적으로 응답 데이터를보고 대답을 찾은 것 같습니다.
"로그 아웃"은 존재하지 않습니다 - 적어도 저에게는 - "로그 아웃"과 "로그 아웃"(나중에 다른 로케일에서 변경되지 않는 logout.php로 나타납니다). 따라서 특정 문제에 대해 "로그 아웃"을 "로그 아웃"으로 바꾸면 모든 설정이 완료됩니다.
자, 첫 시도 후에 왜 작동하는지에 관해서는, 확인하기가 번거롭지 않았습니다.
또한, "&", ";"로 내용을 보낼 때 불쾌한 버그를 피하기 위해 urllib의 urlencode를 사용하여 데이터를 전송하는 것이 좋습니다. 및 제어에 사용되는 다른 문자. (전자 메일의 "@"도 인코딩해야하지만이 특별한 경우는 깨지는 않습니다)
참고 : 내 테스트는 기본적으로 문자열을 변경하고 잠시 루프를 통해 실행했지만 아무런 문제도 발견되지 않았습니다. 네가 깨면 Andrey가 맞을지도 몰라.
from https://stackoverflow.com/questions/2030652/logging-into-facebook-with-python by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 파이썬으로 .doc 파일 읽기 (0) | 2018.11.19 |
---|---|
[PYTHON] USB 장치 식별 (0) | 2018.11.19 |
[PYTHON] 파이썬에서 컴퓨터가 배터리 전원으로 작동하는지 어떻게 감지 할 수 있습니까? (0) | 2018.11.19 |
[PYTHON] 파이썬에서 디렉토리 내용을 어떻게 나열 할 수 있습니까? (0) | 2018.11.19 |
[PYTHON] 인쇄 기능이 없음을 반환하는 이유는 무엇입니까? (0) | 2018.11.19 |