python - 使用Python登录https网站

标签 python web-scraping python-requests

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

我正在尝试登录以下网站 https://account.socialbakers.com/login在 python 中使用请求模块。似乎 requests 模块是我要去的地方,但 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)

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

我在表格中检查过我指的是输入“电子邮件”和“密码”的正确名称。我也试过显式地传递 cookie。建议使用 verify=True 参数来处理网站是 https 的事实。

我无法弄清楚此表单与链接帖子中的表单有何不符/有何不同。

谢谢

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

最佳答案

检查了网站。它发送密码的 SHA3 哈希值而不是明文发送。您可以在 script.js 的第 111 行中看到这一点它包含在主页中,如下所示:

<script src="/js/script.js"></script>

head 标签内。

因此您需要在发送 POST 请求时复制此行为。我找到了 pysha3很好地完成这项工作的库。

所以先安装pysha3通过运行 pip install pysha3(必要时提供 sudo)然后运行下面的代码

import sha3
import hashlib
import request

url = 'https://account.socialbakers.com/login'
myemail = "abhigolu10@gmail.com"
mypassword = hashlib.sha3_512(b"st@ck0verflow").hexdigest() #take SHA3 of password
payload = {'email':myemail, 'password':mypassword}
with session() as s:
    soup = BeautifulSoup(s.get(url).content,'lxml')
    p = s.post(url, data = payload, verify=True)
    print(p.text)

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

关于python - 使用Python登录https网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39358781/

相关文章:

python - 用漂亮的汤刮掉所有 h1 标签内容

python - Python 网页抓取时的编码问题

python-requests - Python 请求无法通过(转换后的)客户端证书获得成功响应

python - sys.modules[__name__] = _classname()。它实际上有什么作用?

python - 在 Windows 上将 Python 链接到我的 C++ 代码中 - 链接器错误

python - 将子字符串列表匹配到 Python 中的字符串列表

python - 如何解决Python中的 "MissingSchema"错误?

python - 为什么我的 Scrapy 蜘蛛没有按预期运行?

python - 使用 python 请求获取 ('Connection aborted.' 、 OSError(0, 'Error' ) 错误

python - 如何计算 pandas 股票开盘价的百分比变化