· 4 years ago · Jul 26, 2021, 01:28 PM
1FROM_PWD = "******" # email jelszó a csillagok helyére - sajnos a gmailes trükkök már nem működnek, majd ki kell találni helyette valamit
2
3import random
4from selenium import webdriver
5from selenium.webdriver.common.action_chains import ActionChains
6import datetime
7import smtplib
8import time
9import imaplib
10import email
11import traceback
12
13FROM_EMAIL = "orbangeciorbangeciorbangeciorbangecio1g@gmail.com"
14SMTP_SERVER = "imap.gmail.com"
15SMTP_PORT = 993
16
17START_FROM = 3555 # egyelőre leállás után kézzel kell megadni, hogy honnan folytassa
18FILL_UNTIL = 200000
19
20
21def format_td(seconds, digits=2):
22 isec, fsec = divmod(round(seconds*10**digits), 10**digits)
23 return ("{}.{:0%d.0f}" % digits).format(datetime.timedelta(seconds=isec), fsec)
24
25def generate_email_2(count, string = "orbangeciorbangeciorbangeciorbangecio1g"):
26 binary_string = bin(count).replace("0b", "")
27 # ez így még párszázezer kombinációra jó :D
28 return_string = ""
29 for counter, char in enumerate(string):
30 try:
31 if binary_string[counter] == "1":
32 return_string += char + "."
33 else:
34 return_string += char
35 except:
36 if counter == len(binary_string):
37 return_string += char + "."
38 else:
39 return_string += char
40
41 # print(count, " -> ", binary_string + " -> " + return_string + "@gmail.com ;)")
42
43 return return_string + "@gmail.com"
44
45
46
47def de_accentize(string):
48 character_pairs = {"á" : "a", "é" : "e", "í" : "i", "ó" : "o", "ö" : "o", "ő" : "o", "ú" : "u", "ü" : "u", "ű" : "u"}
49
50 for character in character_pairs:
51 if character in string:
52 string = string.replace(character, character_pairs[character])
53 elif character.upper() in string:
54 string = string.replace(character.upper(), character_pairs[character].upper())
55
56 return string
57
58class Person:
59 def __init__(self, person_id):
60 self.id = person_id
61 self.name = self.generate_random_name()
62 self.age = random.randint(18,85)
63 # self.email = "or.ban3gy.g3ci+" + str(self.id).zfill(5) + de_accentize(self.family_name.lower() + "." + de_accentize(self.first_name.lower().replace(" ", "."))) + "_" + str(self.age) + "@gmail.com"
64 self.email = generate_email_2(self.id-START_FROM)
65
66 def generate_random_name(self, double_name_percentage = 5):
67 family_names = ["NAGY","KOVÁCS","TÓTH","SZABÓ","HORVÁTH","VARGA","KISS","MOLNÁR","NÉMETH","FARKAS","BALOGH","PAPP","LAKATOS","TAKÁCS","JUHÁSZ","OLÁH","MÉSZÁROS","SIMON","RÁCZ","FEKETE","SZILÁGYI","TÖRÖK","FEHÉR","BALÁZS","GÁL","KIS","SZŰCS","ORSÓS","KOCSIS","FODOR","PINTÉR","SZALAI","SIPOS","MAGYAR","LUKÁCS","GULYÁS","BIRÓ","KIRÁLY","BALOG","LÁSZLÓ","BOGDÁN","JAKAB","KATONA","SÁNDOR","VÁRADI","BOROS","FAZEKAS","KELEMEN","ANTAL","OROSZ","SOMOGYI","FÜLÖP","VERES","BUDAI","VINCZE","HEGEDŰS","DEÁK","PAP","BÁLINT","ILLÉS","PÁL","VASS","SZŐKE","FÁBIÁN","VÖRÖS","LENGYEL","BOGNÁR","BODNÁR","JÓNÁS","SZÜCS","HAJDU","HALÁSZ","MÁTÉ","SZÉKELY","GÁSPÁR","KOZMA","PÁSZTOR","BAKOS","DUDÁS","VIRÁG","MAJOR","ORBÁN","HEGEDÜS","BARNA","NOVÁK","SOÓS","TAMÁS","NEMES","PATAKI","BALLA","FARAGÓ","KEREKES","BARTA","PÉTER","BORBÉLY","CSONKA","MEZEI","SÁRKÖZI","BERKI","MÁRTON"]
68 first_names = [
69 ["Gábor","László","Attila","Péter","Tamás","István","Zsolt","József","János","Csaba","Sándor","Róbert","Krisztián","Ferenc","András","Balázs","Tibor","Norbert","Szabolcs","Imre","György","Gergely","Lajos","Roland","Viktor","Gyula","Károly","Miklós","Mihály","Béla","Dániel","Ákos","Ádám","Richárd","Árpád","Dávid","Pál","Szilárd","Antal","Bálint","Levente","Márton","Géza","Kornél","Gergő","Kálmán","Endre","Nándor","Máté","Barnabás","Dénes","Jenő","Márk","Ernő","Mátyás","Ottó","Dezső","Bence","Vilmos","Ervin","Áron","Arnold","Olivér","Bertalan","Rudolf","Milán","Albert","Lóránt","Szilveszter","Andor","Kristóf","Barna","Győző","Henrik","Iván","Adrián","Erik","Jácint","Gusztáv"],
70 ["Krisztina","Katalin","Mónika","Szilvia","Anita","Zsuzsanna","Éva","Judit","Ágnes","Tímea","Erika","Ildikó","Mária","Anikó","Melinda","Gabriella","Eszter","Beáta","Erzsébet","Viktória","Tünde","Edina","Adrienn","Bernadett","Rita","Edit","Orsolya","Hajnalka","Csilla","Renáta","Brigitta","Annamária","Veronika","Nikoletta","Marianna","Enikő","Ilona","Anna","Dóra","Nóra","Márta","Mariann","Barbara","Anett","Henrietta","Beatrix","Ibolya","Zsófia","Emese","Noémi","Zita","Réka","Nikolett","Gyöngyi","Kinga","Diána","Julianna","Zsanett","Zsuzsa","Magdolna","Klára","Margit","Lívia","Angéla","Petra","Piroska","Boglárka","Henriett","Alexandra","Irén","Szabina","Helga","Timea","Klaudia","Ivett","Izabella","Valéria","Júlia"]]
71
72 rnd = random.randint(0,100)
73 gender = random.randint(0,1) # A GENDER VESZÉLYES!!!!!!4 STOP SOROS
74
75 if rnd < double_name_percentage:
76 names = 2
77 else:
78 names = 1
79
80 self.family_name = family_names[random.randint(0, len(family_names)-1)].lower().capitalize()
81
82 self.first_name = ""
83
84 for n in range(names):
85 selected_name = first_names[gender][random.randint(0,len(first_names[gender])-1)]
86 if self.first_name == "":
87 self.first_name = selected_name
88 else:
89 self.first_name = self.first_name + " " + selected_name
90
91 def register(self):
92 driver.get("https://nemzetikonzultacio.kormany.hu/")
93 time.sleep(.5)
94 family_name_input = driver.find_element_by_id("mat-input-0")
95 family_name_input.send_keys(self.family_name)
96 time.sleep(.2)
97 first_name_input = driver.find_element_by_id("mat-input-1")
98 first_name_input.send_keys(self.first_name)
99 time.sleep(.2)
100 # age_input = driver.find_element_by_xpath("//*[@class='small-input ng-pristine ng-invalid ng-touched']")
101 age_input = driver.find_element_by_xpath("//input[@placeholder='Életkor * (kötelező)']")
102 age_input.send_keys(self.age)
103 time.sleep(.2)
104 email_input = driver.find_element_by_id("mat-input-2")
105 email_input.send_keys(self.email)
106 time.sleep(.2)
107
108 # driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
109
110 for s in range(50):
111 driver.execute_script("window.scrollBy(0, 10);")
112 time.sleep(.005)
113
114
115 cboxes = driver.find_elements_by_class_name("mat-checkbox-inner-container")
116 for cbox in cboxes:
117 cbox.click()
118 time.sleep(.25)
119
120 '''
121 hun_checkbox = driver.find_element_by_id("mat-checkbox-1-input")
122 hun_checkbox.click()
123 time.sleep(.1)
124 cbox_2 = driver.find_element_by_id("mat-checkbox-2-input")
125 cbox_2.click()
126 time.sleep(.1)
127 buttons = driver.find_elements_by_css_selector("input[type='button']")
128 '''
129
130 reg_button = driver.find_element_by_xpath("//*[@class='btn w-auto']")
131 reg_button.click()
132
133 def check_email(self):
134 email_received = False
135
136 while email_received == False:
137 print(".", end="", flush=True)
138 try:
139 mail = imaplib.IMAP4_SSL(SMTP_SERVER)
140 mail.login(FROM_EMAIL,FROM_PWD)
141 mail.select('inbox')
142
143 data = mail.search(None, 'ALL')
144 mail_ids = data[1]
145 id_list = mail_ids[0].split()
146 first_email_id = int(id_list[0])
147 latest_email_id = int(id_list[-1])
148
149 # for i in range(latest_email_id,first_email_id, -1):
150
151 for i in range(latest_email_id,latest_email_id-1, -1):
152 data = mail.fetch(str(i), '(RFC822)' )
153 for response_part in data:
154 arr = response_part[0]
155 if isinstance(arr, tuple):
156 msg = email.message_from_string(str(arr[1],'utf-8'))
157 to = msg["Delivered-To"]
158
159 if to == self.email:
160
161 email_subject = msg['subject']
162 email_from = msg['from']
163 # print('From : ' + email_from + '\n')
164 # print('Subject : ' + email_subject + '\n')
165 # print(msg["Delivered-To"])
166 # print(msg._payload[0].__dict__)
167 part_list = list(msg._payload[1]._payload.split("<"))
168 for counter, part in enumerate(part_list):
169 if "a href" in part:
170 url, junk = part.split('" target=3D"_blank"')
171 url = url.replace('a href=3D"', "")
172 url = url.replace("\r", "").replace("\n", "").replace("konzulta=cio", "konzultacio")
173
174 self.custom_url = url
175
176 email_received = True
177
178 except Exception as e:
179 traceback.print_exc()
180 print(str(e))
181
182 time.sleep(.25)
183
184 def fill_form(self):
185 actions = ActionChains(driver)
186 driver.get(self.custom_url)
187
188 time.sleep(.5)
189
190 radio_buttons = driver.find_elements_by_css_selector("input[type='radio']")
191
192 # radio_buttons = driver.find_elements_by_class_name("mat-radio-label")
193
194
195 fill_pattern = list()
196 fill_pattern_check = list()
197 counter = 0
198
199 for x in range(14):
200 select = random.randint(0,1)
201 fill_pattern.append(counter+select)
202 fill_pattern_check.append(select)
203 counter += 2
204
205 # print("fill pattern", fill_pattern)
206 # print("fill pattern check", fill_pattern_check)
207
208
209
210 for counter, rb in enumerate(radio_buttons):
211 # actions.move_to_element(rb).perform()
212 driver.execute_script("return arguments[0].scrollIntoView(true);", rb)
213 driver.execute_script("window.scrollBy(0, -400);")
214
215 if counter in fill_pattern:
216 # if 1 == 1:
217 driver.execute_script("arguments[0].click();", rb)
218 time.sleep(.1)
219 else:
220 pass
221
222 for s in range(10):
223 driver.execute_script("window.scrollBy(0, 10);")
224 time.sleep(.05)
225
226
227 reg_button = driver.find_element_by_xpath("//*[@class='btn submit-btn']")
228 driver.execute_script("arguments[0].click();", reg_button)
229
230
231
232if __name__ == "__main__":
233
234
235 import os
236 driver = webdriver.Chrome("D:\\chromedriver.exe")
237 start_time = datetime.datetime(2021,7,25,22,0)
238
239 for x in range(START_FROM, FILL_UNTIL):
240
241 os.system("cls")
242 print("================================================================================\n -= NERbot 2.0 =- \nDISCLAIMER: a robot egy átlagos Fideszesnél is butább (talán még Hollik Istvánnál is,\n de ez nem biztos) és csak véletlenszerű válaszokat ad az egyes kérdésekre.\n A KÉRDÉSEKRE ADOTT VÁLASZOK NEM TÜKRÖZIK A ROBOT FEJLESZTŐJÉNEK ÁLLÁSPONTJÁT,\n A NERBOT KIZÁRÓLAGOS CÉLJA A KORMÁNYZATI INFORMATIKA SZÍNVONALÁNAK DEMONSTRÁLÁSA\n================================================================================\n")
243
244 person = Person(person_id = x)
245 person.start_time = datetime.datetime.now()
246
247 print("{} vagyok, {} éves, a(z) {}. sorszámú NER-birka.\nRegisztrálok e-mailcímmel...".format(person.family_name + " " + person.first_name, person.age, person.id))
248
249
250 person.register()
251
252 print("Regisztráció megtörtént, várom az e-mailt")
253
254 person.check_email()
255
256 print("Megjött! Nyomás kitölteni: " + person.custom_url)
257
258 person.fill_form()
259
260 person.end_time = datetime.datetime.now()
261
262 person.time = person.end_time - person.start_time
263 person.seconds = format_td(person.time.seconds, digits=2)
264
265 # person.time = person.time.strftime("%S") + "," + person.time.strftime("%f")[:2]
266 total_time = datetime.datetime.now() - start_time
267
268 print("Konzultáció kitöltve, {} másodpercig tartott, összes eltelt idő: {}\n".format(person.seconds, total_time))
269
270 time.sleep(2)
271
272 driver.quit()
273
274
275
276
277
278