Bitpay uses the BIP 70 Payment Protocol. This protocol does not use addresses, which is why they are able to now show an address. Rather, the Bitcoin URI that you are given (either you scanned it with a QR code reader or you entered it into your wallet) points to a place where your wallet can download a PaymentRequest. The Bitcoin URI format for pointing to the PaymentRequest download location is specified by BIP 72.
The PaymentRequest that is downloaded contains a list of outputs (amounts and scriptPubKeys) that Bitpay wants you to have in your transaction. These outputs do not contain addresses; instead they have directly the scriptPubKey that should be in the output. This allows for forward compatibility with other new script or address types that did not exist at the time of BIP 70's writing.
but I'd like to extract the Bitcoin address from the bitpay invoice manually myself.
You can download the PaymentRequest as a file from the URL specified by the PaymentRequest. That PaymentRequest encoded using Google's Protocol Buffers with the fields specified in BIP 70. So using a Protobuf decoder, you can get each specific field of the PaymentRequest, and from there, each field of each output, and then convert the output scripts to addresses if those scripts even have addresses. I have a slightly outdated project that runs locally to do all of this for you.