From 6b2a8022951079f38e94254d43f05afb33200d00 Mon Sep 17 00:00:00 2001 From: Lasse Date: Wed, 24 Mar 2021 07:49:10 +0100 Subject: [PATCH] Added module for generating profile information --- .gitignore | 2 +- facebook/__pycache__/arangodb.cpython-37.pyc | Bin 2392 -> 3727 bytes facebook/profile_create.py | 181 +++++++++++++++++++ facebook/scrapers.py | 13 +- 4 files changed, 192 insertions(+), 4 deletions(-) create mode 100644 facebook/profile_create.py diff --git a/.gitignore b/.gitignore index b6fbd9d..8752d39 100644 --- a/.gitignore +++ b/.gitignore @@ -8,4 +8,4 @@ /data/* *.html *.code-workspace -workspace.code-workspace +workspace.code-workspace \ No newline at end of file diff --git a/facebook/__pycache__/arangodb.cpython-37.pyc b/facebook/__pycache__/arangodb.cpython-37.pyc index 42d42c2ab06b49409e42ac73f8c481e889c6f8b0..d469ec0cb91d777a26416f8707a796d47e94c2ad 100644 GIT binary patch delta 1974 zcma)7-ESL35Z~Q9pU;lt#Lj2arn#gw^pMh)3Q>rvDv%aZC}~Mtr9G)K7wkLo)EfMkWe4_512iNP|`lI*3R6{?9A@$Z)W^k z{^4}?&B4Jmg7Nzww?FuE;8AvxOyNgo=G!VoRCN=U7V~7x6RuuMSt*P_rn%`NqDiVh zK-K_F(KPT39iSQDgLH;w>CgjgW$7@@fn8JqwjP!(4R z#gw#=gQ>Dl_HYY#l^zPez%%W|#j@|Fji<)ajqBI1E)|XSYsF<_>Bg;HXM(Z?%O;tRi1(Sa2Wv40*O?QwReR{A_eyHVJS}@ z5}6HAy6iVRQKEi1I0oy(xCzb>J_eGqj8_f?W(sB;_gnBGP#5=57b5TBJtCB@3NJvu zL|+rCQ1t<7p)06^7e#_5IvA)H(_{x8hw5KxJ;043z$3NN%oXm;7i#kbY7~|i3hylx z)|xtJb)SpiTsTC=+j%%|6FlBc%eSqfM`RnIjDwLtHUh>yyT(kyC2)}{1xG^V1E4tr zGmsH!sA=qQN3c@=oU@l)zihj~W%zIcQTA)~%Tcn%Y8#9PQ9D<6%A&#LZo4cT-wPuB zKopporIZ{RCFG$2p9JsLgz$y!mY%WVQ&OAp*v>yXFz50@k>dF~ksb(M5l)T8NLoXV z2R=oq4fr%_%o8yrroxYdMeK{q3_KEPlzBR`)370s&?B71D%NoZYw?et1X=Na<@M`F z5*tuc8#7>TEI& zSeckhXrIYkJ|d-r%QM2VIy-V6KKjW?G%Zd}Bm7MLYn)GjqNyJMb?(4l_-&$umqSHc z!V}@!+L@8dPnjnO9wvM){8+0%#Xr&Rr~8jMEzk0jFXi5qn>8Q^Pho<&8UB#G+CF?J zsW~i!k6_`TJ-oX>F|@f0dt?*sDZ54sby17-uq+XfXZO^W(j_fbX8rcuI%+8`+#;9I zc6uENg+j@6$iw_zLa5yYXc9ewq2E#UeYA>hBcaiDLL|F7)LV)|>BuURjW2F!$;N%S z#oCr#2OyYdR0H3e->}PDjk-~J{1Z2VIx9OBr_8ubnE|c9W&I>Rn~uB98+7dn;8^{Dinu^m<9ivbq8TgH3ei5W5wi5UJKm;Zk<>Mf* z^tv4cJ3gl-E}EyqA$^SS3*oH(+LZj0h|4psD{jc;oFr!G=&lxD_hR^~e$#jrr1Fpq c)`>0)lIV(_(FgQQI;#)r1L0z7lIXd=0knp}MgRZ+ delta 702 zcmX|7PiqrF6rVS{JDF^=n`E0dX=-$P5SoHk+9F=HDjtg!steMl&O{TlNuAyPu_!&n zgO?(8PW6<4-=N?Z=qC^qWI@qy;n6n=zQ_Ch-n^N4|K2se1^zA1a|w!^UEjK%JMnAu zH#wQVa^wgi>>i5@JH1@YBMt<8*2_O2A}9D861gHTT;vHcAqvO^;RzqvJ4mIEZ;PTd zv~H8fA}Y$FC_ks_tt<@*ke4eWkT4`w5|yRX4Mvl)JgSVz7`jt(8Y9)UZcR)c)6tBm zj3KJ8kqz=<5AZ8sr($Xd$QGtYeuOs<(Kd+W@`9K?hHgV%l$T^(RFAEwA?$V1texG3 zQ-F&8N$*3Zm#u3@1)MtJW_Dl>qXDP@{U;`11kfzBRkWmnkdiKpsDLrNCa=iI8WYS* zcNg#~ym$UFPFpJ6QG<4;7Y^c3$TaNqQyD((4pf?i?ekA+Hw_QpyWv04KiIam>8#$& zc{5F0nRb+Cz(>gJzC1{qpigsinbjZcXFN$& zJMF|$e{dJdOaCiF9VnRls3`tZW_y`! zaw%Ki^lp^QewA6Jsv4Nn+Ur3>JO0|zRSXmWm2%()EneUrsvF>$VQrU|zz0Sdo;U>7 EA2~3Y{r~^~ diff --git a/facebook/profile_create.py b/facebook/profile_create.py new file mode 100644 index 0000000..9d60d6c --- /dev/null +++ b/facebook/profile_create.py @@ -0,0 +1,181 @@ +import random +import subprocess +from getopt import getopt +from sys import argv +from time import sleep + +from arangodb import db, get_profile, remove_profile + + +def profile_generator(db, n): + + cursor = db.aql.execute( + """ + FOR doc IN @@col + FILTER doc._to == 'members/krisjohngethin' + RETURN doc._from + """, + bind_vars={"@col": "picture_reactions"}, + ) + + count = 0 + first_names = [] + last_names = [] + n = int(n) + 1 + for doc in cursor: + name = db.collection("members").get(doc)["name"] + first_names.append(name[: name.find(" ")]) + last_names.append(name[name.rfind(" ") :]) + + with open("../data/passwords.txt") as f: + words = [word for word in f.readlines()] + + with open("../data/servers.txt") as f: + servers = [] + for line in f.readlines(): + if "@" in line: + line = line.strip() + city = line[: line.find("@")].strip() + + if "WireGuard" in line and line.strip()[:2] in [ + "gb", + "us", + ]: # "au", "ca" #För senare när det behövs + line = line.strip() + country_short = line[:2] + server = line[: line.find("-")] + city_short = city[city.find("(") + 1 : city.find(")")] + server_name = [country_short, city_short, server + "-wireguard"] + servers.append( + { + "server_city": city, + "server": server + "-wg.socks5.mullvad.net:1080", + "server_connect": server_name, + } + ) + + count = 0 + for i in range(0, n - 1): + name = ( + first_names[random.randrange(0, len(first_names), 1)].strip() + + " " + + last_names[random.randrange(0, len(last_names), 1)].strip() + ) + print(name, end="\r") + sleep(0.1) + year = str(random.randrange(74, 90)) + email = name.lower().replace(" ", ".") + year + "@outlook.com" + pwd = "" + for _ in range(0, random.randrange(3, 6)): + w = words[random.randrange(0, 10000, 1)].strip() + if random.randrange(0, 3) == 0: + w = w.upper() + pwd = pwd + "_" + w + pwd = pwd.strip("_") + str(random.randrange(5, 35)) + server_info = servers.pop(random.randrange(0, len(servers))) + server = server_info["server"].strip() + birthday = f"{year}-{random.randrange(1, 13)}-{random.randrange(1, 30)}" + _key = server[: server.find("-")] + doc = { + "_id": "profiles/" + _key, + "_key": _key, + "name": name, + "email": email, + "pwd": pwd, + "server": server, + "server_connect": server_info["server_connect"], + "birthday": birthday, + "created": False, + "in_use": False, + } + # Skriv till databasen (skriver inte profiler med servarar som redan används) + try: + db.insert_document("profiles", doc) + count += 1 + except: + pass + + print(f"Skrev {count} profiler till databasen. ") + + +def mullvad(server): + """ Anslut till Mullvad-server. """ + subprocess.run( + [ + "mullvad", + "relay", + "set", + "location", + server[0], + server[1], + server[2], + ] + ) + connect_to_mullvad = subprocess.Popen(["mullvad", "connect"]) + connect_to_mullvad.wait() + sleep(3) + +def create_profile(): + """ Supports during the creation of a profile """ + + arango_server = ["se", "sto", "se2-wireguard"] + + while True: + mullvad(arango_server) + + # Hämta profil + profile = get_profile(created=False) + + # Asnlut till profilens VPN-server + mullvad(profile["server_connect"]) + + # Öppna Brave med Outlook och Facebook + subprocess.run(["open", "-a", "Brave Browser", "https://outlook.com"]) + + # Printa användaruppgfifter för Outlook och Facebook + print() + print(profile["email"][: profile["email"].find("@")]) + print(profile["pwd"]) + print(profile["birthday"]) + print(profile["name"]) + + print() + print() + print(profile["name"]) + print(profile["email"]) + print(profile["pwd"]) + print(profile["birthday"]) + + user_input = input("Done/Next/Delete/Quit: ") + user_input = user_input.lower() + + if user_input in ["done", "d", ""]: + subprocess.run(["osascript", "-e", 'quit app "Brave Browser"']) + sleep(1) + profile["created"] = True + mullvad(arango_server) + db.update_document(profile) + + elif user_input in ["delete", "d"]: + subprocess.run(["osascript", "-e", 'quit app "Brave Browser"']) + sleep(1) + mullvad(arango_server) + remove_profile(profile) + + elif user_input in ["quit", "q"]: + subprocess.run(["osascript", "-e", 'quit app "Brave Browser"']) + sleep(1) + mullvad(arango_server) + exit() + else: + continue + +if __name__ == "__main__": + argv = argv[1:] + opts, args = getopt(argv, "cg:", ["create", "generate"]) + + for o, a in opts: + if o in ["-g", "--generate"]: + profile_generator(db, a) + if o in ['-c', '--create']: + create_profile() diff --git a/facebook/scrapers.py b/facebook/scrapers.py index 20fcc94..bf1d124 100644 --- a/facebook/scrapers.py +++ b/facebook/scrapers.py @@ -80,7 +80,14 @@ def profile_picture_reactions(profile, user, all_pictures, first_user=False, mod user.url_timeline = url_bas + a["href"] if "Cover photos" in a.text: user.url_coverphotos = url_bas + a["href"] - + + # Om det inte finns något profilalbum + # Testa ta bort mellanrum och små bokstäver + if not hasattr(user, "url_album"): + for a in profile.viewing().find_all("a", href=True): + if "profilepictures" in a.text.lower().replace(' ', ''): + user.url_album = url_bas + a["href"] + user.add_to_db() # Gå till profilbilden (den första som kommer upp när man går till profilen) @@ -169,7 +176,7 @@ def profile_picture_reactions(profile, user, all_pictures, first_user=False, mod write_error(8, e=e, soup=profile.viewing(), url=pic, url_name='picture url', user=user.name, traceback=traceback.format_exc()) # TODO #3 lägg till fler bilder som kan gås igenom om det är få profilbilder. - # Hämta länkar för bilden att userända sen + # Hämta länkar för bilden att anvrända sen #print(profile.viewing().prettify()) for a in profile.viewing().find_all("a", href=True): if all( @@ -206,7 +213,7 @@ def profile_picture_reactions(profile, user, all_pictures, first_user=False, mod url_limit = a["href"] picture.no_reactions = re.search(r"total_count=(\d+)", url_limit).group(1) - limit = re.search(r"limit=(\d+)", url_limit).group(1) + limit = re.search(r"limit=(\d+)", url_limit).group(1) # TODO Fortfarande problem med det här except UnboundLocalError: #fel9 write_error(9, soup=profile.viewing(), traceback=traceback.format_exc(), url=url_reactions, url_name='url_reactions') # Bilder med väldigt många likes går inte att visa så här?