1

Facebookにログインしてステータスを更新するプログラムをサイドプロジェクトとして書いています。プログラムにログインすることができました。ただし、「ここにステータスを入力してください」ボックスになるテキストエリアを選択するのに問題があります。Chromeで「Inspect Element」を使用すると、それが配置されているフォームを確認できますが、プログラムでフォームをリストしても、そのフォームがリストされていないようです...

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」は「Find People, Things, etc.」です。検索バー、および名前のないフォームがログアウト ボタンに関係しているように見えます。ただし、Inspect Elements は少なくとも 2 つのフォームを提供し、そのうちの 1 つにステータス更新ボックスがあります。JavaScript が原因かどうかを判断できませんでした (ステータス更新ボックスのコード ブロックは にカプセル化されていますが、navSearch フォームとログアウト フォームもカプセル化されています)。ログアウトフォームは別のdivにありますが、機械化にとってはそれほど問題にならないように感じます。私のコードに何か問題があるだけですか、それともまったく別のものですか?

4

1 に答える 1

1

私のコードに何か問題があるだけですか、それともまったく別のものですか?

あなたのアプローチ全体が間違っています:

Facebookにログインしてステータスを更新するプログラムを書いています

それが Graph API の目的です。

FB ページをスクレイピングして「ブラウザ」として機能させようとするのは、適切な方法ではありません。FB ポリシーがそれを許可していないという事実は別として、JavaScript/AJAX を多用するページでそれがいかに難しいかがわかります。

API を使用すると、簡単な方法です。

于 2012-08-27T09:03:11.553 に答える