A known way:

call balanceOf to get the number of tokens owned by the address call
Call tokenOfOwnerByIndex in a loop to get each owned token ID.

But what I'm very confused about is what to do when the ERC721 contract has not included  tokenOfOwnerByIndex function
tokenOfOwnerByIndex is what most token will provide for you to enumerate in, but you could use Transfer event on that contract to do that also
How to get the tokenids of certain ERC721 tokens for a adress? using Web3py