python - Facebook Python 登录脚本不使用 API

标签 python facebook urllib2

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

关于python - Facebook Python 登录脚本不使用 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13483002/

相关文章:

c# - 使用 Facebook C# SDK 发布帖子

Python facebook-sdk 发布到页面

Python 3.5 - Selenium - 如何处理新窗口并等待它完全加载?

python Pandas : filter out records with null or empty string for a given field

php - 从 PHP 的 mysql_query 转换成 Python?

ios - 使用 Facebook SDK 的 iPhone 应用程序崩溃并出现 "has active assertions beyond permitted time"错误

python - 使用 urllib2 和 simplejson 无限循环

python - urllib2.urlopen() : getting the size of the content

python - 使用python将 war 部署到tomcat

python - 属性错误: 'LanguageServiceClient' object has no attribute 'classify_text'