Вхід до веб-сторінки за допомогою сценарію


3

Я намагаюся автоматизувати видобування інформації з веб-сайту, який спочатку вимагає входу. Я зробив це в минулому (років тому), використовуючи 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>

Якщо хтось міг би сказати мені, чому це не спрацює, я був би вічно вдячний.

EDIT: Я просто створив свою власну маленьку веб-форму (структуровану точно так само, як на сайті), і вона спрацювала дуже добре. Тепер, що, чорт візьми, вони могли б робити, що робить це так, що я не можу увійти, використовуючи або wget або механізувати?


2
Це питання може бути краще підходить для stackoverflow.com.
Tim S. Van Haren

Тім С. Ван Харен: Дійсно? Я збирався розмістити його там, але я був упевнений, що вони збираються відправити мене сюди.
Tommy Brunn

ви спробували встановити рядок користувача-агента тим, що очікує веб-сайт? іноді веб-реєстрації викидають підключення до конкретних UA, оскільки вони знають, що їхній сайт видобувається (автоматично читається не людиною)
RobotHumans

Я спробував встановити рядок агента користувача так само, як і веб-переглядач. Нещастить.
Tommy Brunn

Відповіді:


2
  1. Завантажити Wireshark.
  2. Запишіть реальний браузер, потрапивши на сайт.
  3. Установіть фільтр на tcp.port == 80 і знайдіть тільки що зроблений запит.
  4. Клацніть правою кнопкою миші на пакеті і виберіть Follow TCP Stream і зберегти цей текст десь.

Тепер у вас є повна робоча бесіда з веб-браузера на веб-сайті, який ви хочете очистити.

Повторіть процес для вашого сценарію і дізнайтеся, де вони відрізняються, потім внесіть відповідні зміни, щоб виправити це. Коли вони ідентичні, сайт не може побачити різницю між вами та вашим сценарієм.

Якщо вам потрібна більша гнучкість, я пропоную написати простий скрипт Python замість використання wget.


1
Виявляється, вони якось змінили кодування імені користувача та / або пароля. Порівняння журналів показало, що моє ім'я кодується трохи по-іншому, що і призвело до помилки входу.
Tommy Brunn
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.