2015-07-09 27 views
6

Od kilku dni nie mogę już logować się na facebooku z moim skryptem. Strona logowania na Facebooku zawiera błąd:Python Mechanize log in Facebook error cookie

Wymagane jest korzystanie z plików cookie, pliki cookie nie są włączone w przeglądarce.

Nie wiem, dlaczego ten błąd pojawia się, ponieważ akceptuję pliki cookie w moim skrypcie. Mam nadzieję, że ktoś może mi pomóc, już googlowałem i wypróbowałem różne metody ciasteczek.

import cookielib 
import urllib2 
import mechanize 

br = mechanize.Browser() 
cookiejar = cookielib.LWPCookieJar() 
br.set_cookiejar(cookiejar) 
br.set_handle_equiv(True) 
br.set_handle_gzip(True) 
br.set_handle_redirect(True) 
br.set_handle_referer(True) 
br.set_handle_robots(False) 

br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time = 1) 
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') ] 

user = "EMAIL" 
pass = "PASSWORD" 
url = "https://www.facebook.com/login.php" 

#Open URL and submit 
br.open(url) 
br.select_form(nr=0) 
br.form['email'] = user 
br.form['pass'] = pass 
response = br.submit() 

#Opens website and write source to html-output.txt 
fileobj = open("HTML-OUTPUT.txt","wb") 
fileobj.write(response.read()) 
fileobj.close() 
+0

Mamy mieć ten sam problem, ale tylko wtedy, gdy Facebook ładuje się przez CNA. –

+0

Dennis, co masz na myśli z CNA? Być może istnieje rozwiązanie, czytałem coś o eksportowaniu plików cookie z Twojej prawdziwej przeglądarki (np. Firefox) i importowałem je do twojego skryptu. Jak mogę się z tobą skontaktować? Naprawdę muszę rozwiązać ten problem. Jesteś z Holandii? –

+0

Mamy tutaj ten sam problem. To frustrujące, ponieważ używamy skryptu do określenia, kiedy jest problem z logowaniem na Facebooku, abyśmy mogli być świadomi, zanim nasi użytkownicy zaczną narzekać, że nie mogą zalogować się do naszej aplikacji ... –

Odpowiedz

4

Zakładając, że jak temat logowania nie jest ważne (jak byli gotowi użyć ciasteczek Mozilli, aby to zrobić), można korzystać z mobilnej strony do osiągnięcia go.

Po pierwsze, logujesz się na Facebooku za pomocą wersji mobilnej (która nie wymaga plików cookie), a następnie przekieruj przeglądarkę do strony, którą chcesz zapisać.

Niewielkie zmiany kodu:

user = "EMAIL" 
passwd = "PASSWORD" 
url = "https://m.facebook.com/login.php" 

#Open URL and submit 
br.open(url) 
br.select_form(nr=0) 
br.form['email'] = user 
br.form['pass'] = passwd 
br.submit() 

response = br.open("https://www.facebook.com/") 

#Opens website and write source to html-output.txt 
fileobj = open("HTML-OUTPUT.txt","wb") 
fileobj.write(response.read()) 
fileobj.close() 
1

Polecam korzystanie z this reusable application wykonany do tego celu:

$ pip install django-oauth-tokens 

A potem w terminalu

>>> from oauth_tokens.providers.facebook import FacebookAuthRequest 
>>> req = FacebookAuthRequest(username='...', password='...') 
>>> response = req.authorized_request(url='https://facebook.com') 
>>> response.content.count(USER_FULL_NAME) 
>>> fileobj = open("HTML-OUTPUT.txt","wb") 
>>> fileobj.write(response.content) 
>>> fileobj.close() 
4 
+0

ImportError: nie można zaimportować nazwy SingleRelatedObjectDescriptor –

+0

Być może jest to błąd jednej z zależności, ponieważ aplikacja nie ma wzmianek o tej klasie https://github.com/ramusus/django-oauth-tokens/search?q=SingleRelatedObjectDescriptor – ramusus