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 に答える