|
|
@@ -13,7 +13,7 @@ import pathlib2
|
|
|
|
|
|
import requests
|
|
|
import cfscrape
|
|
|
-from webbot.webbot import Browser
|
|
|
+from .browser import StealthBrowser as Browser
|
|
|
from appdirs import user_data_dir
|
|
|
|
|
|
|
|
|
@@ -115,6 +115,7 @@ class AuthenticationHandler:
|
|
|
self.login()
|
|
|
|
|
|
def login(self):
|
|
|
+ self.remove_cookie(self.username)
|
|
|
"""Login user if needed"""
|
|
|
LOGGER.info('"%s": start login, method: "%s"',
|
|
|
self.username, self.login_method)
|
|
|
@@ -141,10 +142,9 @@ class AuthenticationHandler:
|
|
|
|
|
|
if self.login_method in method_dict:
|
|
|
browser = method_dict[self.login_method](browser, auth_text)
|
|
|
- browser = method_dict[self.login_method](browser, auth_text)
|
|
|
else:
|
|
|
LOGGER.info(
|
|
|
- '"%s": Invallid loggin method "%s"',
|
|
|
+ '"%s": Invalid login method "%s"',
|
|
|
self.username, self.login_method
|
|
|
)
|
|
|
sys.exit()
|
|
|
@@ -152,36 +152,43 @@ class AuthenticationHandler:
|
|
|
LOGGER.info('"%s": Get PHPSESSID', self.username)
|
|
|
browser_cookie = browser.get_cookie('PHPSESSID')
|
|
|
if browser_cookie:
|
|
|
+ expiry = browser_cookie.get('expiry', None)
|
|
|
+ value = browser_cookie.get('value', None)
|
|
|
+ LOGGER.info(f'"value": {value}, "expiry": {expiry}')
|
|
|
cookie = self.create_cookie(
|
|
|
'PHPSESSID',
|
|
|
- browser_cookie.get('expiry', None),
|
|
|
- browser_cookie.get('value', None)
|
|
|
+ expiry,
|
|
|
+ value
|
|
|
)
|
|
|
cookies.append(cookie)
|
|
|
else:
|
|
|
raise NoCookieException()
|
|
|
|
|
|
- # TODO: try to get missing 'rr_f'
|
|
|
# TODO: what's up with 'rival/googles'
|
|
|
- # TODO: why doesn't PHPSESSID not work?
|
|
|
|
|
|
cookie_names = ['rr_f']
|
|
|
for cookie_name in cookie_names:
|
|
|
browser_cookie = browser.get_cookie(cookie_name)
|
|
|
if browser_cookie:
|
|
|
+ LOGGER.info(f'"{self.username}": Get {cookie_name}')
|
|
|
+ expiry = browser_cookie.get('expiry', None)
|
|
|
+ value = browser_cookie.get('value', None)
|
|
|
cookies.append(
|
|
|
self.create_cookie(
|
|
|
cookie_name,
|
|
|
- browser_cookie.get('expiry', None),
|
|
|
- browser_cookie.get('value', None)
|
|
|
+ expiry,
|
|
|
+ value
|
|
|
)
|
|
|
)
|
|
|
+ LOGGER.info(f'"value": {value}, "expiry": {expiry}')
|
|
|
else:
|
|
|
raise NoCookieException()
|
|
|
|
|
|
self.write_cookies(self.username, cookies)
|
|
|
LOGGER.debug('"%s": closing login tab', self.username)
|
|
|
browser.close_current_tab()
|
|
|
+ else:
|
|
|
+ LOGGER.info('Cookies found')
|
|
|
|
|
|
self.session = cfscrape.CloudflareScraper()
|
|
|
for cookie in cookies:
|
|
|
@@ -202,45 +209,31 @@ class AuthenticationHandler:
|
|
|
LOGGER.info('"%s": Login method Google', self.username)
|
|
|
auth_text1 = auth_text.split('\t<a href="')
|
|
|
auth_text2 = auth_text1[1].split('" class="sa')
|
|
|
+ time.sleep(1)
|
|
|
browser.go_to(auth_text2[0])
|
|
|
|
|
|
- number = 0
|
|
|
-
|
|
|
- browser.get_screenshot_as_file("test_{}.png".format(number))
|
|
|
- number += 1
|
|
|
-
|
|
|
LOGGER.info('"%s": Typing in username', self.username)
|
|
|
browser.type(self.username, into='Email')
|
|
|
|
|
|
- browser.get_screenshot_as_file("test_{}.png".format(number))
|
|
|
- number += 1
|
|
|
-
|
|
|
- with open("test_1.html", 'w') as file_obj:
|
|
|
- file_obj.write(browser.get_page_source())
|
|
|
-
|
|
|
LOGGER.info('"%s": pressing next button', self.username)
|
|
|
browser.click(css_selector="#next")
|
|
|
time.sleep(2)
|
|
|
|
|
|
- browser.get_screenshot_as_file("test_{}.png".format(number))
|
|
|
- number += 1
|
|
|
-
|
|
|
LOGGER.info('"%s": Typing in password', self.username)
|
|
|
browser.type(self.password, css_selector="input")
|
|
|
|
|
|
- with open("test_2.html", 'w') as file_obj:
|
|
|
- file_obj.write(browser.get_page_source())
|
|
|
-
|
|
|
- browser.get_screenshot_as_file("test_{}.png".format(number))
|
|
|
- number += 1
|
|
|
-
|
|
|
LOGGER.info('"%s": pressing sign in button', self.username)
|
|
|
browser.click(css_selector="#submit")
|
|
|
- time.sleep(2)
|
|
|
-
|
|
|
- browser.get_screenshot_as_file("test_{}.png".format(number))
|
|
|
- number += 1
|
|
|
+ time.sleep(3)
|
|
|
|
|
|
+ # Some why it wont click and login immediately. This seems to work
|
|
|
+ time.sleep(1)
|
|
|
+ browser.go_to(auth_text2[0])
|
|
|
+ time.sleep(1)
|
|
|
+ browser.go_to(auth_text2[0])
|
|
|
+ time.sleep(1)
|
|
|
+ browser.click(css_selector="#sa_add2 > div:nth-child(4) > a.sa_link.gogo > div")
|
|
|
+ time.sleep(3)
|
|
|
return browser
|
|
|
|
|
|
# IDK if this is working
|
|
|
@@ -277,22 +270,26 @@ class AuthenticationHandler:
|
|
|
return browser
|
|
|
|
|
|
@classmethod
|
|
|
- def write_cookies(cls, username, cookies):
|
|
|
+ def write_cookies(cls, username, passed_cookies):
|
|
|
"""Write cookie to file"""
|
|
|
LOGGER.info('Saving cookie for "%s"', username)
|
|
|
cookies = None
|
|
|
try:
|
|
|
with open('{}/cookies.json'.format(DATA_DIR), 'r') as cookies_file:
|
|
|
cookies = json.load(cookies_file)
|
|
|
+ if not cookies:
|
|
|
+ raise FileNotFoundError # raise error as if file hadn't been found
|
|
|
except FileNotFoundError:
|
|
|
- cookies = {}
|
|
|
- for cookie_name, cookie in cookies.items():
|
|
|
- cookies[username] = {
|
|
|
- cookie_name: {
|
|
|
- 'expires': cookie['expires'],
|
|
|
- 'value': cookie['value'],
|
|
|
- }
|
|
|
+ cookies = {username : {}}
|
|
|
+ if username not in cookies:
|
|
|
+ cookies[username] = {}
|
|
|
+ LOGGER.info(cookies)
|
|
|
+ for cookie in passed_cookies:
|
|
|
+ cookies[username][cookie['name']] = {
|
|
|
+ 'expiry': cookie['expires'],
|
|
|
+ 'value': cookie['value'],
|
|
|
}
|
|
|
+
|
|
|
with open('{}/cookies.json'.format(DATA_DIR), 'w+') as cookies_file:
|
|
|
json.dump(cookies, cookies_file)
|
|
|
LOGGER.info('Saved cookie for "%s"', username)
|
|
|
@@ -304,19 +301,20 @@ class AuthenticationHandler:
|
|
|
cookies = []
|
|
|
try:
|
|
|
with open('{}/cookies.json'.format(DATA_DIR), 'r') as cookies_file:
|
|
|
- for cookie_username, user_cookies in json.load(cookies_file).items():
|
|
|
- if cookie_username == user_cookies:
|
|
|
+ cookies_data = json.load(cookies_file)
|
|
|
+ for cookie_username, user_cookies in cookies_data.items():
|
|
|
+ if cookie_username == username:
|
|
|
LOGGER.info('"%s": Found cookies', username)
|
|
|
for cookie_name, cookie in user_cookies.items():
|
|
|
expires = datetime.fromtimestamp(
|
|
|
- int(cookie['expires'])
|
|
|
+ int(cookie['expiry'])
|
|
|
)
|
|
|
if datetime.now() >= expires:
|
|
|
LOGGER.info('"%s": Cookie is expired', username)
|
|
|
return None
|
|
|
cookies.append(cls.create_cookie(
|
|
|
cookie_name,
|
|
|
- cookie['expires'],
|
|
|
+ cookie['expiry'],
|
|
|
cookie['value'],
|
|
|
))
|
|
|
return cookies
|
|
|
@@ -340,14 +338,14 @@ class AuthenticationHandler:
|
|
|
LOGGER.info('Removed cookie for "%s"', username)
|
|
|
|
|
|
@staticmethod
|
|
|
- def create_cookie(name, expires, value):
|
|
|
+ def create_cookie(name, expiry, value):
|
|
|
"""Create cookie"""
|
|
|
return {
|
|
|
'domain': 'rivalregions.com',
|
|
|
'name': name,
|
|
|
'path': '/',
|
|
|
'secure': False,
|
|
|
- 'expires': expires,
|
|
|
+ 'expires': expiry,
|
|
|
'value': value,
|
|
|
}
|
|
|
|