|  | @@ -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,
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 |