You could deploy your own custom router contract. Easily fork one from the original Uniswap Router. Make every write function to be onlyOwner(). Then modify the swap function so instead of sending the token back to the sender wallet. The contract itself will receive and send the token.
Thus when selling you don't need any approval, because the contract is the owner of the token itself. For actual uses, you transfer WETH from your wallet to that contract first. Then use your custom function for swapping tokens. And don't forget to create a withdrawn function so you could call that and let the contract send WETH it has back to your wallet.
This is common practice use by bot. You can completely trade using this contract instead of Uniswap one unless the token only lets a specific address(eg. original router) call transfer.