Facebook Python 登录脚本不使用 API



好的,所以我找到了一个简单的脚本来使用python登录facebook。它没有用 - 但经过一些调整(主要是围绕更新帖子字符串),它在相当长的一段时间内运行良好。现在它又停止了 - 我怀疑是因为Facebook已经改变了他们的网站。

尝试在 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)

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

#!/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()

最新更新