您需要发送完整的表格。找出Facebook期望的最简单方法是使用类似Google
Chrome的开发人员工具的工具来监视您的Web请求。
为了让您的生活更轻松,我已经在Facebook上监视了自己的登录名,并在下面复制了该登录名(显然,已删除了私人信息),并删除了不重要的信息:
Request URL:https://m.facebook.com/login.php?refsrc=https://www.mshxw.com/skin/sinaskin/image/nopic.gif Method:POSTForm data: lsd:AVqAE5Wf charset_test:€,´,€,´,水,Д,Є version:1 ajax:0 width:0 pxr:0 gps:0 m_ts:1392974963 li:cxwHUxatQiaLv1nZEYPp0aTB email:... pass:... login:Log In
如您所见,该表单包含许多字段。所有这些都需要提供,以便您登录。电子邮件和密码将由您的代码提供。实际上,其余字段的值由Facebook为您提供的HTML设置。这意味着,要模拟浏览器登录,您需要执行以下步骤:
- 进入登录页面(
https://m.facebook.com/
) - 使用HTML解析库(例如BeautifulSoup)来解析HTML并找到表单字段的默认值。
- 默认值全部位于
<input>
元素下方的HTML元素中#login_form
。您需要按名称查找它们(例如charset_test
),然后提取其value
属性。 - 制定如何执行此操作不在此答案的范围内,因此我不再赘述。
- 默认值全部位于
将表单字段的默认值与您的电子邮件和密码结合起来,如下所示:
data = {'lsd': lsd,'charset_test': csettest, 'version': version,'ajax': ajax,'width': width,'pxr': pxr,'gps': gps,'m_ts': mts,'li': li,}
data[‘email’] = email
data[‘pass’] = pass
data[‘login’] = ‘Log In’使用请求发送登录信息
Session
:s = requests.Session()
r = s.post(url, data=data)
r.raise_for_status()通过来发送所有将来的HTTP流量
Session
。
如您所见,这是一种不平凡的做事方式。这是因为不希望程序会使用该网站登录:相反,您应该改用其SDK或Web API。



