Веб-очистка защищенного паролем сайта с использованием Ghost.py

Я пытаюсь получить содержимое HTML сайта, защищенного паролем, используя Ghost.py.

Веб-сервер, к которому у меня есть доступ, имеет следующий HTML-код (я сократил его только до важных частей):

URL: http://192.168.1.60/PAGE.htm

<html>
<head>
<script language="JavaScript">
    function DoHash()
    {
      var psw = document.getElementById('psw_id');
      var hpsw = document.getElementById('hpsw_id');
      var nonce = hpsw.value;
      hpsw.value = MD5(nonce.concat(psw.value));
      psw.value = '';
      return true;
    }
    </script>
</head>
<body>
<form action="PAGE.HTM" name="" method="post" onsubmit="DoHash();">
Access code <input id="psw_id" type="password" maxlength="15" size="20" name="q" value="">
<br>
<input type="submit" value="" name="q" class="w_bok">
<br>
<input id="hpsw_id" type="hidden" name="pA" value="180864D635AD2347">
</form>
</body>
</html>

Значение "#hpsw_id" меняется каждый раз, когда вы загружаете страницу.

В обычном браузере, после того, как вы введете правильный пароль и нажмете ввод или нажмете кнопку "отправить", вы окажетесь на той же странице, но теперь с реальным содержанием.

URL: http://192.168.1.60/PAGE.htm

<html>
<head>
<!–– javascript is gone ––>
</head>
<body>
Welcome to PAGE.htm content
</body>
</html>

Сначала я попытался с механизировать, но не удалось, так как мне нужен JavaScript. Так что теперь я пытаюсь решить это с помощью Ghost.py

Мой код до сих пор:

import ghost
g = ghost.Ghost()
with g.start(wait_timeout=20) as session:
    page, extra_resources = session.open("http://192.168.1.60/PAGE.htm")
    if page.http_status == 200:
        print("Good!")
        session.evaluate("document.getElementById('psw_id').value='MySecretPassword';")
        session.evaluate("document.getElementsByClassName('w_bok')[0].click();", expect_loading=True)
        print session.content

Этот код не загружает содержимое правильно, в консоли я получаю:

Traceback (последний вызов был последним): файл "", строка 8, в файле "/usr/local/lib/python2.7/dist-packages/ghost/ghost.py", строка 181, в таймере оболочки =kwargs.pop('timeout', None)) Файл "/usr/local/lib/python2.7/dist-packages/ghost/ghost.py", строка 1196, в wait_for_page_loaded "Невозможно загрузить запрашиваемую страницу", тайм-аут) Файл "/ usr / local / lib / python2.7 / dist-packages / ghost / ghost.py ", строка 1174, в wait_for повышение TimeoutError(timeout_message) ghost.ghost.TimeoutError: невозможно загрузить запрашиваемую страницу

Два вопроса...

1) Как я могу успешно войти на сайт, защищенный паролем, и получить реальный контент PAGE.htm?

2) Является ли это направление лучшим путем? Или я что-то упускаю полностью, что заставит вещи работать более эффективно?

Я использую Ubuntu Mate.

1 ответ

Это не тот ответ, который я искал, просто обходной путь, чтобы это сработало (на случай, если у кого-то еще возникнет аналогичная проблема в будущем).

Чтобы пропустить часть javascript (которая мешала мне использовать запрос python), я решил сделать ожидаемый хеш на python (а не в сети) и отправить хеш, как это сделала бы обычная веб-форма.

Таким образом, Javascript в основном объединяет скрытое значение hpsw_id и пароль и делает из него md5.

Питон теперь выглядит так:

import requests
from hashlib import md5
from re import search

url = "http://192.168.1.60/PAGE.htm"
with requests.Session() as s:
    # Get hpsw_id number from website
    r = s.get(url)
    hpsw_id = search('name="pA" value="([A-Z0-9]*)"', r.text)
    hpsw_id = hpsw_id.group(1)
    # Make hash of ID and password
    m = md5()
    m.update(hpsw_id + 'MySecretPassword')
    pA = m.hexdigest()
    # Post to website to login
    r = s.post(url, data=[('q', ''), ('q', ''), ('pA', pA)])
    print r.content

Примечание. Q, q и pA - это элементы, которые отправляет форма (q=&q=&pA=f08b97e5e3f472fdde4280a9aa408aaa) при обычном входе в систему с использованием интернет-браузера.

Однако, если кто-то знает ответ на мой оригинальный вопрос, я был бы очень признателен, если бы вы опубликовали его здесь.

Другие вопросы по тегам