Skip to content

Commit 1e253f5

Browse files
committed
update scripts
1 parent 779f4c0 commit 1e253f5

File tree

3 files changed

+112
-105
lines changed

3 files changed

+112
-105
lines changed

main.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -426,13 +426,14 @@ def __init__(self, window) -> None:
426426
self.rowconfigure(7, weight=1)
427427
self.rowconfigure(8, weight=1)
428428
titleLabel = TitleLabel(self, text="List Bot's Command")
429-
proclabel = Label(self, text="Execute Mode: ")
430429

431430
dlist = StringVar(value=commandlist)
432431
self.valueslist = Listbox(self, width=120, height=10, listvariable=dlist)
433432
self.valueslist.bind( "<Double-Button-1>" , self.removeValue)
434433
chprofilelabel = Label(self, text="Chromium Profile: ")
435434
headlesslabel = Label(self, text="Headless Mode: ")
435+
proclabel = Label(self, text="Execute Mode: ")
436+
nstoplabel = Label(self, text="Nonstop Checking: ")
436437
closeButton = CloseButton(self)
437438
chprofileentry = ttk.Combobox(self, textvariable=StringVar(), state="readonly", width=30)
438439
chprofileentry['values'] = [profile for profile in PROFILE_LIST]
@@ -443,8 +444,11 @@ def __init__(self, window) -> None:
443444
procentry = ttk.Combobox(self, textvariable=StringVar(), state="readonly", width=10)
444445
procentry['values'] = ['Single','Multiple']
445446
procentry.current(0)
447+
nstopentry = ttk.Combobox(self, textvariable=StringVar(), state="readonly", width=5)
448+
nstopentry['values'] = ['No','Yes']
449+
nstopentry.current(0)
446450

447-
runButton = ttk.Button(self, text='Run Process', command = lambda:self.run_process(profile=chprofileentry, headless=headlessentry, exemode=procentry))
451+
runButton = ttk.Button(self, text='Run Process', command = lambda:self.run_process(profile=chprofileentry, headless=headlessentry, exemode=procentry, nstop=nstopentry))
448452

449453
# layout
450454
titleLabel.grid(column = 0, row = 0, sticky = (W, E, N, S))
@@ -455,8 +459,10 @@ def __init__(self, window) -> None:
455459
headlessentry.grid(column = 0, row = 3, sticky=(E))
456460
proclabel.grid(column = 0, row = 4, sticky=(W))
457461
procentry.grid(column = 0, row = 4, sticky=(E))
462+
nstoplabel.grid(column = 0, row = 5, sticky=(W))
463+
nstopentry.grid(column = 0, row = 5, sticky=(E))
458464

459-
runButton.grid(column = 0, row = 5, sticky = (E))
465+
runButton.grid(column = 0, row = 6, sticky = (E))
460466
closeButton.grid(column = 0, row = 7, sticky = (E))
461467

462468
def removeValue(self, event):
@@ -483,7 +489,7 @@ def run_process(self, **kwargs):
483489
run_module(comlist=[PYLOC, "modules/resybotv3.py", "-cp", profile, "-em", email, "-pw", password, "-hl", '{}'.format(kwargs['headless'].get())])
484490
else:
485491
for command in self.commandlist:
486-
run_module(comlist=[PYLOC, "modules/resybotv3b.py", "-u", '{}'.format(command['baseurl']), "-d", '{}'.format(command['date']), "-t", '{}'.format(command['time']), "-s", '{}'.format(command['seats']), "-p", '{}'.format(command['period']), "-r", '{}'.format(command['reservation_type']), "-cp", profile, "-em", email, "-pw", password, "-hl", '{}'.format(kwargs['headless'].get())])
492+
run_module(comlist=[PYLOC, "modules/resybotv3b.py", "-u", '{}'.format(command['baseurl']), "-d", '{}'.format(command['date']), "-t", '{}'.format(command['time']), "-s", '{}'.format(command['seats']), "-p", '{}'.format(command['period']), "-r", '{}'.format(command['reservation_type']), "-cp", profile, "-em", email, "-pw", password, "-hl", '{}'.format(kwargs['headless'].get()), "-ns", '{}'.format(kwargs['nstop'].get())])
487493

488494
class ResyBotv1Frame(ttk.Frame):
489495
def __init__(self, window) -> None:

modules/chromium_setup.py

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -70,36 +70,36 @@ def main():
7070
wargs.append('--start-maximized')
7171
# wargs.append('--disable-infobars')
7272
# wargs.append('--disable-blink-features=AutomationControlled')
73-
breakpoint()
74-
browser = pr.chromium.launch(args=wargs)
75-
# browser = pr.chromium.launch_persistent_context(user_data_dir=chrome_user_data,
76-
# headless=False,
77-
# args=wargs,
78-
# user_agent=user_agent,
79-
# permissions=['geolocation', 'notifications'],
80-
# java_script_enabled=True,
81-
# no_viewport=True
82-
# )
83-
context = browser.new_context(
84-
user_agent=user_agent,
85-
# viewport={'width': random.randint(1200, 1920), 'height': random.randint(900, 1080)},
86-
# viewport={'width': 1920, 'height': 1080},
87-
permissions=['geolocation', 'notifications'],
88-
java_script_enabled=True,
89-
no_viewport=True,
90-
# bypass_csp=True,
91-
# locale='US_en',
92-
# geolocation=False,
93-
#proxy = {
94-
#'server': proxy_server
95-
#}
96-
)
97-
page = context.new_page()
98-
# page = context.pages[0]
73+
# breakpoint()
74+
# browser = pr.chromium.launch(args=wargs)
75+
browser = pr.chromium.launch_persistent_context(user_data_dir=chrome_user_data,
76+
headless=False,
77+
args=wargs,
78+
user_agent=user_agent,
79+
permissions=['geolocation', 'notifications'],
80+
java_script_enabled=True,
81+
no_viewport=True
82+
)
83+
# context = browser.new_context(
84+
# user_agent=user_agent,
85+
# # viewport={'width': random.randint(1200, 1920), 'height': random.randint(900, 1080)},
86+
# # viewport={'width': 1920, 'height': 1080},
87+
# permissions=['geolocation', 'notifications'],
88+
# java_script_enabled=True,
89+
# no_viewport=True,
90+
# # bypass_csp=True,
91+
# # locale='US_en',
92+
# # geolocation=False,
93+
# #proxy = {
94+
# #'server': proxy_server
95+
# #}
96+
# )
97+
# page = context.new_page()
98+
page = browser.pages[0]
9999
stealth_sync(page)
100100
page.goto("https://resy.com", wait_until='domcontentloaded', timeout=20000)
101101
random_delay(2, 5)
102-
breakpoint()
102+
# breakpoint()
103103
if page.query_selector('button.Button--login'):
104104
login_to_resy(page, args.email, args.password)
105105
message = "Logged in successfully."

modules/resybotv3b.py

Lines changed: 75 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -78,9 +78,9 @@ def reserve_restaurant(page, selected_reservation):
7878
return 2
7979

8080
def print_list_bookings(listbookings):
81-
print("List of Bookings:")
81+
# print("List of Bookings:")
8282
for idx, lb in enumerate(listbookings):
83-
print(f"{idx+1}.", "Restaurant Name:", str(lb['baseurl']).split("/")[-1], "| Period:", lb['period'], "| Date:", lb['date'], "| Time:", lb['time'], "| Seats:", lb['seats'] )
83+
print("***", "Restaurant Name:", str(lb['baseurl']).split("/")[-1], "| Period:", lb['period'], "| Date:", lb['date'], "| Time:", lb['time'], "| Seats:", lb['seats'], "***")
8484

8585
def main():
8686
parser = argparse.ArgumentParser(description="Resy Bot v3b")
@@ -94,10 +94,11 @@ def main():
9494
parser.add_argument('-em', '--email', type=str,help="Resy Email")
9595
parser.add_argument('-pw', '--password', type=str,help="Resy Password")
9696
parser.add_argument('-hl', '--headless', type=str,help="Headless Mode")
97+
parser.add_argument('-ns', '--nonstop', type=str,help="Nonstop Checking Mode")
9798
args = parser.parse_args()
9899

99-
if not args.url or not args.date or not args.time or not args.seats or not args.period or not args.reservation or not args.chprofile or not args.email or not args.password or not args.headless:
100-
input(" ".join(['Please add complete parameters, ex: python resybotv3 -u [url] -d [dd-mm-yyyy] -t [h:m am/pm] -s [seats_count] -p [period] -r [reservation_type] -cp [chrome_profile] -em [email] -pw [password] -hl [headless]', CLOSE_MESSAGE]))
100+
if not args.url or not args.date or not args.time or not args.seats or not args.period or not args.reservation or not args.chprofile or not args.email or not args.password or not args.headless or not args.nonstop:
101+
input(" ".join(['Please add complete parameters, ex: python resybotv3 -u [url] -d [dd-mm-yyyy] -t [h:m am/pm] -s [seats_count] -p [period] -r [reservation_type] -cp [chrome_profile] -em [email] -pw [password] -hl [headless] -ns [nonstop]', CLOSE_MESSAGE]))
101102
sys.exit()
102103

103104
date_wanted = args.date
@@ -111,6 +112,10 @@ def main():
111112
password = args.password
112113
headless = args.headless
113114
headless = True if headless == 'Yes' else False
115+
nonstop = args.nonstop
116+
nonstop = True if nonstop == 'Yes' else False
117+
commandlist = [{"baseurl": args.url, "date": date_wanted, "period":period_wanted, "time": time_wanted, "seats": seats, "reservation_type": reservation_type, "status": False}]
118+
print_list_bookings(commandlist)
114119

115120
user_agents = [
116121
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
@@ -120,66 +125,67 @@ def main():
120125
# More user agents can be added here
121126
]
122127
chrome_user_data = f"{CHROME_USER_DATA}\\{chprofile}"
123-
try:
124-
user_agent = random.choice(user_agents)
125-
with sync_playwright() as pr:
126-
wargs = []
127-
# wargs.append('--enable-logging=stderr')
128-
# list chromium arguments: https://peter.sh/experiments/chromium-command-line-switches/
129-
wargs.append('--v=1')
130-
wargs.append('--no-sandbox')
131-
wargs.append('--enable-features=NetworkService,NetworkServiceInProcess')
132-
wargs.append('--enable-automation')
133-
wargs.append('--disable-popup-blocking')
134-
wargs.append('--disable-web-security')
135-
wargs.append('--start-maximized')
136-
137-
wargs.append('--disable-fetching-hints-at-navigation-start')
138-
wargs.append('--force-first-run')
139-
wargs.append('--content-shell-hide-toolbar')
140-
wargs.append('--suppress-message-center-popups')
141-
wargs.append('--no-first-run')
142-
wargs.append('--force-show-update-menu-badge')
143-
144-
145-
browser = pr.chromium.launch(headless=headless, args=wargs)
146-
# breakpoint()
147-
proxy_server = "http://kpeqkzlp:[email protected]:5868"
148-
context = browser.new_context(
149-
user_agent=user_agent,
150-
no_viewport=True,
151-
permissions=['geolocation', 'notifications'],
152-
java_script_enabled=True,
153-
#proxy = {
154-
#'server': proxy_server
155-
#}
156-
)
157-
158-
# def slow_down_route(route, request):
159-
# # Slow down network request by 2000 milliseconds.
160-
# route.continue_()
161-
# browser.route('**', slow_down_route)
162-
163-
page = context.new_page()
164-
stealth_sync(page)
165-
166-
page.on("console", lambda msg: logging.debug(f"PAGE LOG: {msg.text}"))
167-
page.on("pageerror", lambda msg: logging.error(f"PAGE ERROR: {msg}"))
168-
page.on("response", lambda response: logging.debug(f"RESPONSE: {response.url} {response.status}"))
169-
page.on("requestfailed", lambda request: logging.error(f"REQUEST FAILED: {request.url} {request.failure}"))
170-
171-
login = False
172-
print("")
173-
message = f"Bot is running... [{chprofile}]"
174-
logging.info(message)
175-
print(message)
176-
maxtrial = 5
177-
trial = 0
178-
status = False
179-
while not status:
128+
user_agent = random.choice(user_agents)
129+
with sync_playwright() as pr:
130+
wargs = []
131+
# wargs.append('--enable-logging=stderr')
132+
# list chromium arguments: https://peter.sh/experiments/chromium-command-line-switches/
133+
wargs.append('--v=1')
134+
wargs.append('--no-sandbox')
135+
wargs.append('--enable-features=NetworkService,NetworkServiceInProcess')
136+
wargs.append('--enable-automation')
137+
wargs.append('--disable-popup-blocking')
138+
wargs.append('--disable-web-security')
139+
wargs.append('--start-maximized')
140+
141+
wargs.append('--disable-fetching-hints-at-navigation-start')
142+
wargs.append('--force-first-run')
143+
wargs.append('--content-shell-hide-toolbar')
144+
wargs.append('--suppress-message-center-popups')
145+
wargs.append('--no-first-run')
146+
wargs.append('--force-show-update-menu-badge')
147+
148+
149+
browser = pr.chromium.launch(headless=headless, args=wargs)
150+
# breakpoint()
151+
proxy_server = "http://kpeqkzlp:[email protected]:5868"
152+
context = browser.new_context(
153+
user_agent=user_agent,
154+
no_viewport=True,
155+
permissions=['geolocation', 'notifications'],
156+
java_script_enabled=True,
157+
#proxy = {
158+
#'server': proxy_server
159+
#}
160+
)
161+
162+
# def slow_down_route(route, request):
163+
# # Slow down network request by 2000 milliseconds.
164+
# route.continue_()
165+
# browser.route('**', slow_down_route)
166+
167+
page = context.new_page()
168+
stealth_sync(page)
169+
170+
page.on("console", lambda msg: logging.debug(f"PAGE LOG: {msg.text}"))
171+
page.on("pageerror", lambda msg: logging.error(f"PAGE ERROR: {msg}"))
172+
page.on("response", lambda response: logging.debug(f"RESPONSE: {response.url} {response.status}"))
173+
page.on("requestfailed", lambda request: logging.error(f"REQUEST FAILED: {request.url} {request.failure}"))
174+
175+
login = False
176+
print("")
177+
message = f"Bot is running... [{chprofile}]"
178+
logging.info(message)
179+
print(message)
180+
maxtrial = 3
181+
trial = 0
182+
status = False
183+
while not status:
184+
try:
180185
random_delay(3, 6)
181-
if trial >= maxtrial:
182-
break
186+
if not nonstop:
187+
if trial >= maxtrial:
188+
break
183189
trial += 1
184190
print(f"Trying going to {restaurant_link}...", end=" ", flush=True)
185191
page.goto(restaurant_link, wait_until='domcontentloaded')
@@ -234,18 +240,13 @@ def main():
234240
logging.info(message)
235241
print(" ".join([message, CONTINUE_MESSAGE]))
236242
continue
237-
# sys.exit()
238-
239243

240-
# break
241-
except Exception as e:
242-
# Show all error details in log file
243-
message = "An error occurred"
244-
print(message, e)
245-
logging.exception(message)
246-
# sys.exit()
247-
# continue
248-
# return e
244+
except Exception as e:
245+
message = "An error occurred"
246+
print(message, e)
247+
logging.exception(message)
248+
continue
249+
249250

250251

251252
if __name__ == '__main__':

0 commit comments

Comments
 (0)