2012-11-20 153 views
2

好吧,所以我找到了一个基本的脚本来登录到Facebook使用python a回来。它没有工作 - 但经过一些调整(主要是更新后字符串)后,它运行良好很长一段时间。现在它再次停止 - 我怀疑是因为Facebook已经改变了他们的网站。Facebook Python登录脚本不使用API​​

我已经尝试了进一步的调整,在Firefox中捕获了一个登录名,并确保我尽可能多地模拟后期值等。

我需要直接登录网站,因为我有一堆脚本收集可通过浏览器访问的数据,但不通过API。

花了几天的时间试图解决这个问题,我仍然画空白......我错过了什么?

import sys 
import re 
import urllib 
import urllib2 
import cookielib 
import json 

def main(): 
    # Check the arguments 
    user = sys.argv[1] 
    passw = sys.argv[2] 

    # Initialize the needed modules 
    CHandler = urllib2.HTTPCookieProcessor(cookielib.CookieJar()) 
    browser = urllib2.build_opener(CHandler) 

    browser.addheaders = [('Referer', 'http://login.facebook.com'), 
         ('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)')] 

    urllib2.install_opener(browser) 
    res = browser.open('http://m.facebook.com/index.php') 
    pg=res.read() 
    mxt = re.search('name="li" value="(\w+)"', pg) 
    mxt2 = re.search('name="m_ts" value="(\w+)"', pg) 
    mxt3 = re.search('name="lsd" value="(\w+)"', pg) 
    mxt4 = re.search('name="locale" value="(\w+)"', pg) 

    li = mxt.group(1) 
    m_ts = mxt2.group(1) 
    lsd = mxt3.group(1) 
    locale = mxt4.group(1) 
    res.close() 

    # Initialize the POST data 
    data = urllib.urlencode({ 
     'lsd'    : lsd, 
     'charset_test'  : urllib.unquote_plus('%E2%82%AC%2C%C2%B4%2C%E2%82%AC%2C%C2%B4%2C%E6%B0%B4%2C%D0%94%2C%D0%84'), 
     'version'   : '1', 
     'm_ts'    : m_ts, 
     'li'    : li, 
     'locale'   : locale, 
     'signup_layout'  : 'header_button', 
     'laststage'   :'first', 
     'post_form_id'  : pfi, 
     'email'    : user, 
     'pass'    : passw, 
     'login'    : 'Log in' 
    }) 

    url='https://login.facebook.com/login.php?login_attempt=1&non_com_login=&'+ data 
    res = urllib2.urlopen(url) 
    print ('%s' % url) 

    res.close() 

    # Get Access Token 
    res = browser.open('http://developers.facebook.com/docs/reference/api') 
    conft = res.read() 

    # For Debugging 
    fh = open('debug.html', 'w') 
    fh.write(conft) 
    fh.close 

    mat = re.search('access_token=(.*?)"', conft) 
    acct = mat.group(1) 
    print ('Using access token: %s' % acct) 
+0

我建议将这个'urllib2'转换为'mechanize','re'转换为'BeautifulSoup'。 – Droogans

+0

谢谢 - 刚刚重写了机械化和波什的第一部分 - 它的工作原理。比urllib2好多了。非常感谢。 – user1840180

+0

为了记录,这里是上述的工作答案。 '#!的/ usr/bin中/ python' '进口mechanize' '浏览器= mechanize.Browser()'' browser.set_handle_robots(假)'' 饼干= mechanize.CookieJar()' ' browser.addheaders = [('User-agent','Mozilla/5.0(X11; U; Linux i686; en-US)AppleWebKit/534.7(KHTML,如Gecko)Chrome/7.0.517.41 Safari/534.7')]' 'browser.open(“http://m.facebook.com/”)' 'browser.select_form(nr = 0)' 'browser.form ['email'] ='YOUR_LOGIN'' '浏览器。 form ['pass'] ='YOUR_PASSWORD'' 'response = browser.submit()' – user1840180

回答

4

为了记录,这里是上述的工作答案。

#!/usr/bin/python 

import mechanize 

browser = mechanize.Browser() 
browser.set_handle_robots(False) 
cookies = mechanize.CookieJar() 

browser.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US)  AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.41 Safari/534.7')] 
browser.open("http://m.facebook.com/") 
browser.select_form(nr=0) 

browser.form['email'] = 'YOUR_LOGIN' 
browser.form['pass'] = 'YOUR_PASSWORD' 
response = browser.submit()