如果我连续运行下面的代码10次,它将工作大约一半的时间,其余的都会失败。有人知道为什么吗?
import urllib2, cookielib, re, os, sys
class Facebook():
def __init__(self, email, password):
self.email = email
self.password = password
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
opener.addheaders = [('Referer', 'http://login.facebook.com/login.php'),
('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)')]
self.opener = opener
def login(self):
url = 'https://login.facebook.com/login.php?login_attempt=1'
data = "locale=en_US&non_com_login=&email="+self.email+"&pass="+self.password+"&lsd=20TOl"
usock = self.opener.open('http://www.facebook.com')
usock = self.opener.open(url, data)
if "Logout" in usock.read():
print "Logged in."
else:
print "failed login"
print usock.read()
sys.exit()
f = Facebook("test@gmail.com", "asdfasdf")
f.login()
我也遇到过同样的问题。我找到的唯一解决办法是。。。facebook手机更稳定。
另外,facebook手机还没有ajax,所以弄清楚要发出什么请求要容易得多。
所以我尝试了你的代码,并让它登录一次,然后像你一样,我有麻烦登录再次。在“if”语句之前的一行,我添加了 打印usock.read() 最后得到了一堆html代码。然后我把代码放到记事本上,保存为一个html文件,然后把它拉上来。 这就是正在发生的事情:Facebook怀疑我们是从一个计算机程序登录的,并等待我们通过显示一个验证码来验证我们是真的。这个程序并没有考虑到这一点,当它实际上是一个挂起的登录时,会打印“失败的登录”。
每次修理对我都有效。 然后我想在登录后真正阅读页面内容。为此,我在“print”登录“”之后添加了“print usock.read()”,但这返回了空字符串。我猜是因为usock被打了两次电话,所以我修改了第一次给usock的电话:
这样一来,第一次只有一个电话打给usock,而且很管用。然后使用return a代替print a,因为这样可以直接使用login()返回页面源。不过,请随便。
相关问题 更多 >
编程相关推荐