Did you forget the password of your wallet.dat or do you remember it?
If you remember, then you can skip the process of getting public keys entirely, and open Bitcoin Core andsend the wallet's balance to another wallet.
If you don't remember the password, then you need to understand that wallet.dat files have several hundred private keys inside it and that each one has a corresponding public key and address. You only need the public keys for addresses that have a non-zero balance in them.
You sound like you know how to use tools, so you should run Pywallet with the --dumpwallet switch to get a list of addresses inside. The private keys might be encrypted but that is not a problem for now.
Then, use block explorer like Blockchair to check if 1) the address is in their records - in other words, there is a transaction associated with it - and 2) if any bitcoins have been sent from those addresses. This'll give a compressed public key, but if a tool only accepts uncompressed keys there is a method to convert between the two.
The latter part is important because the public key is only exposed for outgoing transactions. If an address has only received incoming transactions then its public key has not been revealed and you only have a hash160.
P.S. it is far more likely you can recover the wallet if you brute force the password instead of each public key because you might have a faint remembering of the password while you have to search the entire 256-but range for each public key, and it will be almost impossible even for one public key.
Thank you so much, what is the best tool to use brute force? i heard btcrecover and hashcat will do the job, which is the fastest method? i have solid server with 32GB RAM and Xeon processor, i also can rent 8x RTX 2080ti GPU Servers? appreciate your response.
P.S i dont remember the password but i have handful of suggestions that i can start with.