Given your technical means I would say that the correct way to do that imho is to process the DOM and build the list from that.
Also the bag of c**t providing the medication should offer a REST api, e.g allow get the contents of the page as JSON, so that the different elements can be retrieved accurately. The idea of using the DOM is somewhat similar but still shitty as if the formatting changes (as you said this happens 2 or 3 times per year) the results might become wrong. (but let's say with some unittests run on a particular page you can detect a change, e.g reading the DOM doesn't give the expected result anymore)
For obtaining the DOM there are several libraries:
https://forum.lazarus.freepascal.org/index.php?topic=47423.0BTW I was thinking... the format of the page can change, you said, but what about the medication, are they written in the marble ? (i.e same format but different content, for example if at some point they switch from a brand to another, assuming both furnish similar products for example)