使用Python登录https网站

时间:2016-09-06 22:35:56

标签: python web-scraping python-requests

我刚刚在stackoverflow上发帖,所以请不要咬!我不得不求助于一个帐户并寻求帮助,以避免再把我的头撞在桌子上......

我尝试使用python中的requests模块登录以下网站https://account.socialbakers.com/login。似乎请求模块是要去的地方,但session.post()函数对我来说并不适用。我无法判断此类表格是否有独特之处或网站为https://

登录表格如下:

<form action="/login" id="login-form" method="post" novalidate="">
        <big class="error-message">
         <big>
          <strong>
          </strong>
         </big>
        </big>
        <div class="item-full">
         <label for="">
          <span class="label-header">
           <span>
            Your e-mail address
           </span>
          </span>
          <input id="email" name="email" type="email"/>
         </label>
        </div>
        <div class="item-list">
         <div class="item-big">
          <label for="">
           <span class="label-header">
            <span>
             Password
            </span>
           </span>
           <input id="password" name="password" type="password"/>
          </label>
         </div>
         <div class="item-small">
          <button class="btn btn-green" type="submit">
           Login
          </button>
         </div>
        </div>
        <p>
         <a href="/email/reset-password">
          <strong>
           Lost password?
          </strong>
         </a>
        </p>
       </form>

根据以下帖子How to "log in" to a website using Python's Requests module?,我尝试了以下代码:

url = 'https://account.socialbakers.com/login'
payload = dict(email = 'Myemail', password = 'Mypass')
with session() as s:
    soup = BeautifulSoup(s.get(url).content,'lxml')
    p = s.post(url, data = payload, verify=True)
    print(p.text)

然而,这只是再次给我登录页面,似乎没有登录我

我已在表单中检查了我所指的输入的正确名称&#39;电子邮件&#39;和密码&#39;。我也尝试过明确地传递cookie。建议使用verify = True参数来处理网站为https的事实。

我无法弄清楚这个表单与链接帖子上的表格有什么不同/不同之处。

由于

编辑:将p = s.get更新为p = s.post

3 个答案:

答案 0 :(得分:3)

检查了网站。它发送密码的SHA3哈希值而不是以明文形式发送。您可以在script.js的第111行中看到此信息,该信息包含在主页中:

unsigned unsigned char

<script src="/js/script.js"></script> 标记内。

因此,您需要在发送head请求时复制此行为。我找到了pysha3库来完成这项工作。

首先安装pysha3,然后运行POST(必要时提供pip install pysha3),然后运行以下代码

sudo

您将获得正确的登录页面!

答案 1 :(得分:0)

要注意两件事。一,尝试使用s.post和第二,你需要通过查看网络选项卡检查表单是否有任何其他值发送到浏览器。

答案 2 :(得分:0)

表单未以明文形式发送密码。它在发送之前对其进行加密或散列。当您通过网络在表单中键入密码aaaa时,它会发送

b3744bb9a8adb2d67cfdf79095bd84f5e77500a76727e6d73eef460eb806511ba73c9f765d4b3738e0b1399ce4a4c4ac3aed17fff34e0ef4037e9be466adec61

所以没有简单的方法可以通过请求库登录而不会重复此行为。