通过脚本登录网页

通过脚本登录网页

我正在尝试自动从首先需要我登录的网站提取一些信息。我过去(几年前)使用 wget 做过这件事,但这种方法似乎不再起作用 - 我不知道为什么。

我曾经这样做过:

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

现在,当我尝试运行它时,我只是被送回主页(所以我不仅仅是输入了错误的密码。如果我这样做了,我会得到不同的标记)。

我也尝试过用 Python 来实现机械化(这比 wget 更好),但我似乎得到了相同的结果。我不明白为什么这行不通。这是网站处理表单的部分。要查看完整标记,只需转到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>

如果有人能告诉我为什么这行不通,我将永远感激。

编辑:我刚刚设置了自己的小型 Web 表单(结构与网站上的表单完全相同),它运行良好。现在他们到底在做什么,导致我无法使用 wget 或 mechanize 登录?

答案1

  1. 下载 Wireshark。
  2. 记录真实的浏览器访问网站的情况。
  3. 设置您的过滤器tcp.port == 80并找到您刚刚提出的请求。
  4. 右键单击一个数据包并选择Follow TCP Stream并将该文本保存在某处。

现在,您已经获得了从 Web 浏览器到您想要抓取的网站的完整、有效的对话。

重复此过程,找出脚本的不同之处,然后进行适当的更改以修复它。一旦它们相同,网站就无法看出您和您的脚本之间的差异。

如果您需要更大的灵活性,我建议编写一个简单的 Python 脚本,而不是使用wget

相关内容