Skip to content

Commit 47917ad

Browse files
authored
Update PyTypeRacer.py
Large update
1 parent d02b8ce commit 47917ad

1 file changed

Lines changed: 93 additions & 12 deletions

File tree

PyTypeRacer.py

Lines changed: 93 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,65 @@
1+
from enum import auto
12
from selenium import webdriver
3+
from selenium.webdriver.chrome.options import Options
24
import time, re, os
35

6+
chrome_options = Options()
7+
chrome_options.add_argument('--headless')
8+
chrome_options.add_argument('--log-level=3')
9+
browser = webdriver.Chrome(service_log_path='NUL')
10+
browser.get('https://play.typeracer.com/')
11+
412
clear = lambda: os.system('cls')
5-
default_delay = 0.103
6-
clear()
7-
usr_delay = input('Enter a delay value (Press enter to use default: ' + str(default_delay) + '): ')
13+
default_delay = 0.07
14+
default_wpm = 95
815

16+
clear()
17+
usr_delay = input('Enter a delay value (Default | ' + str(default_delay) + ')\n')
918
if usr_delay != '':
1019
clear()
1120
print('Delay set to ' + str(usr_delay))
1221
delay = float(usr_delay)
1322
else:
1423
clear()
1524
print('No delay specified - using default delay of ' + str(default_delay))
16-
delay = default_delay
17-
18-
browser = webdriver.Chrome(service_log_path='NUL')
19-
browser.get('https://play.typeracer.com/')
25+
delay = default_delay
26+
time.sleep(1)
27+
clear()
28+
usr_wpm = input('Input the maximium wpm (Default | 95) (the bot will try to stay under this wpm)\n')
29+
if usr_wpm != '':
30+
clear()
31+
print('Max wpm set to ' + str(usr_wpm))
32+
max_wpm = float(usr_wpm)
33+
else:
34+
clear()
35+
print('No max wpm specified - using default max of ' + str(default_wpm))
36+
max_wpm = default_wpm
37+
time.sleep(1)
38+
clear()
39+
auto_play = input('Would you like to enable autoplay? y/n (Default | N) (The bot will start races on it\'s own if enabled)\n')
40+
if auto_play == 'y' or auto_play == 'Y':
41+
clear()
42+
print('Auto play enabled')
43+
start_auto = True
44+
else:
45+
clear()
46+
print('Auto play not enabled')
47+
start_auto = False
48+
time.sleep(1)
49+
clear()
50+
auto_login = input('Would you like PyTypeRacer to log in for you? y/n (Default | N)\n')
51+
if auto_login == 'y' or auto_login == 'Y':
52+
aLogin = True
53+
clear()
54+
username = input('Enter your username:\n')
55+
time.sleep(1)
56+
clear()
57+
password = input('Enter your password:\n')
58+
else:
59+
aLogin = False
60+
clear()
61+
print('PyTypeRacer will not log in for you')
62+
time.sleep(1)
2063

2164
# Detects when the countdown is over
2265
def start():
@@ -48,8 +91,13 @@ def main():
4891
clear()
4992
print('Words: \n' + word_complete + '\n')
5093
for char in word_complete:
51-
typeBar.send_keys(char)
52-
time.sleep(delay)
94+
wpm = re.sub(' wpm', '', browser.find_element_by_xpath('//*[@class="rankPanelWpm rankPanelWpm-self"]').text)
95+
if int(wpm) >= max_wpm:
96+
typeBar.send_keys(char)
97+
time.sleep(0.2)
98+
else:
99+
typeBar.send_keys(char)
100+
time.sleep(delay)
53101
loop()
54102
except:
55103
typeBar = browser.find_element_by_class_name('txtInput')
@@ -61,15 +109,22 @@ def main():
61109
clear()
62110
print('Words: \n' + word_complete + '\n')
63111
for char in word_complete:
112+
wpm = re.sub(' wpm', '', browser.find_element_by_xpath('//*[@class="rankPanelWpm rankPanelWpm-self"]').text)
113+
if int(wpm) >= max_wpm:
114+
typeBar.send_keys(char)
115+
time.sleep(0.2)
116+
else:
117+
typeBar.send_keys(char)
118+
time.sleep(delay)
64119
typeBar.send_keys(char)
65120
time.sleep(delay)
66121
loop()
67122

68123
# Re-run the script
69-
def loop():
124+
def loopMain():
70125
clear()
71-
input('Press enter to race again! \n(Make sure to close any pop-up windows first!)\n\n\n')
72126
print('Bot started, joining race!')
127+
time.sleep(1)
73128
try:
74129
browser.find_element_by_xpath('//*[@type="button"]').click()
75130
time.sleep(0.5)
@@ -107,10 +162,36 @@ def loop():
107162
time.sleep(3)
108163
start()
109164

165+
def loop():
166+
if start_auto == True:
167+
time.sleep(1)
168+
loopMain()
169+
else:
170+
time.sleep(1)
171+
clear()
172+
input('Press enter to start another race!')
173+
loopMain()
174+
175+
def login():
176+
browser.find_element_by_xpath('(//*[@href="javascript:;"])[1]').click()
177+
time.sleep(1)
178+
user_login = browser.find_element_by_xpath('//*[@name="username"]')
179+
user_login.send_keys(username)
180+
time.sleep(1)
181+
useer_pass = browser.find_element_by_xpath('//*[@name="password"]')
182+
useer_pass.send_keys(password)
183+
time.sleep(1)
184+
browser.find_element_by_xpath('(//*[@class="gwt-Button"])[1]').click()
185+
time.sleep(2)
186+
110187
# Initial start
111-
time.sleep(1.5)
112188
clear()
113189
input('Press enter to begin \n(Wait until you are done loading and are on the menu screen)\n\n\n')
190+
if aLogin == True:
191+
clear()
192+
print('PyTypeRacer is trying to log you in')
193+
login()
194+
clear()
114195
print('Bot started, joining race!')
115196
try:
116197
browser.find_element_by_link_text('Enter a typing race').click()

0 commit comments

Comments
 (0)