【问题标题】:Authenticate with Python-requests on aspx based website在基于 aspx 的网站上使用 Python 请求进行身份验证
【发布时间】:2021-10-26 02:29:39
【问题描述】:

我想从我们公司物流的基于 ASP 的运输页面中抓取数据。我在网上看了很多关于BeautifulSoupRequests 库的教程。但它并没有像我预期的那样工作。

登录网址为:

https://portal-vesta.sequoialog.com.br/tms/LoginPortal.aspx

我在 bash 脚本中编写了代码,我的登录尝试成功了,返回此消息:

69|dataItem||<script type="text/javascript">window.location="about:blank"</script>|32|pageRedirect||/tms/HomePortal.aspx?Usu=1070rpr|

但在 python 中,它返回给我这个消息:

b'69|dataItem||<script type="text/javascript">window.location="about:blank"</script>|21|pageRedirect||/TMS/LoginPortal.aspx|'

我的代码是:

with Session() as s:

        page = s.get(urls[0])

        get_ev_vs(page)

        payload = "Ajax=UpdatePanel1%7CButton1&Button1=ENTRAR&__ASYNCPOST=true&__EVENTARGUMENT=&__EVENTTARGET=&__EVENTVALIDATION={}&__LASTFOCUS=&__VIEWSTATE={}&txtSenha={}&txtUsuario={}&txtUsuarioSolicita=".format(ev, vs, password, user)
        head = {
            'sec-ch-ua': '" Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"',
            'Cache-Control': 'no-cache',
            'X-MicrosoftAjax': 'Delta=true',
            'sec-ch-ua-mobile': '?0',
            'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36',
            'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
            'Accept': '*/*'
        }

        response = s.post(urls[0], data=payload, headers=head)

        payload = {}
        headers = {
          'sec-ch-ua': '"Chromium";v="92", " Not A;Brand";v="99", "Google Chrome";v="92"',
          'sec-ch-ua-mobile': '?0',
          'Upgrade-Insecure-Requests': '1',
          'DNT': '1',
          'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36',
          'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
          'Cookie': 'ASP.NET_SessionId=' + s.cookies["ASP.NET_SessionId"]
        }

        open_page = s.get(urls[1], data=payload, headers=headers)
        print(open_page.text)

def get_ev_vs(page):
    soup = BeautifulSoup(page.text, 'html.parser')
    global vs, ev
    vs = soup.select_one('#__VIEWSTATE')['value']
    ev = soup.select_one('#__EVENTVALIDATION')['value']

【问题讨论】:

    标签: python asp.net beautifulsoup request


    【解决方案1】:
    import requests
    from bs4 import BeautifulSoup
    import re
    from urllib.parse import urljoin
    
    target = ['__VIEWSTATE', '__EVENTVALIDATION']
    
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0",
    }
    
    
    def main(url):
        with requests.Session() as req:
            req.headers.update(headers)
            r = req.get(url)
            soup = BeautifulSoup(r.text, 'lxml')
            values = [soup.select_one('#{}'.format(x))['value'] for x in target]
            data = {
                "Ajax": "UpdatePanel1|Button1",
                "__LASTFOCUS": "",
                "__EVENTTARGET": "",
                "__EVENTARGUMENT": "",
                "__VIEWSTATE": values[0],
                "__EVENTVALIDATION": values[1],
                "txtUsuario": "aaa",      #username should be here
                "txtSenha": "aaa",        #password too!
                "txtUsuarioSolicita": "",
                "__ASYNCPOST": "true",
                "Button1": "ENTRAR"
            }
            r = req.post(url, data=data)
            match = re.search(r'ScriptPath\|([^|]+db)\|', r.text).group(1)
            final = urljoin(url, match)
            r = req.get(final)
            print(r.text)
    
    
    main('https://portal-vesta.sequoialog.com.br/tms/LoginPortal.aspx')
    

    【讨论】:

    • 哇,太棒了!!!非常感谢您的回复,我刚刚删除了 match 和 final 变量并且工作得很好!我的错误是在发布请求中包含标题,听起来好多了 req.headers.update(headers)
    猜你喜欢
    • 1970-01-01
    • 2014-09-06
    • 2014-10-02
    • 1970-01-01
    • 1970-01-01
    • 2020-01-10
    • 2015-08-12
    • 1970-01-01
    • 2010-11-13
    相关资源
    最近更新 更多