From ef9309eb66debdc6d297d37c97f709a93f491438 Mon Sep 17 00:00:00 2001 From: David Lynch Date: Tue, 14 May 2024 22:04:44 -0500 Subject: [PATCH] Fix xenforo login --- sites/xenforo.py | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/sites/xenforo.py b/sites/xenforo.py index 7843c11..720cf00 100644 --- a/sites/xenforo.py +++ b/sites/xenforo.py @@ -3,6 +3,7 @@ import datetime import re import logging +import requests_cache from bs4 import BeautifulSoup from . import register, Site, SiteException, SiteSpecificOption, Section, Chapter @@ -60,13 +61,19 @@ class XenForo(Site): return f'https://{self.domain}/{path}' def login(self, login_details): - # Todo: handle non-https? - post = { - 'login': login_details[0], - 'password': login_details[1], - } - self.session.post(self.siteurl('login/login'), data=post) - logger.info("Logged in as %s", login_details[0]) + with requests_cache.disabled(): + login = self.session.get(self.siteurl('login/')) + soup = BeautifulSoup(login.text, 'html5lib') + post, action, method = self._form_data(soup.find(class_='p-body-content')) + post['login'] = login_details[0] + post['password'] = login_details[1] + # I feel the session *should* handle this cookies bit for me. But + # it doesn't. And I don't know why. + self.session.post( + self._join_url(login.url, action), + data=post, cookies=login.cookies + ) + logger.info("Logged in as %s", login_details[0]) def extract(self, url): soup = self._soup(url)