2012-07-10 81 views
2

我可以用此代碼登錄Facebook。登錄後我可以訪問需要您在登錄頁面。用python登錄facebook

def SignIn(self): 
    url = 'https://login.facebook.com/login.php?login_attempt=1' 
    data = "locale=en_US&non_com_login=&email="+str(self.Username)+"&pass="+str(self.Password)+"&lsd=20TOl" 
    self.cookie = cookielib.CookieJar() 

    try: 
     self.opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(self.cookie)) 
    except: 
     sys.stderr.write("Unexpected error!".format(src)) 

    try: 
     self.opener.open('https://www.facebook.com') 
    except: 
     sys.stderr.write("Unexpected error!1") 

    try: 
     self.opener.open(url, data) 
    except: 
     sys.stderr.write("Unexpected error!2") 

    self.IsSignIned=True 
    return self.opener 

但這代碼不起作用

import requests 


headers = {'Host':'www.facebook.com', 
'Origin':'http://www.facebook.com', 
'Referer':'http://www.facebook.com/', 
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11'} 


s = requests.session(headers=headers) 
login_data = { 
    'locale':'en_US', 
    'non_com_login':'', 
    'email':'[email protected]', 
    'pass':'mypassword', 
    'lsd':'20TOl' 
    } 

r=s.post('https://login.facebook.com/login.php?login_attempt=1',data=login_data,verify=False) 
print r.content 
print r.status_code 

它返回

的Facebook登錄

需要的餅乾

Cookies ar e未在瀏覽器中啓用。在繼續之前,請在您的 安全性首選項中調整此項。

,因爲我需要gzip和保活

這是什麼問題,我必須使用請求庫? 有沒有其他的庫可以處理所有這些? (Gzip,Keep-alive cookie,..)

+0

我可能會誤會你在說什麼,但也許你只需要啓用瀏覽器的Cookie? – 2012-07-10 14:06:12

+0

我使用Python而不是任何瀏覽器 – user1514512 2012-07-11 08:32:42

回答

2

你是否真的需要自己做所有的事情?你有沒有嘗試面對面(https://github.com/jgorset/facepy)?

該庫也使用「請求」,但我相信他們解決了這個問題(假設你想登錄因爲你需要一個訪問令牌來做OpenGraph的東西)。

0

self.cookie =,cookielib.CookieJar() 您沒有在第二個代碼中激活python cookie。

0

我看到您的問題,並認爲您想在登錄後獲取信息。下面是我的代碼來顯示HTML內容,它是否解決您的問題?

#!/usr/bin/python 

import urllib, urllib2, cookielib 

username = 'yourusername' 

password = 'yourpassword' 

cj = cookielib.CookieJar() 

opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) 

login_data = urllib.urlencode({'username' : username, 'j_password' : password}) 

opener.open('https://login.facebook.com/login.php?login_attempt=1', login_data) 

resp = opener.open('http://www.facebook.com/') 

print resp.read() 
0

我使用selenium自動登錄中國的微信。代碼在這裏:

# -*- coding: utf-8 -*- 
from selenium import webdriver 
from selenium.webdriver.support import ui 
from selenium.webdriver.common.keys import Keys 

def page_is_loaded(driver): 
    return driver.find_element_by_tag_name("body") != None 

driver = webdriver.Firefox() # open firefox browser 
driver.get('https://mp.weixin.qq.com/') # go to url 

wait = ui.WebDriverWait(driver, 10) 
wait.until(page_is_loaded) 

wechat_account = driver.find_element_by_id("account") # here you should find the facebook login account id in webpage sourcecode and change the string "account" 
wechat_account.send_keys("[email protected]")  # input your email address or your wechat account 

your_password = driver.find_element_by_id("pwd") 
your_password.send_keys("balabalabala")   # your password instead of balabalabala 
your_password.send_keys(Keys.RETURN) 

print "Mission Completed! Write your new article.-->" 

希望它能幫上忙。

0

我建議你使用硒。

from selenium import webdriver ##Imports the selenium web driver 
driver = webdriver.Firefox() ##Create a Firefox Webdriver 
driver.get("https://www.facebook.com/") ##Tells the driver to go to  facebook.com 
driver.find_element_by_css_selector("#email").send_keys("insert username here") 
driver.find_element_by_css_selector("#pass").send_keys("insert password here") 
driver.find_element_by_css_selector("#u_0_q").click() 

對於深入指導更我建議你給this post看看