首页 > 解决方案 > 用于表单发布的 Python 请求会话似乎没有持续存在

问题描述

我正在尝试 (1) 使用请求登录网站,然后 (2) 更新登录受限子页面上六个文本字段的值。我的代码似乎登录成功。状态码为 200,并且 print(login.text) 返回的输出仅在成功登录后才显示登录页面的 HTML。

但是,一旦我尝试将数据发布到下一页 (diary_url) 上的六个字段,我的请求会话似乎并没有保持登录状态。

有谁知道是什么导致了我的问题?下面是相关的 HTML 和 Python。

登录页面的 HTML

<div class="member-login">
    
    <h2>Member Login</h2>
    <ul class="list-unstyled">
      <li>
      </li>
      <li class="username-field">
          <label>Email Address:</label>
          <input autocapitalize="none" class="text" id="username" name="username" placeholder="Email Address" size="12" type="text" value="" />
      </li>
      <li class="password-field">
        <label>Password:</label>
        <input class="text" id="password" name="password" placeholder="Password" size="12" type="password" value="" />
      </li>
      <li class="remember-field">
        <input checked="checked" class="checkbox" id="remember_me" name="remember_me" type="checkbox" value="1" />
        <label for="remember_me" >Remember me next time</label>
      </li>
      <li class="submit" >
        <input type="submit" value="Log In" />
      </li>
      <li class="or or-static-page" >
        <span>or</span>
        <div class="hr"></div>
      </li>
      <li>
        <a href="#" class="facebook-login-css bttn btn-primary" id="facebook-login-css">Log in with Facebook</a>
      </li>
    </ul>
  </div>

我想通过帖子提交新数据的第二页的 HTML

<div class="col-1">

        <h4>Meal Names:</h4>

        <ol class="fieldset">

            
              <li class="field">
                <input class="text" id="meal_names_0_description" maxlength="30" name="meal_names[0][description]" size="30" type="text" value="A. 35P 3V 0F 20C" />
              </li>
            
              <li class="field">
                <input class="text" id="meal_names_1_description" maxlength="30" name="meal_names[1][description]" size="30" type="text" value="B. 35P 3V 0F 20C" />
              </li>
            
              <li class="field">
                <input class="text" id="meal_names_2_description" maxlength="30" name="meal_names[2][description]" size="30" type="text" value="C. 35P 3V 10F 20C" />
              </li>
            
              <li class="field">
                <input class="text" id="meal_names_3_description" maxlength="30" name="meal_names[3][description]" size="30" type="text" value="D. 35P 3V 10F 35C" />
              </li>
            
              <li class="field">
                <input class="text" id="meal_names_4_description" maxlength="30" name="meal_names[4][description]" size="30" type="text" value="E. 35P 3V 15F 55C" />
              </li>
            
              <li class="field">
                <input class="text" id="meal_names_5_description" maxlength="30" name="meal_names[5][description]" size="30" type="text" value="WO. 35P 0V 0F 65C" />
              </li>

        </ol>

      </div>

自定义 Python 代码以登录网站,然后提交新的字段名

import secrets, requests

meals={
    0:'Leaf',
    1:'Crackor',
    2:'Stinky',
    3:'Grape',
    4:'Appol',
    5:'Bellay'
}

mealnames={
    'meal_names_0_description': meals[0],
    'meal_names_1_description': meals[1],
    'meal_names_2_description': meals[2],
    'meal_names_3_description': meals[3],
    'meal_names_4_description': meals[4],
    'meal_names_5_description': meals[5]
}

payload={
    'username': secrets.user,
    'password': secrets.pw
}

with requests.Session() as s:
    login_url="https://www.myfitnesspal.com/account/login"
    diary_url='https://www.myfitnesspal.com/account/diary_settings'

    login = s.post(login_url, data=payload)
    if(login.status_code!=200):
        print("BAD")

    go_to_diary = s.get(diary_url)
    diary_page = s.post(diary_url, data=mealnames)

标签: pythonhtmlsessionpython-requestspersistence

解决方案


推荐阅读