Skip to content

Commit d506fe5

Browse files
committed
update scripts
1 parent b1decbe commit d506fe5

File tree

4 files changed

+92
-33
lines changed

4 files changed

+92
-33
lines changed

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,4 +162,6 @@ cython_debug/
162162
#.idea/
163163
settings.env
164164
periodlist.json
165-
reservationlist.json
165+
reservationlist.json
166+
chrome_profiles/
167+
ffmpeg/

modules/resybotv1.py

Lines changed: 75 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,24 @@
1111
import re
1212
import sys
1313
import argparse
14+
from playwright_recaptcha import recaptchav2
15+
# sys.path.append(r"D:\dev\python\resy-project\ffmpeg\bin")
1416

1517
current = os.path.dirname(os.path.realpath(__file__))
1618
parent = os.path.dirname(current)
1719
sys.path.append(parent)
1820
from settings import CLOSE_MESSAGE
19-
2021
load_dotenv('settings.env')
2122
email = os.getenv('RESY_EMAIL')
2223
password = os.getenv('RESY_PASSWORD')
2324
# PW_TEST_SCREENSHOT_NO_FONTS_READY = 1
2425
headless = True if os.getenv('HEADLESS') == 'yes' else False
2526
# headless = True if HEADLESS == 'yes' else False
27+
ccnumber = os.getenv('CCNUMBER')
28+
cccvv = os.getenv('CCCVV')
29+
ccexpiry = os.getenv('CCEXPIRY')
30+
cczipcode = os.getenv('CCZIPCODE')
31+
cccountry = os.getenv('CCCOUNTRY')
2632
logging.basicConfig(filename='bot.log', filemode='w', level=logging.INFO, format='%(asctime)s - %(levelname)s - %(filename)s - %(lineno)d - %(message)s')
2733

2834
def login_to_resy(page, email, password):
@@ -59,20 +65,42 @@ def reserve_restaurant(page, selected_reservation):
5965
selected_reservation.click()
6066
frame_element = page.wait_for_selector('iframe[title="Resy - Book Now"]', timeout=10000)
6167
frame = frame_element.content_frame()
62-
frame.wait_for_selector('[data-test-id="order_summary_page-button-book"]', timeout=30000)
6368
# time.sleep(2)
6469
for i in range(5):
6570
page.mouse.wheel(0, 15000)
6671
time.sleep(1)
6772
# page.evaluate("() => window.scrollTo(0, document.body.scrollHeight)")
73+
frame.wait_for_selector('[data-test-id="order_summary_page-button-book"]', timeout=30000)
6874
frame.query_selector('[data-test-id="order_summary_page-button-book"]').click()
6975
time.sleep(5)
7076
if frame.query_selector('.StripeForm__header'):
71-
message = frame.query_selector('.StripeForm__header').inner_text().split('\n')[0]
72-
logging.info(message)
73-
input(" ".join([message, CLOSE_MESSAGE]))
74-
sys.exit()
75-
77+
frame_element = frame.wait_for_selector('iframe[title="Secure payment input frame"]', timeout=10000)
78+
frame = frame_element.content_frame()
79+
frame.fill('input[id="Field-numberInput"]', ccnumber)
80+
frame.fill('input[id="Field-expiryInput"]', ccexpiry)
81+
frame.fill('input[id="Field-cvcInput"]', cccvv)
82+
frame.select_option('select#Field-countryInput', value=cccountry)
83+
frame.fill('input[id="Field-postalCodeInput"]', cczipcode)
84+
# frame_element = frame.wait_for_selector('iframe[title="reCAPTCHA"]', timeout=10000)
85+
# breakpoint()
86+
with recaptchav2.SyncSolver(page) as solver:
87+
token = solver.solve_recaptcha(wait=True)
88+
# print(token)
89+
# breakpoint()
90+
time.sleep(2)
91+
for i in range(5):
92+
page.mouse.wheel(0, 15000)
93+
time.sleep(1)
94+
frame_element = page.wait_for_selector('iframe[title="Resy - Book Now"]', timeout=10000)
95+
frame = frame_element.content_frame()
96+
frame.wait_for_selector('[data-test-id="StripeAddCardForm-submit-button"]', timeout=5000)
97+
frame.query_selector('[data-test-id="StripeAddCardForm-submit-button"]').click()
98+
99+
# message = frame.query_selector('.StripeForm__header').inner_text().split('\n')[0]
100+
# logging.info(message)
101+
# input(" ".join([message, CLOSE_MESSAGE]))
102+
# sys.exit()
103+
frame.wait_for_selector('.ConfirmationPage__header', timeout=120000)
76104
confirmation_message = frame.query_selector('.ConfirmationPage__header').inner_text()
77105
message1 = f"Reservation confirmation message: {confirmation_message}"
78106
message2 = "Reservation confirmed."
@@ -119,7 +147,7 @@ def main():
119147
# 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0'
120148
# More user agents can be added here
121149
]
122-
150+
chrome_user_data = r"D:\dev\python\resy-project\chrome_profiles"
123151
while True:
124152
try:
125153
user_agent = random.choice(user_agents)
@@ -133,28 +161,43 @@ def main():
133161
wargs.append('--disable-popup-blocking')
134162
wargs.append('--disable-web-security')
135163
wargs.append('--start-maximized')
164+
# wargs.append("user-data-dir={}".format(chrome_user_data))
165+
# wargs.append("profile-directory={}".format("default"))
136166

137167

138-
browser = pr.chromium.launch(headless=headless, args=wargs)
168+
# browser = pr.chromium.launch(headless=headless, args=wargs)
169+
# breakpoint()
170+
browser = pr.chromium.launch_persistent_context(user_data_dir=chrome_user_data,
171+
headless=headless,
172+
args=wargs,
173+
user_agent=user_agent,
174+
permissions=['geolocation', 'notifications'],
175+
java_script_enabled=True,
176+
no_viewport=True
177+
)
178+
139179
proxy_server = "http://kpeqkzlp:[email protected]:5868"
180+
181+
# context = browser.new_context(
182+
# user_agent=user_agent,
183+
# # viewport={'width': random.randint(1200, 1920), 'height': random.randint(900, 1080)},
184+
# # viewport={'width': 1920, 'height': 1080},
185+
# permissions=['geolocation', 'notifications'],
186+
# java_script_enabled=True,
187+
# no_viewport=True,
188+
# # bypass_csp=True,
189+
# # locale='US_en',
190+
# # geolocation=False,
191+
# #proxy = {
192+
# #'server': proxy_server
193+
# #}
194+
# )
140195

141-
context = browser.new_context(
142-
user_agent=user_agent,
143-
# viewport={'width': random.randint(1200, 1920), 'height': random.randint(900, 1080)},
144-
# viewport={'width': 1920, 'height': 1080},
145-
permissions=['geolocation', 'notifications'],
146-
java_script_enabled=True,
147-
no_viewport=True,
148-
# bypass_csp=True,
149-
# locale='US_en',
150-
# geolocation=False,
151-
#proxy = {
152-
#'server': proxy_server
153-
#}
154-
)
155-
page = context.new_page()
196+
# breakpoint()
197+
# page = context.new_page()
198+
page = browser.pages[0]
156199
stealth_sync(page)
157-
200+
158201
page.on("console", lambda msg: logging.debug(f"PAGE LOG: {msg.text}"))
159202
page.on("pageerror", lambda msg: logging.error(f"PAGE ERROR: {msg}"))
160203
page.on("response", lambda response: logging.debug(f"RESPONSE: {response.url} {response.status}"))
@@ -165,10 +208,13 @@ def main():
165208

166209
page.goto("https://resy.com", wait_until='domcontentloaded', timeout=20000)
167210
random_delay(2, 5)
168-
login_to_resy(page, email, password)
169-
message = "Logged in successfully."
170-
logging.info(message)
171-
print(message)
211+
# breakpoint()
212+
if page.query_selector('button.Button--login'):
213+
login_to_resy(page, email, password)
214+
message = "Logged in successfully."
215+
logging.info(message)
216+
print(message)
217+
172218
random_delay(2, 5)
173219
# breakpoint()
174220
page.goto(restaurant_link, wait_until='domcontentloaded')

recap.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
from playwright.sync_api import sync_playwright
2+
from playwright_recaptcha import recaptchav2
3+
4+
with sync_playwright() as playwright:
5+
browser = playwright.firefox.launch()
6+
page = browser.new_page()
7+
page.goto("https://www.google.com/recaptcha/api2/demo")
8+
9+
with recaptchav2.SyncSolver(page) as solver:
10+
token = solver.solve_recaptcha(wait=True)
11+
print(token)

settings.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import os
33
import json
44
PYTHON_EXE = os.getcwd() + os.sep + r"venv\Scripts\python.exe"
5-
RESY_EMAIL='[email protected]'
6-
RESY_PASSWORD='Upworktest1!'
7-
HEADLESS='no'
5+
# RESY_EMAIL='[email protected]'
6+
# RESY_PASSWORD='Upworktest1!'
7+
# HEADLESS='no'
88
CLOSE_MESSAGE=" --> Press any key to close..."

0 commit comments

Comments
 (0)