Попытка выяснить, почему сеансы Python не сохраняются после успешного входа - PullRequest
0 голосов
/ 08 июня 2019

Итак, я пытаюсь создать непрерывный веб-проект, где он войдет на сайт манги, который я прочитал с помощью своей учетной записи, перейду на страницу закладок для всей манги, которую я добавил в закладки, а затем посчитаю количество заголовков красной манги из-за того, что это идентификатор непрочитанной манги. Затем отобразится уведомление Windows.

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

Форма входа / полезная нагрузка имеет вид {'user': username, 'pass': password, 'captchar': captcha}, который я нашел в login_handle, когда вошел в систему вручную из своей учетной записи. Я использовал Chrome Developer Tools, чтобы увидеть, какие данные формы были переданы. Я обошёл капчу, введя её вручную.

Я попытался изменить заголовки сообщением, посмотрел на отправляемые и устанавливаемые файлы cookie (пока не полностью понял их) и изучал, как сторонний домен используется для входа в систему. Например, Я использую сайт mangakakalot, но вход в систему основан на user.manganelo.com/login. Путь POST: https://user.manganelo.com/login_handle.

from io import BytesIO
import requests as req
from bs4 import BeautifulSoup as soup
from PIL import Image

try:
    # Start a continuous session to maintain cookies
    with req.session() as s:

        # Get and display the captchar
        raw_html = s.get('https://user.manganelo.com/login?l=mangakakalot')
        html = soup(raw_html.content, 'html.parser')
        imgs = html.find_all('img')
        img = Image.open(BytesIO(req.get(imgs[1]['src']).content))
        img.format = 'PNG'
        img.show()

        # Enter username, password, and captchar
        captchar = input("Captchar: ")
        user = input("Username: ")
        password = input("Password: ")

        payload = {'user': user, 'pass': password, 'captchar': captchar}

        # Send payload to log in
        post = s.post('https://user.manganelo.com/login_handle', data=payload)
        print('Status: ', post.text, end='\n\n') # Display 'okie' if successful

        # Shows that navbar changed from login to username and button for redirect to bookmark webpage
        raw = s.get('https://user.manganelo.com/login')
        html = soup(raw.content, 'html.parser')
        print(html.findAll('div', {'class': 'user-options'}), end='\n\n')

        # Bookmark Webpage
        raw = s.get('https://mangakakalot.com/bookmark')
        html = soup(raw.content, 'html.parser')
        print(html.findAll('div', {'class': 'user-options'}), end='\n\n') # Suppose to display the same as above
        print(html.title.string) # Suppose to display 'Bookmark'

# Catch request error
except req.RequestException as e:
    print(e)

Поэтому, когда я запускаю код, я получаю (имя пользователя и пароль заменены на •••• в целях безопасности / Использование # для комментариев):

Captchar: 6566
Username: ••••
Password: ••••
Status:  okie # Status code successful

# Display's correctly saying that I am logged in
[<div class="user-options">
<span class="name">
<img src="https://avt.mkklcdnv3.com/avatar/19574-user_avatar.jpg"/>
<p>Xevon</p>
</span>
<a href="https://manganelo.com/bookmark"><i class="notification"></i></a>
<a href="https://manganelo.com/history"><i class="history"></i></a>
<a href="javascript:void(0);" onclick="logout();"><i class="logout"></i></a>
</div>]

# Does not display the same as top meaning that I am not logged in
[<div class="user-options">
<div class="login-top">
<a class="btn-login" href="https://user.manganelo.com/login?l=mangakakalot" rel="nofollow">Login</a>
<a class="btn-register" href="https://user.manganelo.com/register?l=mangakakalot" rel="nofollow">Register</a>
</div>
</div>]

# Suppose to be 'Bookmark' and not this
Mangakakalot - Read Manga Online

Process finished with exit code 0

...