2015-07-09 22 views
6

Kể từ khi một vài ngày tôi không thể đăng nhập vào facebook nữa với kịch bản của tôi. Các trang đăng nhập Facebook cung cấp cho các lỗi:Python mechanize đăng nhập vào Facebook Cookie lỗi

Cookies yêu cầu, các tập tin cookie không được kích hoạt trên trình duyệt của bạn.

Tôi không biết lý do tại sao lỗi này xuất hiện vì tôi chấp nhận cookie trong kịch bản của tôi. Tôi hy vọng ai đó có thể giúp tôi, tôi đã googled và thử các phương pháp cookie khác nhau.

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

Chúng tôi có cùng một vấn đề, nhưng chỉ khi tải đăng nhập facebook thông qua CNA. –

+0

Dennis, Ý bạn là gì với CNA? Có lẽ có một giải pháp, tôi đã đọc một cái gì đó về cookie xuất khẩu từ trình duyệt thực của bạn (tức là Firefox) và họ nhập chúng vào kịch bản của bạn. Làm thế nào tôi có thể liên lạc với bạn? Tôi thực sự cần giải quyết vấn đề này. Bạn đến từ hà lan à –

+0

Chúng tôi đang gặp vấn đề tương tự ở đây. Đó là bực bội, như chúng ta sử dụng kịch bản để xác định khi có một vấn đề đăng nhập Facebook vì vậy chúng tôi có thể nhận thức được trước khi người dùng của chúng tôi bắt đầu phàn nàn họ không thể đăng nhập vào ứng dụng của chúng tôi ... –

Trả lời

4

Giả sử rằng cách nào bạn đăng nhập là không quan trọng (như bạn đã sẵn sàng sử dụng các tập tin cookie Mozilla bạn làm như vậy), bạn có thể sử dụng các trang web di động để thực hiện nó.

Trước tiên, bạn đăng nhập vào Facebook sử dụng phiên bản di động của mình (mà sẽ không yêu cầu cookies), sau đó chuyển hướng trình duyệt của bạn đến trang mà bạn muốn để lưu lại.

Thay đổi nhỏ để mã của bạn:

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

tôi sẽ khuyên bạn nên sử dụng this reusable application thực hiện cho mục đích này:

$ pip install django-oauth-tokens 

Và sau trong terminal

>>> 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: không thể nhập tên SingleRelatedObjectDescriptor –

+0

có lẽ đó là lỗi của một trong các phụ thuộc, vì ứng dụng không có đề cập đến lớp này https://github.com/ramusus/django-oauth-tokens/search?q=SingleRelatedObjectDescriptor – ramusus

Các vấn đề liên quan