Efetuando login na página da web via script

3

Eu estou tentando automatizar a extração de algumas informações de um site que primeiro requer que eu faça o login. Eu fiz isso no passado (anos atrás) usando o wget, mas esse método não parece mais funcionar - e eu não sei porque.

Eu costumava fazer assim:

MY_USERNAME=username # needs to be urlencoded, this can be done at http://lajm.eu/emil/dump/stringfunctions.php.
MY_PASSWORD=password # also has to be urlencoded

LOGIN_DATA="action=login&login_nick=$MY_USERNAME&login_pwd=$MY_PASSWORD"

wget --quiet --save-cookies cookiejar --keep-session-cookies --post-data $LOGIN_DATA --user-agent 'Firefox' -O um.htm http://ungdomar.se/index.php

Agora, quando tento executar isso, acabo sendo enviado de volta para a página principal (portanto, não estou apenas colocando a senha errada. Se eu tivesse feito isso, obteria uma marcação diferente).

Eu também tentei fazer isso em Python usando mecanizar (isso seria preferível para wget), mas eu pareço obter o mesmo resultado. Apenas confunde minha mente porque isso não funciona. Esta é a parte do site que lida com o formulário. Para ver a marcação completa, simplesmente vá para ungdomar.se .

<div id="loginLoginbox" style="display:none;">
    <form name="login" method="post" action="/"> 
        <table width="250" cellspacing="0" cellpadding="0" border="0"> 
            <tr>
                <td colspan="2">
                    <span class="page_login_text">Användarnamn</span><br /> 
                    <input name="login_nick" type="text" style="width:250px;height:16px;line-height:10px;font-size:9px;" maxLength="30">
                </td>
            </tr> 
            <tr>
                <td colspan="2">
                    <span class="page_login_text">Lösenord</span><br /> 
                    <input name="login_pwd" type="password" style="width:250px;height:16px;line-height:10px;font-size:9px;" maxLength="25"><br />
                    <img src="/gfx/1x1.gif" width="1" height="5" alt="" />
                </td>
            </tr> 
            <tr>
                <td width="42%" valign="top">
                    <span style="vertical-align:super;" class="page_login_text">
                        <label for="login_auto">Kom ihåg mig</label>
                    </span>
                    &nbsp;
                    <input name="login_auto" id="login_auto" type="checkbox" value="1" style="width:12px; height:12px;">
                </td> 
                <td width="58%" align="right" valign="top">
                    <a class="page_login_text" href="/sendpwd.php">Glömt lösen?</a> 
                    <button class="button_active" type="submit">Logga in</button>
                </td>
            </tr> 
        </table>
    </form>
</div>

Se alguém pudesse me dizer por que isso não funcionaria, eu ficaria eternamente grato.

EDIT: Acabei de configurar o meu próprio formulário web (estruturado exatamente como aquele no site), e funcionou muito bem. Agora, o que diabos eles poderiam estar fazendo que faz com que eu não possa logar usando wget ou mechanize?

    
por Tommy Brunn 18.11.2010 / 15:30

1 resposta

2
  1. Faça o download do Wireshark.
  2. Grave um navegador real no site.
  3. Defina seu filtro como tcp.port == 80 e encontre a solicitação que você acabou de fazer.
  4. Clique com o botão direito do mouse em um pacote e escolha Follow TCP Stream e salve esse texto em algum lugar.

Agora, você tem a conversa completa e ativa do seu navegador da web até o site que deseja criar.

Repita o processo do seu script e descubra onde eles diferem e, em seguida, faça as alterações apropriadas para corrigi-lo. Uma vez que eles são idênticos, o site não pode ver a diferença entre você e seu script.

Se você precisar de mais flexibilidade, sugiro escrever um script Python simples em vez de usar wget .

    
por 18.11.2010 / 16:38