Derpitron / Discord-OTP-Forcer

Selenium based discord OTP forcer
GNU Affero General Public License v3.0
43 stars 12 forks source link

[Bug]: AttributeError: 'NoneType' object has no attribute 'get' #122

Open iamadecentral opened 1 week ago

iamadecentral commented 1 week ago

Description

I get an error AttributeError: 'NoneType' object has no attribute 'get' possibly caused by webdriver_manager I followed the wiki installation

Minimal Reproduction

Run on windows with python 3.11 following the wiki

Error

[2024-06-22 03:16:11] [DEBUG] - __main__:load_configuration:33 - Loaded configuration file located at ******
File "D:\devving\Discord-OTP-Forcer\main.py", line 87, in <module>
    83
    84   if __name__ == '__main__':
    85          try:
    86                  logger.remove()
--> 87                  userFacing(load_configuration())
    88          except UserCausedHalt:
    ..................................................
     __name__ = '__main__'
     logger.remove = <method 'Logger.remove' of <loguru.logger handlers=[(id=1, l
                      evel=10, sink=<stderr>)]> _logger.py:1013>
    ..................................................

File "D:\devving\Discord-OTP-Forcer\main.py", line 81, in userFacing
    36   def userFacing(configuration: dict):
 (...)
    77          if configuration['codeMode'].lower() not in validCodeModes: raise ValueError('Invalid code-generation mode inputted!')
    78
    79          # Start the simulated browser, and run it in an infinite loop.
    80          while True:
--> 81                  driver = bootstrap_browser(configuration)
    82                  bootstrap_login_page(driver, configuration)
    ..................................................
     configuration = {'email': '[redarected]',
                      'password': '[redarected]'',
                      'programMode': 'reset',
                      'codeMode': 'normal',
                      'newPassword': '[redarected]'',
                      'resetToken': '[redarected]'',
                      'authToken': '',
                      'sensitiveDebug': 'True',
                      'logCreation': 'False'}
     validCodeModes = {'both', 'backup', 'normal', 'backup_let', }
    ..................................................

File "D:\devving\Discord-OTP-Forcer\src\backend.py", line 49, in bootstrap_browser
    28   def bootstrap_browser(
    29          configuration: dict,
    30   ) -> webdriver.chrome.webdriver.WebDriver:
 (...)
    45          #options.add_argument('--headless')
    46          #options.add_argument('--log-level=1')
    47
    48          # Get and initialize the most up-to-date Chromium web driver
--> 49          driver = webdriver.Chrome(service=ChromiumService(ChromeDriverManager(chrome_type=ChromeType.CHROMIUM).install()), options=options)
    50          logger.debug('Starting Chromium browser')
    ..................................................
     configuration = {'email': '[redarected]'',
                      'password': '[redarected]'',
                      'programMode': 'reset',
                      'codeMode': 'normal',
                      'newPassword': '[redarected]'',
                      'resetToken': '[redarected]'',
                      'authToken': '',
                      'sensitiveDebug': 'True',
                      'logCreation': 'False'}
     ChromeType.CHROMIUM = 'chromium'
     options = <selenium.webdriver.chrome.options.Options object at 0x00000
                24A3339AA90>
     logger.debug = <method 'Logger.debug' of <loguru.logger handlers=[(id=1, le
                     vel=10, sink=<stderr>)]> _logger.py:2038>
    ..................................................

File "C:\Users\uhackme123\AppData\Roaming\Python\Python311\site-packages\webdriver_manager\chrome.py", line 40, in install
    39   def install(self) -> str:
--> 40       driver_path = self._get_driver_binary_path(self.driver)
    41       os.chmod(driver_path, 0o755)
    ..................................................
     self = <webdriver_manager.chrome.ChromeDriverManager object at 0x00
             00024A36275C50>
     self._get_driver_binary_path = <method 'DriverManager._get_driver_binary_path' of <webdrive
                                     r_manager.chrome.ChromeDriverManager object at 0x0000024A362
                                     75C50> manager.py:34>
     self.driver = <webdriver_manager.drivers.chrome.ChromeDriver object at 0x0
                    000024A252AE050>
    ..................................................

File "C:\Users\uhackme123\AppData\Roaming\Python\Python311\site-packages\webdriver_manager\core\manager.py", line 35, in _get_driver_binary_path
    34   def _get_driver_binary_path(self, driver):
--> 35       binary_path = self._cache_manager.find_driver(driver)
    36       if binary_path:
    ..................................................
     self = <webdriver_manager.chrome.ChromeDriverManager object at 0x00
             00024A36275C50>
     driver = <webdriver_manager.drivers.chrome.ChromeDriver object at 0x0
               000024A252AE050>
     self._cache_manager.find_driver = <method 'DriverCacheManager.find_driver' of <webdriver_manag
                                        er.core.driver_cache.DriverCacheManager object at 0x0000024A
                                        35D05250> driver_cache.py:96>
    ..................................................

File "C:\Users\uhackme123\AppData\Roaming\Python\Python311\site-packages\webdriver_manager\core\driver_cache.py", line 105, in find_driver
    96   def find_driver(self, driver: Driver):
 (...)
    101      browser_version = self._os_system_manager.get_browser_version_from_os(browser_type)
    102      if not browser_version:
    103          return None
    104
--> 105      driver_version = self.get_cache_key_driver_version(driver)
    106      metadata = self.load_metadata_content()
    ..................................................
     self = <webdriver_manager.core.driver_cache.DriverCacheManager obje
             ct at 0x0000024A35D05250>
     driver = <webdriver_manager.drivers.chrome.ChromeDriver object at 0x0
               000024A252AE050>
     browser_version = '122.0.6213'
     self._os_system_manager.get_browser_version_from_os = <method 'OperationSystemManager.get_browser_version_from_os'
                                                             of <webdriver_manager.core.os_manager.OperationSystemManage
                                                            r object at 0x0000024A334AA690> os_manager.py:67>
     browser_type = 'chromium'
     self.get_cache_key_driver_version = <method 'DriverCacheManager.get_cache_key_driver_version' of
                                           <webdriver_manager.core.driver_cache.DriverCacheManager obj
                                          ect at 0x0000024A35D05250> driver_cache.py:149>
     self.load_metadata_content = <method 'DriverCacheManager.load_metadata_content' of <webdr
                                   iver_manager.core.driver_cache.DriverCacheManager object at
                                   0x0000024A35D05250> driver_cache.py:132>
    ..................................................

File "C:\Users\uhackme123\AppData\Roaming\Python\Python311\site-packages\webdriver_manager\core\driver_cache.py", line 152, in get_cache_key_driver_version
    149  def get_cache_key_driver_version(self, driver: Driver):
    150      if self._cache_key_driver_version:
    151          return self._cache_key_driver_version
--> 152      return driver.get_driver_version_to_download()
    ..................................................
     self = <webdriver_manager.core.driver_cache.DriverCacheManager obje
             ct at 0x0000024A35D05250>
     driver = <webdriver_manager.drivers.chrome.ChromeDriver object at 0x0
               000024A252AE050>
     self._cache_key_driver_version = None
     driver.get_driver_version_to_download = <method 'Driver.get_driver_version_to_download' of <webdrive
                                              r_manager.drivers.chrome.ChromeDriver object at 0x0000024A25
                                              2AE050> driver.py:39>
    ..................................................

File "C:\Users\uhackme123\AppData\Roaming\Python\Python311\site-packages\webdriver_manager\core\driver.py", line 48, in get_driver_version_to_download
    39   def get_driver_version_to_download(self):
 (...)
    44       """
    45       if self._driver_version_to_download:
    46           return self._driver_version_to_download
    47
--> 48       return self.get_latest_release_version()
    ..................................................
     self = <webdriver_manager.drivers.chrome.ChromeDriver object at 0x0
             000024A252AE050>
     self._driver_version_to_download = None
     self.get_latest_release_version = <method 'ChromeDriver.get_latest_release_version' of <webdri
                                        ver_manager.drivers.chrome.ChromeDriver object at 0x0000024A
                                        252AE050> chrome.py:54>
    ..................................................

File "C:\Users\uhackme123\AppData\Roaming\Python\Python311\site-packages\webdriver_manager\drivers\chrome.py", line 61, in get_latest_release_version
    54   def get_latest_release_version(self):
 (...)
    57       if determined_browser_version is not None and version.parse(determined_browser_version) >= version.parse("115"):
    58           url = "https://googlechromelabs.github.io/chrome-for-testing/latest-patch-versions-per-build.json"
    59           response = self._http_client.get(url)
    60           response_dict = json.loads(response.text)
--> 61           determined_browser_version = response_dict.get("builds").get(determined_browser_version).get("version")
    62           return determined_browser_version
    ..................................................
     self = <webdriver_manager.drivers.chrome.ChromeDriver object at 0x0
             000024A252AE050>
     determined_browser_version = '122.0.6213'
     version.parse = <function 'parse' version.py:47>
     url = 'https://googlechromelabs.github.io/chrome-for-testing/lates
            t-patch-versions-per-build.json'
     response = <Response [200]>
     self._http_client.get = <method 'WDMHttpClient.get' of <webdriver_manager.core.http.
                              WDMHttpClient object at 0x0000024A24FA1C50> http.py:30>
     response_dict = {'timestamp': '2024-06-21T20:09:39.691Z',
                      'builds': {'113.0.5672': {...},
                                 '114.0.5696': {...},
                                 '114.0.5708': {...},
                                 '114.0.5709': {...},
                                 '114.0.5710': {...},
                                 '114.0.5711': {...},
                                 '114.0.5713': {...},
                                 '114.0.5715': {...},
                                 '114.0.5718': {...},
                                 '114.0.5720': {...},
                                 '114.0.5722': {...},
                                 '114.0.5724': {...},
                                 '114.0.5728': {...},
                                 '114.0.5732': {.....
     json.loads = <function 'loads' __init__.py:299>
     response.text = '{"timestamp":"2024-06-21T20:09:39.691Z","builds":{"113.0.56
                      72":{"version":"113.0.5672.63","revision":"1121455"},"114.0.
                      5696":{"version":"114.0.5696.0","revision":"1126269"},"114.0
                      .5708":{"version":"114.0.5708.0","revision":"1128351"},"114.
                      0.5709":{"version":"114.0.5709.0","revision":"1128544"},"114
                      .0.5710":{"version":"114.0.5710.0","revision":"1128838"},"11
                      4.0.5711":{"version":"114.0.5711.3","revision":"1129160"},"1
                      14.0.5713":{"version":"114.0.5713.0","revision":"1129764"},"
                      114.0.5715":{"versio...
    ..................................................

---- (full traceback above) ----
File "D:\devving\Discord-OTP-Forcer\main.py", line 87, in <module>
    userFacing(load_configuration())
File "D:\devving\Discord-OTP-Forcer\main.py", line 81, in userFacing
    driver = bootstrap_browser(configuration)
File "D:\devving\Discord-OTP-Forcer\src\backend.py", line 49, in bootstrap_browser
    driver = webdriver.Chrome(service=ChromiumService(ChromeDriverManager(chrome_type=ChromeType.CHROMIUM).install()), options=options)
File "C:\Users\uhackme123\AppData\Roaming\Python\Python311\site-packages\webdriver_manager\chrome.py", line 40, in install
    driver_path = self._get_driver_binary_path(self.driver)
File "C:\Users\uhackme123\AppData\Roaming\Python\Python311\site-packages\webdriver_manager\core\manager.py", line 35, in _get_driver_binary_path
    binary_path = self._cache_manager.find_driver(driver)
File "C:\Users\uhackme123\AppData\Roaming\Python\Python311\site-packages\webdriver_manager\core\driver_cache.py", line 105, in find_driver
    driver_version = self.get_cache_key_driver_version(driver)
File "C:\Users\uhackme123\AppData\Roaming\Python\Python311\site-packages\webdriver_manager\core\driver_cache.py", line 152, in get_cache_key_driver_version
    return driver.get_driver_version_to_download()
File "C:\Users\uhackme123\AppData\Roaming\Python\Python311\site-packages\webdriver_manager\core\driver.py", line 48, in get_driver_version_to_download
    return self.get_latest_release_version()
File "C:\Users\uhackme123\AppData\Roaming\Python\Python311\site-packages\webdriver_manager\drivers\chrome.py", line 61, in get_latest_release_version
    determined_browser_version = response_dict.get("builds").get(determined_browser_version).get("version")

AttributeError: 'NoneType' object has no attribute 'get'

Operating System Version

windows 10 LTSC

Python Version

Python 3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)] on win32

Program Version

master branch

Any other information or context?

No response

Derpitron commented 1 week ago

This is a regression caused by change 148429b484c6883caa658c67e28587558bd1f7cf

I may need to add a feature that allows a browser choice, since Chromium seems to not work on Windows. In the meantime, please download the .ZIP file using this link: https://github.com/Derpitron/Discord-OTP-Forcer/tree/google-chrome-compat, then get back to me.

This program version requires having Google Chrome installed.

iamadecentral commented 1 week ago

Ok that branch seems to work no issue so far. 👍