Python 3.x Python授权

Python 3.x Python授权,python-3.x,python-requests,Python 3.x,Python Requests,我需要写一个脚本,该脚本包含在我的互联网提供商的个人帐户中,并传输有关当前余额的信息 目前,我在授权时被卡住了。我为自己找到并编辑了这样一个脚本: import requests url = 'https://bill.tomtel.ru/login.html' USERNAME, PASSWORD, = 'mylogin', 'mypass' resp = requests.get(url, auth=(USERNAME, PASSWORD)) r = requests.post(ur

我需要写一个脚本,该脚本包含在我的互联网提供商的个人帐户中,并传输有关当前余额的信息

目前,我在授权时被卡住了。我为自己找到并编辑了这样一个脚本:

import requests

url = 'https://bill.tomtel.ru/login.html'

USERNAME, PASSWORD, = 'mylogin', 'mypass'

resp = requests.get(url, auth=(USERNAME, PASSWORD))

r = requests.post(url)

print(r.content)
但这无助于通过授权

我可以通过浏览器输入此链接并转到此类型的页面:

https://bill.tomtel.ru/fastcom/!w3_p_main.showform?FORMNAME=QFRAME&CONFIG=CONTRACT&SID=BLABLABLA&NLS=WR
我可以通过这两个链接进行浏览器授权,但为什么不能通过脚本进行呢


请提供帮助。

您的浏览器可能存储了会话令牌/cookie,这就是您可以通过浏览器访问它的原因。这里有几个问题:

  • 看起来您需要先登录到该站点——通过
    POST
    方法,而不是
    GET
    GET
    加载页面。但是一旦你提交了表单,它就会发出一个
    POST
    请求
  • 实际上,使用
    请求
    登录站点并不像看上去那么容易。通常,您必须找到它发布到的url(检查开发者工具栏以查看url),并且除了您的用户名/密码之外,您还必须传递信息,例如csrf令牌、cookie或其他信息
  • 我建议使用浏览器自动机来实现这一点,也许类似于。它使登录站点比在原始请求中使用HTTP简单得多,因为它模拟浏览器。我建议这样做——它更简单、更快 另一件需要注意的事情:
    auth=(用户名,密码)
    不是表单中的用户名/密码(它是其他的东西),但我认为理解它与您试图做的事情不太相关


    以下是url和登录所需的表单数据:


    我想你应该试试这个:

    import requests
    
    url = 'https://bill.tomtel.ru/signin.php'
    
    USERNAME = input('Enter your username: ')
    PASSWORD = input('Enter your password: ')
    d = {
    'USERNAME' : USERNAME,
    'PASSWORD' : PASSWORD,
    'FORMNAME' : 'QFRAME'}
    
    session = requests.Session()
    
    resp = session.post(url, data=d).text
    if not '<TITLE>' in resp:
        print('Incorrect username or password!')
        quit()
    print('Logging in ... ')
    for line in resp.split('\n'):
        if 'location' in line:
            red = 'https://bill.tomtel.ru/fastcom/!w3_p_main.showform%s' % line.replace(' if (P>0) self.location.replace("', '').replace('");', '')
    if not red:
        print('An error has occured')
        quit()
    print('Redirecting to %s' % red)
    page = session.get(red).text
    
    print('')
    print('          MAIN PAGE')
    print(page)
    
    导入请求
    url='1〕https://bill.tomtel.ru/signin.php'
    用户名=输入('输入用户名:')
    PASSWORD=input('输入您的密码:')
    d={
    “用户名”:用户名,
    “密码”:密码,
    'FORMNAME':'QFRAME'}
    会话=请求。会话()
    resp=session.post(url,data=d).text
    如果不是resp中的“”:
    打印('不正确的用户名或密码!')
    退出
    打印('登录…')
    对于分别拆分('\n')中的行:
    如果行中有“位置”:
    红色的https://bill.tomtel.ru/fastcom/!w3_p_main.showform%s'%line.replace('if(p>0)self.location.replace('','').replace('''),'').replace(''','')
    如果不是红色:
    打印('发生错误')
    退出
    打印('重定向到%s'%1!'红色)
    页面=会话.get(红色).text
    打印(“”)
    打印('主页')
    打印(第页)
    
    改用post尝试此操作。payload={'USERNAME':USERNAME,'PASSWORD':PASSWORD}requests.post(url,data=payload)。我重复了使用Selenium Webdriver的建议。我会记住这一点,但我会把它作为最后的手段。它可以设法以通常的方式通过。评论不是为了进行长时间的讨论;这段对话已经结束。