2

好的,所以不久前我找到了一个使用 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)
4

1 回答 1

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()
于 2012-11-21T22:36:49.347 回答