0

我正在尝试使用 Python requests 模块对网站进行身份验证,然后从中检索一些信息。这是页面的登录部分:

<div>

    <label class="label-left" for="username"> … </label>
    <input id="username" class="inputbox" type="text" size="18" alt="username" name="username"></input>

</div>
<div>

    <label class="label-left" for="passwd"> … </label>
    <input id="passwd" class="inputbox" type="password" alt="password" size="18" name="passwd"></input>

</div>
<div> … </div>
<div class="readon">

    <input class="button" type="submit" value="Login" name="Submit"></input>    

我现在正在做的是:

payload = {
    'username': username,
    'passwd': password,
    'Submit':'Login'
}

with requests.Session() as s:
    s.post(login, data=payload)
    ans = s.get(url)
    print ans.text

问题是我得到相同的登录页面,即使在身份验证之后。响应码是 200,所以一切都应该没问题。我错过了什么吗?


更新

感谢评论,我分析了帖子请求,我发现有一些隐藏的参数。其中,有一些参数的值在不同的请求之间有所不同。出于这个原因,我只是用 BeautifulSoup 获取它们,然后更新 post 请求的有效负载,如下所示:

with requests.Session() as s:

    login_page = s.get(login)
    soup = BeautifulSoup(login_page.text)
    inputs = soup.findAll(name='input',type='hidden')

    for el in inputs:
        name = el['name']
        value = el['value']
        payload[name]=value

    s.post(login, data=payload)
    ans = s.get(url)

尽管如此,我仍然得到登录页面。可能还有其他一些影响因素吗?

4

0 回答 0