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