1+ from enum import auto
12from selenium import webdriver
3+ from selenium .webdriver .chrome .options import Options
24import 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+
412clear = 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 ' )
918if usr_delay != '' :
1019 clear ()
1120 print ('Delay set to ' + str (usr_delay ))
1221 delay = float (usr_delay )
1322else :
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
2265def 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 )
112188clear ()
113189input ('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 ()
114195print ('Bot started, joining race!' )
115196try :
116197 browser .find_element_by_link_text ('Enter a typing race' ).click ()
0 commit comments