@@ -28,6 +28,7 @@ class GLOBALS:
2828
2929# ----------------- OPTIONAL ----------------- #
3030try :
31+ from webdriver_manager .chrome import ChromeDriverManager
3132 from undetected_chromedriver import Chrome
3233 from selenium .webdriver .chrome .options import Options
3334 from selenium .webdriver .remote .webelement import WebElement
@@ -168,7 +169,7 @@ async def initialize(self) -> None:
168169 proxy = f"{ proxy [0 ]} ://{ proxy [1 ]} "
169170 opts .add_argument (f"--proxy-server={ proxy } " )
170171
171- driver = Chrome (options = opts )
172+ driver = Chrome (options = opts , driver_executable_path = ChromeDriverManager (). install () )
172173 driver .maximize_window ()
173174 self .driver = driver
174175
@@ -306,31 +307,31 @@ async def fetch_invite_link(self, url: str):
306307 trace (f"Fetching invite link from { url } " , TraceLEVELS .DEBUG )
307308 driver = self .driver
308309 main_window_handle = driver .current_window_handle
309- # Open a new tab with javascript to bypass detection
310- driver .execute_script (f"window.open('{ url } ', '_blank');" ) # Open a new tab
311- await asyncio .sleep (3 )
312- new_handle = driver .window_handles [- 1 ]
310+
311+ driver .execute_script (f"window.open('{ url } ', '_blank');" ) # Try to bypass from start
312+ await asyncio .sleep (5 )
313+ invite_handle = driver .window_handles [- 1 ]
314+ driver .switch_to .window (invite_handle )
313315 try :
314316 for i in range (WD_FETCH_INVITE_CLOUDFLARE_TRIES ):
315317 with suppress (NoSuchElementException ):
316- driver .switch_to .window (new_handle )
317318 trace ("Finding 'challenge-running' cloudflare ID" , TraceLEVELS .DEBUG )
318- driver .find_element (By .ID , "challenge-running" )
319- driver .switch_to .window (main_window_handle )
320- await asyncio .sleep (WD_FETCH_INVITE_CLOUDFLARE_DELAY * (i + 1 ))
321- continue
322-
323- await asyncio .sleep (2 )
324- driver .switch_to .window (new_handle )
325- trace ("No 'challenge-running' found. Checks suceeded" , TraceLEVELS .DEBUG )
319+ if "top.gg" in driver .current_url :
320+ driver .find_element (By .ID , "challenge-running" )
321+ # Open a new tab with javascript to bypass detection
322+ trace ("Found 'challenge-running' tag" , TraceLEVELS .DEBUG )
323+ driver .execute_script ("window.open('https://top.gg', '_blank');" )
324+ await asyncio .sleep (WD_FETCH_INVITE_CLOUDFLARE_DELAY * (i + 1 ))
325+ driver .switch_to .window (driver .window_handles [- 1 ])
326+ driver .close ()
327+ driver .switch_to .window (invite_handle )
328+ await self .async_execute (driver .refresh )
329+
330+ trace ("Great! 'challenge-running' not found" , TraceLEVELS .DEBUG )
326331 break
327332 else :
328- driver .switch_to .window (new_handle )
329- driver .close ()
330- driver .switch_to .window (main_window_handle )
331- raise RuntimeError ("Could not complete cloudflare checks" )
333+ raise RuntimeError ("Could not bypass 'challenge-running'" )
332334
333- # await self.async_execute(driver.get, url)
334335 await self .async_execute (
335336 WebDriverWait (driver , WD_TIMEOUT_LONG ).until ,
336337 url_contains ("discord.com" )
@@ -646,6 +647,7 @@ async def join_guild(self, invite: str) -> None:
646647 "//span[contains(text() , 'Unable to accept')]"
647648 )
648649 # Element found -> join error
650+ ActionChains (driver ).send_keys (Keys .ESCAPE ).perform ()
649651 raise RuntimeError (f"The user appears to be banned from the guild w/ invite { invite } " )
650652
651653 await self .random_sleep (2 , 3 )
0 commit comments