在没有浏览器的情况下登录Facebook

时间:2010-10-22 20:55:56

标签: python facebook

我正在制作一个目前需要从特定用户的墙上提取信息的脚本。唯一的问题是它需要身份验证,并且脚本需要能够在没有任何人为干扰的情况下运行。不幸的是,到目前为止,我所能找到的只是告诉我需要注册一个应用程序,然后完成整个FB Connect舞蹈以实现我的目标。问题是需要浏览器交互,我试图避免。

我想我可能只是使用httplib2,并登录此路线。我得到了它的工作,只是发现使用该方法我仍然没有在任何可检索的方法中获得“access_token”。如果我可以在不启动浏览器的情况下获得该令牌,我将完全设置。当然人们在不使用FB Connect的情况下抓取Feed等等吗?这是不可能的,为什么我要打这么多路障?打开您可能拥有的任何建议。

3 个答案:

答案 0 :(得分:5)

你想做的事是不可能的。您将不得不使用浏览器以某种方式获取访问令牌。您无法收集用户名和密码(违反Facebook的TOS)。如果您需要在没有用户交互的情况下运行的脚本,您仍然需要使用浏览器进行身份验证,但是一旦拥有了用户的令牌,您就可以在没有直接交互的情况下使用它。您必须请求“offline_access”权限才能获得未过期的访问令牌。您可以保存此令牌,然后将其用于您需要的时间。

答案 1 :(得分:3)

在使用机械化之前,我已使用自己的帐户完成此操作。您可以使用下面的内容登录Facebook,然后点击指向您想去的地方的链接。这将打印出新闻Feed的内容。

#!/usr/bin/env python

import mechanize

browser = mechanize.Browser()
browser.set_handle_robots(false)
cookies = mechanize.CookieJar()
browser.set_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.select_form(nr=0)
browser.form['email'] = 'YOUR_EMAIL_ADDRESS'
browser.form['pass'] = 'YOUR_PASSWORD'
response = browser.submit()
print response.read()

答案 2 :(得分:2)

您可以使用PhantomJSPyPhantomJS执行该任务。它是使用PyQt4编写的无头WebKit浏览器。您可以使用JavaScript控制页面。