1

我一直在编写一个程序来登录 Facebook 并将状态更新为一个辅助项目。我设法让程序登录。但是,我无法选择最终成为“在此处输入您的状态”框的文本区域。在 Chrome 中使用“检查元素”,我可以看到它所在的表单,但是在程序中列出表单似乎并没有列出所述表单...

import mechanize
import re

br = mechanize.Browser()
usernamecorrect = 0
while usernamecorrect == 0:
    username = raw_input("What is the username for your Facebook Account? ")
    matchmail = re.search(r'[\w.-]+@[\w.-]+', username)
    if matchmail:
        print matchmail.group()
        usernamecorrect = 1
    else:
        print "That is not a valid username; please enter the e-mail address registered with your account.\n"
password = raw_input("What is the password for your account?")
print "Logging in..."
br.set_handle_robots(False)
br.open("https://www.facebook.com/")
br.select_form(nr = 0)
br['email'] = username
br['pass'] = password
br.submit()
raw_input("Login successful!")
print "Forms: \n"
for f in br.forms():
    print f.name

完整输出如下:

What is the username for your Facebook Account? myemail@website.com
What is the password for your account? thisisapassword
Logging in...
Login successful!
Forms:

navSearch
None

我再次通过 Inspect Elements 浏览了 Facebook 的来源,“navSearch”是“查找人、事物等”。搜索栏,未命名的表单似乎与注销按钮有关。然而,虽然 Inspect Elements 至少提供了 2 个表格,但其中一个包含状态更新框。我无法确定它是否是因为 JavaScript(而状态更新框代码块被封装在 中,navSearch 和注销表单也是如此。)我能找到的最相关的东西是 navSearch并且注销表单在一个单独的 div 中,但我觉得这对机械化来说应该不是什么大问题。我的代码有什么问题,还是完全不同?

4

1 回答 1

1

我的代码有什么问题,还是完全不同?

你的整个方法是错误的:

我一直在编写一个程序来登录 Facebook 并更新状态

这就是 Graph API 的用途。

抓取 FB 页面并尝试充当“浏览器”并不是要走的路。除了 FB 政策不允许这样做之外,您会看到在如此多地使用 JavaScript/AJAX 的页面上它变得多么困难。

使用 API,这是最简单的方法。

于 2012-08-27T09:03:11.553 回答