One of the primary requisites to automate interactions with a WebElement in the DOM is that it should be visible and intractable. Like me, you would also come across several scenarios where your Selenium Python scripts threw an ElementNotVisibleException.
The failure in the test automation script can be attributed to the presence of dynamic WebElements on the web page. The WebElement under test might not have been loaded on the web page, and your test is trying to perform some activity on that WebElement. It is known that dynamic content loading with AJAX is widely used across different web products (or websites). When interacting with dynamic WebElements using Selenium test automation, it is recommended to add Selenium to wait for the page to load so that the element is available for performing tests.