猿问

登录网站的问题

我正在尝试构建一个登录网页的小脚本,然后从那里我可以做其他事情。


获取未经身份验证的页面没有问题,但是当我尝试“登录”时,它似乎没有发布页面。我不确定是否是没有表单操作的问题,并且此页面上还有另一个隐藏的表单。


当我尝试我的代码时,返回的 html 会使用我提供的用户/密码填写字段。就好像没有按下“登录”按钮一样。


这是表格:


<form method="POST">

   <table border=1  bgcolor="#a7a7a7"  style="border-collapse:collapse;border-style:solid; border-color:#006600" >

      <tr>

         <td>

            <table  cellspacing=2 cellpadding=4>

               <tr>

                  <td align="right"  bgcolor="#b7b7b7" >your email</td>

                  <td  bgcolor="#c7c7c7" ><input name="user_email" type="text" size=30 value=""><br></td>

               </tr>

               <tr>

                  <td align="right"  bgcolor="#b7b7b7" >your password</td>

                  <td  bgcolor="#c7c7c7" ><input name="user_password" type="password" size=30><br></td>

               </tr>

               <tr>

                  <td align="center" colspan=2><input type="submit" name="do_login" value="log in"></td>

               </tr>

            </table>

         </td>

      </tr>

   </table>

   <input type="hidden" name="allhidden[0]" value="dummy">

   <input type="hidden" name="allhidden[_ga]" value="1234">

   <input type="hidden" name="allhidden[_gid]" value="1234">

   <input type="hidden" name="allhidden[gd_session]" value="eFmcHb">

   <input type="hidden" name="allhidden[grey_cookie]" value="&&&">

   <br>

</form>

这是我的代码:


s = requests.Session()


# Perform login

result = s.post(LOGIN_URL, data={

    "user_email": USERNAME, 

    "user_password": PASSWORD, 

})


# Scrape url

html = s.get(DASHBOARD_URL).content

print(html)

soup = BeautifulSoup(html, "html.parser")

尝试过代码的变体,但知道上述在正常页面上有效。我还需要传递其他内容或启动提交按钮吗?


谢谢你的帮助!


慕标5832272
浏览 200回答 1
1回答

一只名叫tom的猫

在检查[1]请求后,您可以看到以下字段是必需的:z: 7T2RlNuser_email: USERNAMEuser_password: PASSWORDdo_login: log inallhidden[0]: dummy您需要z从http://greyhound-data.com/login.htm 中抓取first的值,这是一个隐藏字段值:<input type="hidden" name="z" value="7T2RlN">。import requestsfrom bs4 import BeautifulSoupwith requests.Session() as s:&nbsp; &nbsp; r = s.get('http://greyhound-data.com/login.htm')&nbsp; &nbsp; soup = BeautifulSoup(r.text, 'lxml')&nbsp; &nbsp; z = soup.find('input', {'name': 'z'})['value']&nbsp; &nbsp; data = {&nbsp; &nbsp; &nbsp; &nbsp; 'z': z,&nbsp; &nbsp; &nbsp; &nbsp; 'user_email': USERNAME,&nbsp; &nbsp; &nbsp; &nbsp; 'user_password': PASSWORD,&nbsp; &nbsp; &nbsp; &nbsp; 'do_login': 'log in',&nbsp; &nbsp; &nbsp; &nbsp; 'allhidden[0]': 'dummy',&nbsp; &nbsp; }&nbsp; &nbsp; r = s.post('http://greyhound-data.com/login.htm', data=data)&nbsp; &nbsp; print('You are now successfully logged in.' in r.text)&nbsp; &nbsp; # True[1]:检查请求:打开开发人员工具(Ctrl+&nbsp;Shift+&nbsp;I)点击网络输入登录信息并提交表格点击&nbsp;login.htm更新代码:import requestsfrom bs4 import BeautifulSoupwith requests.Session() as s:&nbsp; &nbsp; r = s.get('http://greyhound-data.com/login.htm')&nbsp; &nbsp; soup = BeautifulSoup(r.text, 'lxml')&nbsp; &nbsp; data = {&nbsp; &nbsp; &nbsp; &nbsp; 'user_email': USERNAME,&nbsp; &nbsp; &nbsp; &nbsp; 'user_password': PASSWORD,&nbsp; &nbsp; &nbsp; &nbsp; 'do_login': 'log in',&nbsp; &nbsp; }&nbsp; &nbsp; for hidden_field in soup.find_all('input', type='hidden', value=True):&nbsp; &nbsp; &nbsp; &nbsp; data[hidden_field['name']] = hidden_field['value']&nbsp; &nbsp; r = s.post('http://greyhound-data.com/login.htm', data=data)&nbsp; &nbsp; print('You are now successfully logged in.' in r.text)
随时随地看视频慕课网APP

相关分类

Python
我要回答