diff --git a/FAAPI/FAAPI.py b/FAAPI/FAAPI.py index 4e1b4af..9fe3a08 100644 --- a/FAAPI/FAAPI.py +++ b/FAAPI/FAAPI.py @@ -431,15 +431,16 @@ class FAAPI: self.logged_in = False self.username = None - def login(self, cookies=None) -> None: + def login(self, cookies=None) -> bool: """ Logs this instance into FurAffinity. Beware that a Chrome instance is launched to bypass Cloudflare and log in. Specify valid cookies to bypass this. - @param cookies: Cookies to use for this session. + :param cookies: Cookies to use for this session. + :return: Whether the login attempt was successful. """ if self.logged_in: # No need to do anything if we're already logged in - return + return True if not cookies: # Try sign in to FA @@ -450,9 +451,6 @@ class FAAPI: while not self._driver.find_elements_by_id('my-username'): pass - # Save the username of the account we've logged in as - self.username = self._driver.find_elements_by_css_selector('#my-username:not(.hideondesktop)')[0].text.strip() - # Extract the cookies and stop the driver self._cookies = self._driver.get_cookies() self._driver.close() @@ -463,6 +461,19 @@ class FAAPI: self._req = requests.session() [self._req.cookies.set(cookie['name'], cookie['value']) for cookie in self._cookies] + # Verify login by getting our username + soup = self.get_soup(FA_BASE_URL) + try: + self.username = soup.select('.loggedin_user_avatar')[0].get('alt').strip() # This is more reliable than the user menu heading, don't ask why + except IndexError: + # Not logged in + self.logged_in = False + return False + + # Mark this instance as logged in + self.logged_in = True + return True + def get_user(self, username: str) -> User: soup = self.get_soup('{}/user/{}/'.format(FA_BASE_URL, username)) diff --git a/setup.py b/setup.py index 73c4f5e..b9b40db 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages setup( name='FAAPI', - version='0.2.1', + version='0.3.1', packages=find_packages(), url='https://tem.party/gitea/tom/FAAPI', license='WTFPL',