class Profile: def __init__(self, profile, container, proxieservers): """Creates a new profile to do searches with. Args: profile (dict): Document fetched from database. container (str): Docker container that runs the script. """ self.doc = profile # Användaruppgifter self.name = self.doc["name"].strip() self.email = self.doc["email"] self.pwd = self.doc["pwd"] self.server = self.doc["server"] self.cookie = self.doc["cookie"] self.useragent = self.doc["useragent"] self.proxieservers = proxieservers self.blocked = False self.container = str(container) self.users_checked = 0 # Ange proxies session = requests.Session() session.proxies = self.doc['proxies'] # Starta browser user_agent = self.useragent self.browser = RoboBrowser( session=session, user_agent=user_agent, history=False, parser="lxml" ) try: self.browser.session.cookies = pickle.load( open("data/cookie_{}.pkl".format(self.name), "rb") ) self.logged_in = True except: try: self.browser.session.cookies.update(self.cookie) self.logged_in = True except: self.logged_in = False def update_time(self): """ Uppdatera dokumentet i arango. """ self.doc["in_use"] = nowstamp() db.update_document(self.doc, check_rev=False) def viewing(self): """ Returnerar browser i html-format """ return self.browser.parsed def open(self, url): n = 0 while True: n += 1 sleep(1) try: self.browser.open(url) if '/a/nux/wizard/nav.php?step=phone&skip' in self.viewing(): self.browser.open(url_bas + '/a/nux/wizard/nav.php?step=phone&skip') break except Exception as e: print(e) print(n) _print(self, None, f'Kunde inte öppna url {url}') if n == 5: if 'Connection refused' in e: self.doc['e'] = e db.insert_document('blocked_profiles', self.doc) n = 0 from arangodb import get_profile, remove_profile # Ta bort den gamla profilen från databasen och ersätt profile med nytt innehåll från ny profil remove_profile(self) self.__init__(get_profile(self.proxieservers), self.container) _print(self, None, f'Ny profil hämtad {self.email}') self.update_time() else: sleep(40) def accept_cookies(self): """ Accepterar cookies """ self.browser.open("https://mbasic.facebook.com") soup = BeautifulSoup(str(self.browser.parsed), "lxml") if "accept all" not in soup.text.lower(): sleep_(2) cookie_accept_url = "https://mbasic.facebook.com/cookie/consent-page" self.browser.open(cookie_accept_url) sleep_(2) try: form = self.browser.get_form() self.browser.submit_form(form) _print(self, None, f"Accepterade cookies för {self.name}") sleep_(2) update_cookie(self.browser.session.cookies, self) except: try: write_error(12, self, soup=self.browser.parsed) except: pass _print(self, None, f"Accepterade inte cookies för {self.name}") def login(self): """ Loggar in på Facebook. """ print("Loggar in {}".format(self.name)) # Gå till log in-sidan self.browser.open("https://mbasic.facebook.com/login") # Kolla om browser redan är inloggad soup = BeautifulSoup(str(self.browser.parsed), "lxml") if "log out" in soup.text.lower(): print("Redan inloggad.") try: # Hitta och fyll i formulär form = self.browser.get_form(id="login_form") form["email"].value = self.email form["pass"].value = self.pwd self.browser.submit_form(form, submit=form["login"]) # Vänta lite och uppdatera cookie print("Loggade in.") sleep_(2) self.open(url_bas) sleep_(2) except TypeError: try: write_error(11, self, soup=soup, profile=self.name) except: pass