0

Python requests モジュールを使用して Web サイトへの認証を行い、そこから情報を取得しようとしています。これは、ページのログイン部分です。

<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 でそれらを取得してから、投稿リクエストのペイロードを次のように更新しています。

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