You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
131 lines
4.6 KiB
131 lines
4.6 KiB
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 |