Nano Hash - криптовалюты, майнинг, программирование

Как использовать запросы Python для входа на веб-сайт, сохранения файлов cookie, а затем доступа к другой странице на веб-сайте?

Я пытаюсь войти на веб-сайт с помощью скрипта Python, сохранить полученный файл cookie, а затем использовать тот же файл cookie для доступа к частям веб-сайта, предназначенным только для участников. Я прочитал несколько сообщений и ответов на эту тему, но ни один из ответов не помог мне.

Вот HTML-код страницы входа на веб-сайт, к которой я пытаюсь получить доступ.

<form action="/login?task=user.login" method="post">
    <fieldset>
        <table border="0" cellspacing="0" cellpadding="0">
        <tbody>
                                                        <tr>
            <td width="70" nowrap="">Username&nbsp;&nbsp;</td>
            <td width="260"><input type="text" name="username" id="username" value="" class="validate-username" size="25"/></td>
                    </tr>
                                                                                <tr>
            <td width="70" nowrap="">Password&nbsp;&nbsp;</td>
             <td width="260"><input type="password" name="password" id="password" value="" class="validate-password" size="25"/></td>
         </tr>
                                                        <tr>
             <td colspan="2"><label style="float: left;width: 70%;" for="modlgn_remember">Remember Me</label>
             <input style="float: right;width: 20%;"id="modlgn_remember" type="checkbox" name="remember" class="inputbox" value="yes"/></td>
         </tr>
         <tr>
            <td  colspan="2" width="100%"> <a href="/reset-password"> Forgot your password?</a></td>
        </tr>
        <tr>
            <td  colspan="2" width="100%"> <a href="/username-reminder">Forgot your username?</a></td>
        </tr>
        <tr>
            <td colspan="2"><button type="submit" class="button cta">Log in</button></td>
<!--                            <td colspan="1"><a href="/--><!--">Register Now</a></td>-->
        </tr>
        </tbody>
        </table>

        <input type="hidden" name="return"
               value="aHR0cHM6Ly9maWYuY29tLw=="/>
        <input type="hidden" name="3295f23066f7c6ab53c290c6c022cc4b" value="1" />                    </fieldset>
</form>

Вот мой собственный код, который я использую для попытки входа в систему.

from requests import session

payload = {
     'username': 'MY_USERNAME',
     'password': 'MY_PASSWORD'
}

s = session()
s.post('https://fif.com/login?task=user.login', data=payload)

response = s.get('https://fif.com/tools/capacity')

Из всего, что я читал, это должно работать, но это не так. Я боролся с этим два дня, поэтому, если вы знаете ответ, мне бы понравилось решение.

Для справки, вот все другие сообщения StackOverflow, которые я просмотрел в надежде получить ответ:

  1. Запросы Python и постоянные сеансы
  2. Вход на сайт с помощью запросов Python
  3. Войти на сайт с помощью python
  4. Как войти в систему на веб-сайт с помощью модуля запросов Python?
  5. Python: запрашивает файлы cookie входа в сеанс
  6. Как использовать Python для входа на веб-страницу и получения файлов cookie для последующего использования?
  7. cUrl Войдите, затем cUrl Загрузите

Ответы:


1

Вы должны опубликовать все необходимые данные, вы можете использовать bs4 для анализа страницы входа, чтобы получить нужные вам значения:

from requests import session
from bs4 import BeautifulSoup

data = {
    'username': 'MY_USERNAME',
    'password': 'MY_PASSWORD'
}

head = {"User-Agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"}
with  session() as s:
    soup = BeautifulSoup(s.get("https://fif.com/login").content)
    form_data = soup.select("form[action^=/login?task] input")
    data.update({inp["name"]: inp["value"] for inp in form_data if inp["name"] not in data})
    s.post('https://fif.com/login?task=user.login', data=data, headers=head)
    resp = s.get('https://fif.com/tools/capacity')

Если вы делаете запросы и смотрите в chrome tools или firebug, данные формы выглядят так:

username:foo
password:bar
return:aW5kZXgucGhwP29wdGlvbj1jb21fdXNlcnMmdmlldz1wcm9maWxl
d68a2b40daf7b6c8eaa3a2f652f7ee62:1
29.06.2016
  • Просто чтобы уточнить, я не должен использовать все эти пользовательские агенты, только один из них, верно? И что вы подразумеваете под тем, что вы должны публиковать все необходимые данные? Что мне не хватает? 30.06.2016
  • @Джейкоб, есть только один 30.06.2016
  • Что вы подразумеваете под тем, что вы должны публиковать все необходимые данные? Что мне не хватает? @Падраик 30.06.2016
  • Я сделал это и получил эту ошибку: Файл req3.py, строка 13, в ‹module› data.update({inp[name]: inp[value] for inp in inputs if inp[name] not in data}) NameError : имя «входы» не определено 01.07.2016
  • Извините, должно быть form_data 01.07.2016
  • Еще одна ошибка: был сделан HTTPS-запрос, но расширение SNI (Subject Name Indication) для TLS недоступно на этой платформе. Это может привести к тому, что сервер представит неверный сертификат TLS, что может привести к сбоям проверки. Вы можете перейти на более новую версию Python, чтобы решить эту проблему. Для получения дополнительной информации см. urllib3.readthedocs.org/en/latest/. SNIMissingWarning 01.07.2016
  • Вам необходимо установить urllib3.readthedocs.io/en/latest/security.html# pyopenssl, поддержка sni есть только в python ›= 2.7.9, вы также можете просто использовать python3 01.07.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..